组件制作之五(托盘组件)[5]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 linzhengqun 的 blog

原来还有一个getwindowlong函数会返回当前风格的值,我们可以在控件的构造函数中这样调用

oldstyleex:=getwindowlong(application.handle,gwl_exstyle);

这时,oldstyleex:就保存了窗口原来最小化的风格了,窗口最小化,调用setwindowlong,设置了新的最小风格。而当我们触发托盘事件,使窗体恢复大小时,我们在处理函数中调用

setwindowlong(application.handle,gwl_exstyle ,oldstyleex);

这样,窗口又回到了原来的风格,这时我们设factivefalse,则窗口就能正常最小化了。

 

到控件被释放时,我们一定要调用application.unhookmainwindow(appmsghook);来解除钩子

 

其实这里也有一个不完善的地方,应该再设一个成员变量,确定设置托盘时,窗口是正常最小化,还是最小化到看不见。而我没有这么做,直接如果factivetrue,最小化会出现托盘图标,并且窗口最小化到看不见。不过影响不大,有兴趣的朋友看了之后可以帮我完善一下,也当做自己的练习吗。

 

托盘如果处理消息,上面说到,要设置托盘结构,一定要有一个窗口句柄,才能检索托盘消息,那么这个句柄是什么呢,非可视组件没有窗口句柄呀。

 

如果你有看过ttimer的源码,一定知道这一句代码:

fwindowhandle := allocatehwnd(wndproc);

它创建一个看不见的窗口,返回他的句柄,并指定wndproc为窗口的消息处理过程

本文关键:组件制作之五(托盘组件)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top