怎样能够用getwindow获取控件句柄?(100分)

  • 主题发起人 主题发起人 strongburn
  • 开始时间 开始时间
S

strongburn

Unregistered / Unconfirmed
GUEST, unregistred user!
我作一控件派生于TComponent,要求能够响应消息。我在控件中建立了句柄和消息循环处理方法(用ALLocateHwnd(wndproc)),这样可以接收Postmessage()发送过来的消息,并处理。但是这个控件却不能被GetWindow获取句柄,请高手指点。

我还想问一下,不是Twincontrol派生的控件是怎样相应消息的,例如Tshape没有句柄却可以响应mousedown。当鼠标按下时不是发送Postmessage吗?
 
用windowfrompoint呢?
 
这个控件的用意是用来管理运行的EXE文件。控件在EXE中起到监听的作用当收到某一自定义消息后执行某一动作。如主程序发送一个自定义的关闭消息WM_CUSTOMCLOSE时,子窗口全部关闭。
主窗口发送消息的方法是遍历所有的窗口及上面的控件,如果发现这个控件存在则发送消息。现在的问题是不能获得这个控件的句柄。

这个控件不可视。
 
直接引用控件的句柄可以吗,不用getwindow
 
根本就没有句柄,怎么得到?
只有TwinControl的后代才有.
有消息循环不代表它有句柄.
 
直接引用可以Postmessage(newcomponent.handle,wm_xxxx,0,0)
消息事件相应,是OK的。
 
to tutu6688:
我自己创建一个句柄呀?就是因为不想从Twincontrol派生才问的这个问题。
没有VCL不是一样可以做东东?你说不是吗?
 
是,Twincontrol只是windows控件的包装类,你创建的是窗口类句柄吗?怎么创建的?我也想学习下
 
你自己看看TWincontrol类的代码,其实这个类的句柄是建立了一个窗体
其实是调用CreateWindowEx函数,所以你也必须用这个,如果你自己愿意
调用CreateWindowEx你还不如从TWincontrol来继承了,一个非可视组件。
研究一下VCL吧。而CreateWindowEx里面需要的参数,VCL定义了一个
TCreateparam的纪录,而创建这个记录你可以覆盖CreateParams方法。
研究一下吧。
 
to tutu6688
不用跟我学,我是看的Timer控件。你看看是不是窗口类句柄。
To crazyman2006
ALLocateHwnd 用的就是CreateWindowEx,你自己可以看看的。
 
首先感谢各位的回答

“研究一下VCL吧”这样的提示不解决问题,您可以把原理帖出来,现在我看不懂可以研究,谢谢。请各位继续。
 
其实结果已经出来了:
1.ALLocateHwnd(wndproc)创建了一个ex_style为WS_EX_TOOLWINDOW,style为POP_UP的窗口,这样的窗口是不可见的,且不会在窗口或对话框和任务条中标出现.
2.Getwindow 要求的窗口是在任务条中出现的窗口,即有z-order顺序的.对于上面创建的窗口会自动过滤.由于没这个函数原代码,只能这样想.
所以你得不到窗口句柄,但用postmessage明确句柄,是可以发送消息的.
 
to tutu6688:
谢谢你的参与,问题好象有进展。
Getwindow(handle,GW_CHILD)帮研究一下有什么限制。Twincontrol控件创建的窗口也在任务条中吗?我也去看看。
 
Getwindow(handle,GW_CHILD)应该是获得子窗口的hwnd,但你那个没有GW_CHILD风格怎么得到呢?
子控制应该都有GW_CHILD风格吧.
 
to tutu6688
ok,you are right!
给你80分,剩下的给其它兄弟了。
 
我其实学得更多,开始我连这个函数都不知道. 我只是个初学者.
 
后退
顶部