当前位置:主页>销售管理软件> 列表

怎样能够用getwindow获取控件句柄? 找速达物业管理软件

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

我还想问一下,不是Twincontrol派生的控件是怎样相应消息的,例如Tshape没有句柄却可以响应mousedown。当鼠标按下时不是发送Postmessage吗?

2楼: 用windowfrompoint呢? 如软件销售合同

3楼: 这个控件的用意是用来管理运行的EXE文件。控件在EXE中起到监听的作用当收到某一自定义消息后执行某一动作。如主程序发送一个自定义的关闭消息WM_CUSTOMCLOSE时,子窗口全部关闭。
主窗口发送消息的方法是遍历所有的窗口及上面的控件,如果发现这个控件存在则发送消息。现在的问题是不能获得这个控件的句柄。

这个控件不可视。

4楼: 直接引用控件的句柄可以吗,不用getwindow

5楼: 根本就没有句柄,怎么得到?
只有TwinControl的后代才有.
有消息循环不代表它有句柄.

6楼: 直接引用可以Postmessage(newcomponent.handle,wm_xxxx,0,0)
消息事件相应,是OK的。

财务软件版7楼: to tutu6688:
我自己创建一个句柄呀?就是因为不想从Twincontrol派生才问的这个问题。
没有VCL不是一样可以做东东?你说不是吗?

8楼: 是,Twincontrol只是windows控件的包装类,你创建的是窗口类句柄吗?怎么创建的?我也想学习下

9楼: 你自己看看TWincontrol类的代码,其实这个类的句柄是建立了一个窗体
其实是调用CreateWindowEx函数,所以你也必须用这个,如果你自己愿意
调用CreateWindowEx你还不如从TWincontrol来继承了,一个非可视组件。
研究一下VCL吧。而CreateWindowEx里面需要的参数,VCL定义了一个
TCreateparam的纪录,而创建这个记录你可以覆盖CreateParams方法。
研究一下吧。

10楼: to tutu6688
不用跟我学,我是看的Timer控件。你看看是不是窗口类句柄。
To crazyman2006
ALLocateHwnd 用的就是CreateWindowEx,你自己可以看看的。

11楼: 首先感谢各位的回答

“研究一下VCL吧”这样的提示不解决问题,您可以把原理帖出来,现在我看不懂可以研究,谢谢。请各位继续。

12楼: 其实结果已经出来了:
1.ALLocateHwnd(wndproc)创建了一个ex_style为WS_EX_TOOLWINDOW,style为POP_UP的窗口,这样的窗口是不可见的,且不会在窗口或对话框和任务条中标出现.


2.Getwindow 要求的窗口是在任务条中出现的窗口,即有z-order顺序的.对于上面创建的窗口会自动过滤.由于没这个函数原代码,只能这样想.
所以你得不到窗口句柄,但用postmessage明确句柄,是可以发送消息的. 如速达物业管理软件

13楼: to tutu6688:
谢谢你的参与,问题好象有进展。
Getwindow(handle,GW_CHILD)帮研究一下有什么限制。Twincontrol控件创建的窗口也在任务条中吗?我也去看看。

财务软件版14楼: Getwindow(handle,GW_CHILD)应该是获得子窗口的hwnd,但你那个没有GW_CHILD风格怎么得到呢?
子控制应该都有GW_CHILD风格吧.

15楼: to tutu6688
ok,you are right!
给你80分,剩下的给其它兄弟了。

16楼: 结帖

17楼: 我其实学得更多,开始我连这个函数都不知道. 我只是个初学者.