高分求救:请MFC的消息事件方面的高手进来!
bsk 2002-05-13 02:44:56 我现在有一个问题,困惑已久,希望高手解答!
问题是这样的:
在一个多文档程序中,我启动一个线程(该线程类CTestThread派生自CWinThread ),在该线程的run函数里发送一个消息通知主线程(类名为CTestApp)去更新主框架的状态条上面的文字。如下:
int CTestThread::Run()
{
int i=0;
CTestApp * pApp = (CTestApp*)AfxGetApp();
while ( true ){
Sleep(1000);
i++;
pApp->PostThreadMessage(WM_TEST_MESSAGE,i,0);
}
return CWinThread::Run();
}
其中WM_TEST_MESSAGE为自定义的消息ID号。
主线程里的函数如下:
void CTestApp::HandleMessage(WPARAM wParam, LPARAM lParam)
{
CMainFrame * pFrame = (CMainFrame*)AfxGetMainWnd();
CString str;
str.Format("%u",wParam);
pFrame->m_wndStatusBar.SetPaneText(pFrame->m_wndStatusBar.CommandToIndex(ID_INDICATOR_TEST),str);
}
ID_INDICATOR_TEST为自定义的状态栏上的ID号。
程序运行成功。启动CTestThread线程后状态栏上的数字每隔一秒加一。
但问题是现在只要鼠标点击菜单,如点击菜单上的文件,弹出文件的菜单,保持这种状态,则状态栏上的数字就不会变化了(如显示数字6),一旦取消这种选择菜单的状态,则状态栏上的数据就一下子增大了(可能就变为18了)。这证明点击菜单的时候线程还是在运行的,但主线程却没办法及时处理CTestThread发送过来的消息。
请教各位高手:有什么办法可以解决这个问题吗?让点击菜单的时候状态栏上的数字也可以每隔一秒加1。条件是要保持用自己打开的线程发送消息给主线程来更新状态栏上的数字这种方法。
谢谢大家的解答!假如分数不过,可以另加!(我现在一次只能加100分)