У меня есть простая программа MFC, которая отображает индикатор выполнения .. Я использовал приведенный ниже код для отображения индикатора выполнения ..
HWND dialogHandle = CreateWindowEx(0,WC_DIALOG,L"Proccessing...",WS_OVERLAPPEDWINDOW|WS_VISIBLE,
600,300,280,120,NULL,NULL,NULL,NULL);
HWND progressBarHandle = CreateWindowEx(NULL,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE|PBS_MARQUEE,40,20,200,20,
dialogHandle,(HMENU)IDD_PROGRESS,NULL,NULL);
while(FALSE == testResult)
{
MSG msg;
SendMessage(progressBarHandle, PBM_SETRANGE, 0, MAKELPARAM( 0, 100 ) );
SendMessage(progressBarHandle,PBM_SETPOS,0,0);
ShowWindow(progressBarHandle,SW_SHOW);
Sleep(50);
if(TRUE == myCondition)//myCondition is a bool variable which is decalred globally
{
DestroyWindow(dialogHandle);
AfxMessageBox(L"Test Success");
}
}
когда я выполняю приведенный выше код ... окно сообщения отображается только после события наведения мыши. Например, если я перемещаю мышь, окно сообщения будет отображаться, если нет, то оно не будет отображаться, пока я не перемещу мышь.
А также во время работы индикатора выполнения, если я пытаюсь переместить окно индикатора выполнения .. оно отображает фон окна в месте смещения, а также в новом регионе или иногда в его застревании. Пожалуйста, помогите мне с этим!
EDIT2:
прокачка сообщений.
while(PeekMessage(&msg,NULL,NULL,NULL,PM_NOREMOVE) && (FALSE == testResult))
{
if(msg.message == WM_QUIT)
{
DestroyWindow(dialogHandle);
return TRUE;
}
SendMessage(progressBarHandle, PBM_SETRANGE, 0, MAKELPARAM( 0, 100 ) );
SendMessage(progressBarHandle,PBM_SETPOS,0,0);
ShowWindow(progressBarHandle,SW_SHOW);
TranslateMessage(&msg);
DispatchMessage(&msg);
//return 1;
}