我们并非真的绘制了对话方块的显示区域,实际绘制的是子视窗控制项的显示区域。每当对话方块得到一个WM_PAINT讯息时,就令子视窗控制项的显示区域失效,并更新它,使它确信现在其显示区域又有效了,然後在其上画图。
将其他函式用於对话方块
大多数可以用在子视窗的函式也可以用於对话方块中的控制项。例如,如果您想捣乱的话,那么可以使用MoveWindow在对话方块内移动控制项,强迫使用者用滑鼠来追踪它们。
有时,您需要根据其他控制项的设定,动态地启用或者禁用某些控制项,这需要呼叫:
当bEnable为TRUE(非0)时,它启用控制项;当bEnable为FALSE(0)时,它禁用控制项。在控制项被禁用时,它不再接收键盘或者滑鼠输入。您不能禁用一个拥有输入焦点的控制项。
定义自己的控制项
尽管Windows承揽了许多维护对话方块和子视窗控制项的工作,它同时也为您提供了各种加入程式码的方法。前面我们已经看到了在对话方块上绘图的方法。您也可以使用第九章中讨论的视窗子类别化来改变子视窗控制项的操作。
您还可以定义自己的子视窗控制项,并将它们用到对话方块中。例如,假定您特别不喜欢普通的矩形按键,而倾向於建立椭圆形按键,那么您可以通过注册一个视窗类别,并使用自己编写的视窗讯息处理程式处理来自您所建立视窗的讯息,从而建立椭圆形按键。在Developer Studio中,您可以在与自订控制项相联系的「Properties」对话方块中指定这个视窗类别,这将转换成对话方块模板中的CONTROL叙述。程式11-3所示的ABOUT3程式正是这样做的。