找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3730|回复: 4

在ACE_Task中 postmessage给MFC主窗口

[复制链接]
发表于 2009-5-19 23:55:13 | 显示全部楼层 |阅读模式
在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
 楼主| 发表于 2009-5-20 11:21:41 | 显示全部楼层
:D 好像把主窗口作为参数传入ACE_Task,好像可是就可以了

不过郁闷的是,每一个要向主窗口传消息的类都必须传入主窗口参数,难道没法用AfxGetMainWnd()-> PostMessage?
发表于 2009-5-20 11:52:10 | 显示全部楼层
说明你获取的窗口句柄是空或是错误的。导致无法发送成功,自己仔细追踪一下。
 楼主| 发表于 2009-5-21 15:30:43 | 显示全部楼层
谢谢咯:handshake
最后的办法还是把主窗口的指针传给每一个要给他发消息的类:Q

在ACE_Task调用AfxGetMainWnd(),结果指针是空的,但是在MFC的线程里,调用AfxGetMainWnd(),确实能得到主窗口的句柄,不知道为何ace里面的线程就调不到?
发表于 2009-5-21 16:55:52 | 显示全部楼层
线程从本质上没区别,可能是MFC自己做了一些操作导致。MFC分界面线程和非界面线程,就是内部做了一些处理而已。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-26 07:52 , Processed in 0.013343 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表