子窗口控制

来源:互联网 发布:知乎来日方长 编辑:程序博客网 时间:2024/05/01 03:02

子窗口控制

窗口是Windows中最重要的概念之一,当然这也是为什么微软将Windows叫做windows,在Windows的图形界面下,窗口无处不在,大到Windows的桌面,小到一个标签,一个提示框都是一个个的窗口。

窗口可以附属与另一个窗口,被附属的窗口是附属窗口的主窗口,附属窗口是被附属窗口的子窗口。子窗口可能像贴在窗口上一样,看起来就是窗口的一部分;也可能是一个单独的窗口,它总是位于父窗口之上,你可以移动它,单独关闭它。父窗口关闭时,它也跟随着关闭。

父窗口和子窗口之间通过发送消息的方式进行通信,这就像是两个窗口之间的对话。建立一个子窗口和建立一个窗口的方法基本相同。

Windows中提供了很多的子窗口类,只要在建立窗口时指定类名就可以使用系统默认的类,比方说按钮类,滚动条类等。当然也可以自己写一个类并注册,然后建立自己的子窗口。

Windows还提供了一些特殊的方法来帮助实现自己的类。Button类有一个OWNERDRAW风格的按钮,如果定义了它,当Button需要显示的时候,它就会向主窗口发送一个WM_DRAWITEM,这个消息的lParam是一个LPDRAWITEMSTRUCT结构的指针,这个结构指明了当前操作等很多信息,可以通过它来实现自己的子窗口显示。

窗口子类化

可以通过改变窗口过程的地址,通过给窗口设置一个“钩子”以便在自己的程序中处理一些消息。通过SetWindowLongGetWindowLong使用GWL_WNDPROC作为标识符来实现。

给背景着色

在建立窗口类时可以指定背景色,也可以通过SetWindowLongSetClassWord来设置这个画刷的句柄。

给滚动条和静态文本着色

改变滚动条着色通过响应WM_CTLCOLORSCROLLBAR时返回画刷来实现。
同样静态文本域中的文本是处理WM_CTLCOLORSTATIC消息中通过SetTextColor来着色。

原创粉丝点击