文件名称:子窗口控件-em78p153 c语言范例
文件大小:5.55MB
文件格式:PDF
更新时间:2024-06-22 11:40:59
Windows
第九章 子窗口控件 回忆第七章的CHECKER程序。这些程序显示了矩形网格。当您在一个矩形中按下鼠标按键时, 该程序就画一个x;如果您再按一次鼠标按键,那么x就消失。虽然这个程序的CHECKER1和 CHECKER2版本只使用一个主窗口,但CHECKER3版本却为每个矩形使用一个子窗口。这些矩形由 一个叫做ChildProc的独立窗口消息处理程序维护。 如果有必要,无论矩形是否被选中,都可以给ChildProc增加一种向其父窗口消息处理程序 (WndProc)发送消息的手段。通过呼叫GetParent,子窗口消息处理程序能确定其父窗口的窗口句 柄: hwndParent = GetParent (hwnd) ; 其中,hwnd是子窗口的窗口句柄。它可以向其父窗口消息处理程序发送消息: SendMessage (hwndParent, message, wParam, lParam) ; 那么message应该设定为什么呢?您可以随意地设定,数值大小可以与WM_USER相同或更 大,这些数字代表和预先定义的WM_ 消息不冲突的消息。也许对这个消息,子窗口可以将wParam 设定为它的子窗口ID。如果在该子窗口单击,那么lParam可以被设为1;如果未在该子窗口上单击, 那么lParam将被设为0。这是处理方式的一种选择。 事实上,这是在建立一个「子窗口控件」。当子窗口的状态改变时,子窗口处理鼠标和键盘消 息并通知父窗口。使用这种方法,子窗口就变成了其父窗口的高阶输入设备。它将与自己在屏幕上 的图形外观相应的处理,对使用者输入的响应以及在发生重要的输入事件时通知另一个窗口的方法 给封装起来。 虽然您可以建立自己的子窗口控件,但是也可以利用一些预先定义的窗口类别(和窗口消息处 理程序)来建立标准的子窗口控件,您一定在别的Windows程序中看到过这些控件。这些控件采用 的形式有:按钮、复选框、编辑方块、清单方块、下拉式清单方块、字符串卷标和卷动列。例如, 如果想在您的电子表格程序的某个角落放置一个标有「Recalculate」的按钮,那么您可以通过呼 叫CreateWindow来建立这个按钮。您不必担心鼠标操作、按钮显示操作或按下该按钮时的自动 闪烁操作,这些是由Windows内部完成的。您所要做的只是拦截WM_COMMAND消息-当按钮 被按下时,它通过这一消息通知您的窗口消息处理程序。真的这样简单吗?是的,一点也没错。 子窗口控件在对话框中最常用。在第十一章中您将会看到,子窗口控件的位置和尺寸,是在范 例程序的资源描述叙述中的对话框模板里定义的。但是,您也可以使用预先定义的,在普通窗口显 示区域里的子窗口控件。您可以呼叫一次CreateWindow来建立一个子窗口,并通过呼叫 MoveWindow来调整子窗口的位置和尺寸。父窗口消息处理程序向子窗口控件发送消息,子窗口 控件向父窗口消息处理程序传回消息。 在建立普通窗口时,首先定义窗口类别,并使用RegisterClass将其注册到Windows中,然后 用CreateWindow命令依据该窗口类别建立一个普通窗口,从第三章开始,我们就是这么做的。 但是,当您使用预先定义的某个控件时,不必为子窗口注册窗口类别,窗口类别已经存在于Windows 之中,并且有一个预先定义的名字。您只需在CreateWindow中把它们用作窗口类别参数。 CreateWindow中的窗口样式参数准确地定义了子窗口控件的外形和功能。Windows内建了处理 发送给依据这些窗口类别建立的子窗口消息的窗口消息处理程序。