(一) 利用用户定义的消息通信 在Windows程序设计中,应用程序的每一个线程都拥有自己的消息队列,甚至工作线程也不例外,这样一来,就使得线程之间利用消息来传递信息就变的非常简单。首先用户要定义一个用户消息,如下所示:#define WM_USERMSG WMUSER+100;在需要的时候,在一个线程中调用::PostMessage((HWND)param,WM_USERMSG,0,0)或CwinThread::PostThradMessage()来向另外一个线程发送这个消息,上述函数的四个参数分别是消息将要发送到的目的窗口的句柄、要发送的消息标志符、消息的参数WPARAM和LPARAM。
就是关于这个方面的。高手门给讲解一下。谢谢
就是关于这个方面的。高手门给讲解一下。谢谢
解决方案 »
- 新建的菜单项popup设置为true,无法编辑ID
- 用directshow怎么播放视频?
- 要开发ActiveX控件了,前辈们给点学习建议
- 你学VC编程的动力何在呢?
- 求助关于GetPrivateProfileInt()函数的问题
- GetQueuedCompletionStatus返回FALSE,错误提示“指定的网络名不再可用”。
- 招聘C++程序员
- 我用QOS申请带宽只能申请到16M多一点,再多就申请不到了,会出错,为什么,请高手指点
- 线程定时运行问题
- c++中保存当前活动窗口,怎么弄,新入门,不懂得说
- 我想做个跟media player里类似的播放滑动条,请问如何实现啊?
- vs2003工程的一个问题。。。。
1、PostMessage需要一个窗口句柄,PostThradMessage需要的是一个线程ID!2、第二个参数MSG不用解释吧?3、关于两个参数:你可以把这个认为是函数调用,你这个消息也是个函数!是函数它就可能有参数。消息函数实质是MS规定的一个标准回调函数,所以你必须要以这种方式定义。你可以通过这两个参数来传递相关数据以便该消息函数能处理!
看你这个应该是一个线程给一个界面线程发消息。
其实很简单。
首先你要在界面线程里有这个消息的定义:
#define WM_USERMSG WMUSER+100;然后定义消息回调函数。
afx_msg void MyMessage(WPARAM wparam, LPARAM lparam );消息映射
BEGIN_MESSAGE_MAP(C***, C***)
ON_MESSAGE(WM_USERMSG, MyMessage)
END_MESSAGE_MAP()然后线程里
UNIT mythread(void *param)//param把接受消息的句柄传下来
{
PostMessage((HWND)param,WM_USERMSG,0,0);
}
譬如在刚才的线程函数里加消息循环。#define WM_USERMSG WMUSER+101;
UNIT mythread(void *param)//param把接受消息的句柄传下来
{
PostMessage((HWND)param,WM_USERMSG,0,0); MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
switch(msg.message)
{
case MY_MSG: break;
}
}
return 0;
}CwinThread m_thread=AfxBeginThread(this);
m_thread.PostThreadMessage(WM_USERMSG,0,0);