プロセスの進行中に進行状況バーを表示しようとしています...私のアプリケーションでは、ファイルを読み取って操作する必要がある状況があります(完了するまでに時間がかかります)..進行状況バーを表示したいこの操作中..私が呼び出している特定の関数はwin 32です...したがって、以下のコードを確認すると、ダイアログウィンドウに進行状況バーを作成し、スレッドを作成するところまで来ています。投稿する方法がわかりませんメッセージとメッセージとハンドルを取得する場所...助けてください..事前に感謝します
//my function
int Myfunction(....)
{
MSG msg;
HWND dialog = CreateWindowEx(0,WC_DIALOG,L"Proccessing...",WS_OVERLAPPEDWINDOW|WS_VISIBLE,
600,300,280,120,NULL,NULL,NULL,NULL);
HWND pBar = CreateWindowEx(NULL,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE,40,20,200, 20,
dialog,(HMENU)IDD_PROGRESS,NULL,NULL);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
Dispatch(&message);
}
SendMessage(pBar,PBM_SETRANGE,0,MAKELPARAM(0,noOfFile));
HANDLE getHandle = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)SetFilesForOperation(...),
NULL,NULL,0);
}
LPARAM SetFilesForOperation(...)
{
for(int index = 0;index < noOfFiles; index++)
{
*checkstate = *(checkState + index);
if(*checkstate == -1)
{
*(getFiles+i) = new TCHAR[MAX_PATH];
wcscpy(*(getFiles+i),*(dataFiles +index));
i++;
}
else
{
(*tempDataFiles)->Add(*(dataFiles+index));
*(checkState + localIndex) = *(checkState + index);
localIndex++;
}
PostMessage(pBar,PBM_SETPOS,(WPARAM)index,0);
}
}
EDIT2: AFXTHREAD の使用
//instead of createthread i used AfxBegin thread
ptrThread = AfxBeginThread((AFX_THREADPROC)SetFilesForOperation(pBar,checkstate,checkState,noOfFiles,i,getFilesforcompression,dataFiles,&tempDataFiles,localIndex),
NULL,THREAD_PRIORITY_ABOVE_NORMAL,NULL,NULL,NULL);
for(int index = 0;index < noOfFiles; index++)
{
MSG msg;
*checkstate = *(checkState + index);
if(*checkstate == -1)
{
*(getFilesforcompression+i) = new TCHAR[MAX_PATH];
//*(getFilesforcompression+i) = L"C:\\Documents and Settings\\rakesh\\Desktop\\try2_Extracted";
wcscpy(*(getFilesforcompression+i),*(dataFiles +index));
i++;
}
else
{
(*tempDataFiles)->Add(*(dataFiles+index));
*(checkState + localIndex) = *(checkState + index);
localIndex++;
}
//PostMessage( pBar, PBM_SETPOS, (WPARAM)index, 0 );
PostMessage( pBar, PBM_SETRANGE, 0, MAKELPARAM( 0, noOfFiles ) );
//PostMessage( pBar, PBM_SETPOS, (WPARAM)index, 0 );
PostMessage( pBar, PBM_STEPIT, (WPARAM)index, 0 );
PostMessage( pBar, MSG_PROGRESS_VALUE, 0, 0 );
while(1)
{
while(PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE))
{
AfxGetThread()->PumpMessage();
Sleep(10);
}