建立了一个新线程,在线程里建立了窗口,而且配上了消息处理函数,线程函数是这样的{
mycreatewindows();//建立一个窗口,并且给他绑定窗口的消息处理函数
MSG msg; while(Getmessage(&msg,NULL,0,0))
{
//这里面的两个函数忘了怎么写的,就是从主消息循环里拷贝过来的,一个是用来转换键盘消息,一个是把消息传递给消息处理函数
}
}////////////////////////////////////
//线程的消息处理函数
{
switch(wMsg)
{
case ...
....
}
}//////////////////////////////////////
我在主线程用postthreadmessage 一个消息 已知在上面线程的while循环 可以正常接收到,但是无法传递给线程的消息处理函数,就是说while里面的那两个函数并没有把消息给自定义的线程消息处理函数.
请达人指点迷津
mycreatewindows();//建立一个窗口,并且给他绑定窗口的消息处理函数
MSG msg; while(Getmessage(&msg,NULL,0,0))
{
//这里面的两个函数忘了怎么写的,就是从主消息循环里拷贝过来的,一个是用来转换键盘消息,一个是把消息传递给消息处理函数
}
}////////////////////////////////////
//线程的消息处理函数
{
switch(wMsg)
{
case ...
....
}
}//////////////////////////////////////
我在主线程用postthreadmessage 一个消息 已知在上面线程的while循环 可以正常接收到,但是无法传递给线程的消息处理函数,就是说while里面的那两个函数并没有把消息给自定义的线程消息处理函数.
请达人指点迷津
DispatchMessage(&msg);PostThreadMessage不是发给某个窗口的消息,是发给线程的,需要自己在消息循环中判断处理。
mycreatewindows();//建立一个窗口,并且给他绑定窗口的消息处理函数
MSG msg; while(Getmessage(&msg,NULL,0,0))
{
switch(msg.message)
{
case TM_START:
//在这里如果用postmessage 的话 就会被在这里的while再接收遍。g_hThreadhWnd是线程窗口的句柄
::SendMessage(g_hThreadhWnd,msg.message,NULL,NULL);
break;
default:
break;
}
//下面的我注释掉了 程序可以正常运行,貌似从头到尾这两个函数就没用。
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
我没在主线程里用sendmessage是怕影响主线程运行。为什么
TranslateMessage(&msg);
DispatchMessage(&msg);
这两个函数不工作?有人能给我讲下DispatchMessage(&msg);的大体实现么?他是怎么判断把消息交给哪个窗口呢?是当前线程的窗口么?