自定义控件

【勇芳软件工作室】汉化HomePreviousNext

应用程序可以创建自定义控件来执行预定义控件不支持的任务。Windows提供以下创建自定义控件的方法:

*使用所有者绘制的按钮,列表框和组合框。

*子类现有的控制窗口类。

*从头开始注册并实现应用程序定义的窗口类。

按钮,列表框和组合框具有可用的所有者绘制样式,可指示控件在必须绘制控件时将消息发送到父窗口。此函数允许应用程序更改控件的外观。对于按钮,所有者绘制的样式会影响系统如何绘制整个控件。对于列表框和组合框,父窗口绘制控件内的项目,控件绘制自己的大纲。例如,应用程序可以自定义列表框,以便它在列表中的每个项目旁边显示一个小的位图。

应用程序可以通过使用适当的样式创建它们来将列表框,组合框和按钮指定为所有者绘制的控件。当控件具有所有者绘制的样式时,Windows照常处理用户与控件的交互,执行这样的任务,例如检测用户何时选择按钮并通知按钮的所有者事件。然而,由于控件是所有者绘制的,控件的父窗口负责控件的视觉外观。有关所有者绘制控件的更多信息,请参阅按钮,列表框和组合框的各个主题。

对现有控件进行子类化是创建自定义控件的另一种方法。子类过程可以通过处理影响所选行为的消息来改变控件的选定行为。所有其他消息传递给控件的原始窗口过程。例如,应用程序可以通过对控件进行子类化并处理WM_PAINT消息,在只读单行编辑控件中的文本旁边显示一个小位图。有关子类化的更多信息,请参阅窗口类.

虽然应用程序可能会对预定义的控件进行子类化,但它依赖于控件的窗口过程来提供控件行为的所有其他方面。有关控件行为的更多信息,请参阅预定义控件的各个主题。

应用程序可以通过注册应用程序定义的窗口类并在CreateWindowEx函数或对话框模板中指定窗口类的名称来创建自定义控件。为自定义控件注册应用程序定义的窗口类的过程与为普通窗口注册类相同。每个类必须有唯一的名称,相应的窗口过程和其他信息。

至少,窗口程序绘制控件。如果应用程序使用控件来让用户键入信息,则窗口过程也会从键盘和鼠标处理输入消息,并将通知消息发送到父窗口。另外,如果控件支持控制消息,窗口过程将处理由父窗口或其他窗口发送给它的消息。例如,控件通常会处理由对话框发送的WM_GETDLGCODE消息,以指导对话框以特定方式处理键盘输入。