分享

[Help]子线程中怎么向主窗体发消息

 筱肆 2014-06-10

[Help]子线程中怎么向主窗体发消息

www.MyException.Cn   发布于:2012-06-20 20:37:21   浏览:151次
0
[Help]子线程中如何向主窗体发消息?
C/C++ code
下面的代码想在线程中用PostMessage,向主窗体发消息,但是编译有错误。。。
////////////////////////////////////////////
//VoiceManager.cpp 线程所在的类
#define  WM_DISPLAY WM_USER+2 //接收消息

//线程功能函数
void CVoiceManager::ReceivingLoop(void)
{
while(bFlag)
{
//向主窗体发送消息
::PostMessage((HWND)(AfxGetApp()->m_pMainWnd),WM_DISPLAY,123,NULL);
}
} 
////////////////////////////////////////////
//voiceRecordDlg.h 主窗体对话框所在的类
#define  WM_DISPLAY WM_USER+2 //接收消息

//voiceRecordDlg.cpp
BEGIN_MESSAGE_MAP(CVoiceRecordDlg, CDialog)
//{{AFX_MSG_MAP(CVoiceRecordDlg)
ON_MESSAGE(WM_DISPLAY,OnDisplay)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

int k = 0;
LRESULT CVoiceRecordDlg::OnDisplay(WPARAM wParam,LPARAM lParam)
{
    CString tmp = (CString)wParam;
    m_List.InsertItem(k,tmp);
    k++;
    return 0;
}
////////////////////////////////////////////


------解决方案--------------------
创建线程的时候AfxBeginThread线程的参数传递为GetSafeHwnd();主窗口的HWND窗口句柄
AfxBeginThread(ReceivingLoop, (LPVOID)GetSafeHwnd());


------解决方案--------------------
C、C++技术交流:53271408
------解决方案--------------------
::PostMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_DISPLAY,123,NULL);

------解决方案--------------------
实在不行记得c++不是纯的面象对象,可以用全局变量嘛?全局窗口句柄和全局窗口指针都是可以的

------解决方案--------------------
ON_MESSAGE(WM_DISPLAY,OnDisplay)
写的不对吧
ON_MESSAGE(WM_DISPLAY,&CVoiceRecordDlg::OnDisplay)试试
------解决方案--------------------
创建线程时把主窗体的句柄传进去,然后使用::PostMessage
------解决方案--------------------
探讨
顺便还想想个问题,什么时候用PostMessage,什么时候该用PostThreadMessage?

------解决方案--------------------
hThrd = CreateThread(NULL, 0, ReceivingThrd, this, 0, &dwID);
红色的位置就是参数啊
吧句柄通过这个位置传进去就可以了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多