如果我在某函数中向某窗体发了一条消息,如下:……
pWnd->SendMessage(WM_USER_MYMSG);
……
那么程序是应该在SendMessage处只负责把该消息发给系统之后就返回,还是等待pWnd把该消息对应的函数执行完再返回呢?我过去的理解偏向前者,但我发现有些消息有返回值,甚至可以把pWnd处理该消息的某个结果返回,这样的话,就一定是pWnd把WM_USER_MYMSG对应的消息处理函数执行完pWnd->SendMessage(...)才返回。由于对这个问题不明确,我现在使用如下代码:
CM::fun()
{
int i;
...
pWnd->SendMessage(..., (WPARAM)&i, 0);
}
就有隐患,我想把某个局部变量的地址作为消息的参数传给pWnd,如果按照前面说的第一种执行次序,当pWnd调用消息处理函数时,有可能fun()已结束,i已经不存在了,这必将带来灾难。 请问哪位高手能解答我的问题,或者指点一下哪本书会涉及到此类问题。
pWnd->SendMessage(WM_USER_MYMSG);
……
那么程序是应该在SendMessage处只负责把该消息发给系统之后就返回,还是等待pWnd把该消息对应的函数执行完再返回呢?我过去的理解偏向前者,但我发现有些消息有返回值,甚至可以把pWnd处理该消息的某个结果返回,这样的话,就一定是pWnd把WM_USER_MYMSG对应的消息处理函数执行完pWnd->SendMessage(...)才返回。由于对这个问题不明确,我现在使用如下代码:
CM::fun()
{
int i;
...
pWnd->SendMessage(..., (WPARAM)&i, 0);
}
就有隐患,我想把某个局部变量的地址作为消息的参数传给pWnd,如果按照前面说的第一种执行次序,当pWnd调用消息处理函数时,有可能fun()已结束,i已经不存在了,这必将带来灾难。 请问哪位高手能解答我的问题,或者指点一下哪本书会涉及到此类问题。
PostMessage 把消息发出去之后就返回了。(非阻塞模式)
{
int i;
...
pWnd->SendMessage(..., (WPARAM)&i, 0);
}
这段代码,你将局部变量的地址作为消息参数传递到目标窗口,目标窗口的窗口过程函数会负责处理这个消息,待消息处理完毕时,你的pWnd->SendMessage(....)才会返回建议你看一下win32编程方面的书籍,详细看一下消息是如何传递和处理的!
我补充几句:
1。SendMessage是同步模式(发送)消息,只有当消息处理完后才返回的。
2。PostMessage是异步模式(寄送)消息,发送消息后马上返回(一般未做过消息的处理)
3。书《VISUAL C++MFC编程实例》在这方面有介绍,可以参考。
4。你的用法没有问题。
PostMessage 把消息发出去之后就返回了。
i不会自动析构的SendMessage是间接调用WindowProc()因为windowproc是可以重入的所有就相当与调用一个函数而已
PostMessage是发送一条消息到当前线程的消息队列。
PostMessage 把消息发出去之后就返回了。