首页
社区
课程
招聘
[旧帖] [求助]MFC创建继承自CWinThread类的新UI线程消息响应问题 0.00雪花
发表于: 2013-1-19 16:49 1810

[旧帖] [求助]MFC创建继承自CWinThread类的新UI线程消息响应问题 0.00雪花

2013-1-19 16:49
1810
如题:MFC创建继承自CWinThread类的新UI线程消息响应问题

具体为,创建了一个基于MFC的DLL工程,添加了继承自CWinTread的类CMyUIThread,和继承自CDialog的类CMyDialog。

在DLL.CPP中添加自定义函数启动新UI线程

CWinThread* mythread = AfxBeginThread(RUNTIME_CLASS(CMyUIThread));

在CMyUIThread.CPP文件中添加代码创建窗口

BOOL CMyUIThread::InitInstance()
{
        // TODO: 在此执行任意逐线程初始化
        CMyDialog  mydialog;
        mydialog.DoModal();
        return FALSE;
}

并在CMyDialog类中添加消息响应代码

void CDialogrxjh::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        if (VK_HOME == nChar)
        {
                if (1 == IsWindowVisible())
                {
                        ShowWindow(SW_HIDE);
                }
                else if (0 == IsWindowVisible())
                {
                        ShowWindow(SW_SHOW);
                }
        }
        CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

当mydialog窗口被激活的时候可以正常响应OnKeyDown消息将窗口隐藏,然后我在DLL.CPP文件中用自定义函数发送线程消息

mythread->PostThreadMessage(WM_KEYDOWN,VK_HOME,0x01470001); //PostThreadMessage(MSG,WPARAM,LPARAM)

然后当我在主程序窗口中按下HOME键时,新线程的OnKeyDown消息没有被响应!
这是为什么呢?
百度和谷歌上说线程必须有消息循环才能响应消息,但是MFC的UI线程不是自带消息循环的么??
为啥不响应OnKeyDown消息呢??
还是有哪里写错了???求帮忙解决下

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 79
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
需重载pretranslatemessage
2015-10-26 15:17
0
游客
登录 | 注册 方可回帖
返回
//