如何在一个线程中给一个窗口发送消息? 如何在一个线程中给一个窗口发送消息? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在线程中保存你的窗口句柄,然后在线程中hMyWnd->PostMessage(.....);或者 ->SendMessage(....); 用 SendMessage 还是 PostMessage 要看你消息的用途SendMessage 是处理完消息后函数才返回,如果你的消息是要立即做处理的,那么用 SendMessage。PostMessage 是将消息放入队列后就立即返回,也就是说该消息会等着被消息循环所处理,不是立即的。两个函数的参数应该都是这样HWND hWnd 消息发送目标窗口句柄UINT msg 发送消息(例如 WM_CREATE )WPARAM wParam 两个消息参数LPARAM lParam具体可查阅 MSDN,CSDN 上就有。 写错了,是PostMessage(hMyWnd,...);和SendMessage(hMyWnd,....); 参考:http://community.csdn.net/Expert/topic/3361/3361969.xml?temp=.1466486 nineclock(本人成分:59%的帅,40%的酷,1%的微量羞涩(-'_'-)) ( ) 信誉:105 2004-10-03 18:17:00 得分: 0 写错了,是PostMessage(hMyWnd,...);和SendMessage(hMyWnd,....); 你没写错的啦!!你说的是 MFC 中封装的函数,这里 hMyWnd 是 CWnd* 吧,呵呵。 ^_^ typedef struct tagMyParam{HWND hHost;.../*other struct member*/}MyParam;DWORD WINAPI MyThreadProc(LPVOID param){ MyParam* pmp = (MyParam*)param; .../*you codeing*/ SendMessage(pmp->hHost,....); ...}/*主线程内把要使用的窗口句柄赋给结构*/MyParam mp;mp.hHost = m_hWnd; /*you master window handle*/.../*创建线程是把参数传进去*/DWORD dwid;CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadProc,(void*)&mp,0,&dwid); 楼主要注意,不同线程之间的数据存储最好存在 Heap 里,或者全局变量也行,也就是说千万不要把楼上的 MyParam mp; 变量声明在函数过程中,这样函数一结束 &mp 该指针指向的数据就会失效。因此你一定要把它放到全局变量或动态分配的内存中(malloc 或 HeapAlloc,其实一样。)。还有,如果你要声明一个线程之间的通讯标志变量,例如 bool bStop 那么最好把它加上 volatile 关键字,这样会防止编译器在优化时把改变量的值存储在寄存器内,引起变量值的过期。 CreateThread时将窗口HANDLE传给线程,需要发送消息时执行SendMessage或PostMessage 或者用FindWindow得到句柄,然后再SendMessage也可以。 用PostMessage或SendMessagePostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。一般,如果发送消息后,没有其他的操作,用SendMessage.如果还有其他的操作,用PostMessage. 谁有网络游戏线程池模型啊,多谢 如何获取网页中的内容?很简单的一个值,高手快帮忙,急 求:一个最简单的网络编程VC实例(用于网络编程入门) 在程序中打开其他程序的错误,帮我看看阿。 IDispatch error #3105 与类的继承有关知识 急!!在线等待!!!!! 在动态库中使用图标资源的问题,解决了马上给分 怎么在对话框中改变各对象的颜色! 控制台应用程序里不能显示 Unicode 汉字吗?(高手请赐教) 如何显示动态设置的字体 VC.NET 和 VC6.0 的主要差别在哪里?
hMyWnd->PostMessage(.....);
或者 ->SendMessage(....);
SendMessage 是处理完消息后函数才返回,如果你的消息是要立即做处理的,那么用 SendMessage。
PostMessage 是将消息放入队列后就立即返回,也就是说该消息会等着被消息循环所处理,不是立即的。两个函数的参数应该都是这样HWND hWnd 消息发送目标窗口句柄
UINT msg 发送消息(例如 WM_CREATE )
WPARAM wParam 两个消息参数
LPARAM lParam具体可查阅 MSDN,CSDN 上就有。
http://community.csdn.net/Expert/topic/3361/3361969.xml?temp=.1466486
写错了,是PostMessage(hMyWnd,...);和SendMessage(hMyWnd,....);
你没写错的啦!!你说的是 MFC 中封装的函数,这里 hMyWnd 是 CWnd* 吧,呵呵。 ^_^
HWND hHost;
.../*other struct member*/
}MyParam;DWORD WINAPI MyThreadProc(LPVOID param)
{
MyParam* pmp = (MyParam*)param;
.../*you codeing*/
SendMessage(pmp->hHost,....);
...
}
/*主线程内把要使用的窗口句柄赋给结构*/
MyParam mp;
mp.hHost = m_hWnd; /*you master window handle*/
.../*创建线程是把参数传进去*/
DWORD dwid;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadProc,(void*)&mp,0,&dwid);
PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
一般,如果发送消息后,没有其他的操作,用SendMessage.如果还有其他的操作,用PostMessage.