如何在控件里取得主窗体的最小化消息?帮帮我。thank(100分)

  • 主题发起人 主题发起人 zhbruce
  • 开始时间 开始时间
Z

zhbruce

Unregistered / Unconfirmed
GUEST, unregistred user!
请问windows是否为每一个应用程序都建立一个消息队列.是不是有两个应用程序就建立两个消息队列. <br>我写了一个控件,但是有遇到一个小问题..我的控件的作用是根据主窗体的最小化和最大化时作出相应的动作.. <br>但是现在不知如何在控件中取得主窗体的最小化消息和最大化消息.有一个想法是:在控件中写一个消息循环接收主窗体的消息,我想如果在控件里按一般方法写消息循环的话,消息循环收到的是控件的消息而不是主窗体的消息。请问在控件中的消息循环,如何才能收到主窗体的消息。 <br>我在delphi和C++builder论坛都问过了,有一种说法是用hook.但是如果用线程hook可能做不了。如果用全局hook所处理的消息过多。。 <br>不知道我用消息环循的想法是否正确! <br>请各位指点迷津。 <br>不胜感激!<br>我只有114分。我出100分。请各位帮我解决一下这个问题。<br>其实,我写的控件就是为了现在托盘的功能。是托盘的控件。<br>但是主窗发出消息时,控件如何才收到(如果不用hook)?<br>&nbsp; &nbsp;thank! <br>
 
if form.WindowState:=wsMinimized then ...<br>if form.WindowState:=wsMaximized then....
 
托盘的问题,,哎呀,,论坛上好多了,,到我发过的帖子那里看:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=1201512<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=1239550<br><br>其中的语句:<br>PostMessage(Application.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);<br>发送的就是系统的窗体的最小化消息,WPARAM参数是表示的窗体的最大化或最小化,<br><br>我只用到了最小化的消息,最大化的消息,你仅需把MIN换成MAX就可以了,当然,你最好<br>到SDK里去看它的原始信息,,要完整些,,,!!!<br>
 
to HeyTommy<br>&nbsp; &nbsp;我是要写一个托盘控件,在控件里.我收不到主窗体发出的SC_MINIMIZE和SC_MAXIMIZE<br>消息.这是问题的关键.一直都解决不了.窗体消息传去控件的问题.<br>&nbsp; &nbsp;thank.
 
哦,是这个样子哦?<br>那你用钩子行不?钩子类型为 WH_CALLWNDPROCRET,不是哦,,“主窗体发出的SC_MINIMIZE和SC_MAXIMIZE<br>消息”,是主窗体收道这两个消息哦,,那就要用 WH_CALLWNDPROC 的钩子了,至于钩子的使用,不难,你稍微<br>看一下帮助就知道了,,呵呵,,但你需要载控件的构造函数中设置这个钩子哦,在析构函数中取消挂钩,自己<br>去看看吧!!:)
 
对于应用程序的消息队列,是啊,每个都有;;你要在控件里用消息循环?有没有搞错,,<br>肯定不行塞,用钩子就行了,因为你监视的消息也不多,当你的钩子“过滤”到你需要的消息,<br>就作出相应的动作了塞,,还用消息循环?它也是要过滤每个消息的呀!!!
 
定义一个句柄:myhand<br>myhand:=findwindow(classname,winname)<br>PostMessage(myhand,WM_SYSCOMMAND,SC_MINIMIZE,0);<br>发送的就是系统的窗体的最小化消息,WPARAM参数是表示的窗体的最大化或最小化,
 
SC_MINIMIZE是消息参数!不是消息类型!!<br>用个自定义回调函数不就行了?!而且托盘控件需要设置自定义回调函数的!<br>在回调函数中判断系统是否最小化!就是用你说的那2个参数来判断最大还是最小化的
 
有现成的构件,参看一下
 
替换Application-&gt;Handle的窗口过程,然后检测消息WM_SIZE以及响应的参数wParam值是否是<br>SC_MINIMIZED和SC_MAXIMIZED就可以了.
 
当窗体Min时<br>想控件传递一个变量应该可以吧<br>
 
多人接受答案了。
 
后退
顶部