8.对Windows基本窗体(Eidt, Button, ListBox....)的了解及说明?
绝大部分对Windows标准窗口控件的封装代码在StdCtrls.pas单元中,一般它们通过覆盖
TWinControl的几个虚拟方法来工作:
1)窗体创建参数方法 CreateParams,如单选框的代码:
procedure TCustomCheckBox.CreateParams(var Params: TCreateParams);
const
Alignments: array[Boolean, TLeftRight] of DWORD =
((BS_LEFTTEXT, 0), (0, BS_LEFTTEXT));
begin
inherited CreateParams(Params);
CreateSubClass(Params, 'BUTTON');
with Params do
begin
Style := Style or BS_3STATE or
Alignments[UseRightToLeftAlignment, FAlignment];
WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW);
end;
end;
事实上我们在写普通窗体的代码时也经常覆盖该方法来修改窗体属性,实现一些Delphi不
支持的功能。
2)创建窗口方法 CreateWnd,在TWinControl.CreateHandle中调用,控件在此对新创建
的窗口进行初始化,如单选框的代码:
procedure TCustomCheckBox.CreateWnd;
begin
inherited CreateWnd;
SendMessage(Handle, BM_SETCHECK, Integer(FState), 0);
end;
3)处理 CN_COMMAND 消息,该消息由 WM_COMMAND 转换而来,为Windows发给窗口的用户
消息,如按钮的代码:
procedure TButton.CNCommand(var Message: TWMCommand);
begin
if Message.NotifyCode = BN_CLICKED then Click;
end;