高分求救:请MFC的消息事件方面的高手进来!

bsk bsk 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我现在有一个问题,困惑已久,希望高手解答!
问题是这样的:
在一个多文档程序中,我启动一个线程(该线程类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分)
...全文
评论 13
收藏 已收藏
分享
返回顶部
bsk
VC/MFC 16,550 成员 421,606 内容