Jekin 发表于 2009-5-19 23:55:13

在ACE_Task中 postmessage给MFC主窗口

在MFC与ACE混合编程时,我要在ACE的ACE_Task线程里向MFC主窗口发消息
int WL_AS_ServerTask::svc(void)
{
//1
PostMessage(AfxGetMainWnd()->GetSafeHwnd(),ID_MESSAGE_REFRESH_SERVER,0,0);

//2
//AfxGetMainWnd()-> PostMessage(ID_MESSAGE_REFRESH_SERVER,0,0);

return 0;
}

使用第一种,主窗口接收不到消息;
使用第二种,出错,Debug出错在afxwin2.inl文件的
#pragma pop_macro("SendMessage")
_AFXWIN_INLINE BOOL CWnd: PostMessage(UINT message, WPARAM wParam, LPARAM lParam)
{ ASSERT(::IsWindow(m_hWnd)); return : PostMessage(m_hWnd, message, wParam, lParam); }


请问到底该如何postmessage?:o

Jekin 发表于 2009-5-20 11:21:41

:D 好像把主窗口作为参数传入ACE_Task,好像可是就可以了

不过郁闷的是,每一个要向主窗口传消息的类都必须传入主窗口参数,难道没法用AfxGetMainWnd()-> PostMessage?

winston 发表于 2009-5-20 11:52:10

说明你获取的窗口句柄是空或是错误的。导致无法发送成功,自己仔细追踪一下。

Jekin 发表于 2009-5-21 15:30:43

谢谢咯:handshake
最后的办法还是把主窗口的指针传给每一个要给他发消息的类:Q

在ACE_Task调用AfxGetMainWnd(),结果指针是空的,但是在MFC的线程里,调用AfxGetMainWnd(),确实能得到主窗口的句柄,不知道为何ace里面的线程就调不到?

winston 发表于 2009-5-21 16:55:52

线程从本质上没区别,可能是MFC自己做了一些操作导致。MFC分界面线程和非界面线程,就是内部做了一些处理而已。
页: [1]
查看完整版本: 在ACE_Task中 postmessage给MFC主窗口