Delphi Win32核心API参考-窗口创建
窗口的创建是Windows程序的基础,几乎所有的用户界面都是窗口。在所有的Windows API函数中,窗口创建函数是最复杂也是最容易产生错误的函数。幸运的是,Delphi可以很好的将窗口的创建细节隐藏起来。但是,了解窗口创建的复杂步骤有助于使开发人员扩展Delphi提供的基本功能,以及实现没有被VCL封装的一些功能。
创建窗口:基本的步骤
使用底层的Windows API函数创建一个窗口是一个繁琐但是易于理解的任务。为了创建一个窗口开发者必须实现下面三个步骤:
一、 首先注册一个新的窗口类。如果开发人员创建的窗口基于系统预定义的类,则该过程可以省略。
二、 然后使用窗口创建函数创建窗口。
三、 最后将窗口显示在屏幕上。如果在调用创建窗口函数时dwStyle参数中包括了WS_VISIBLE风格标志,则这个过程可以省略。
好,废话不多说了。就按照基本步骤创建一个窗口的范例。
{注册窗口类}
function RegisterClassEx: Boolean;
var
WindowClass: TWndClass;
begin
//设置自己的新窗口类
WindowClass.style := CS_HREDRAW OR CS_VREDRAW; //设置类风格
WindowClass.lpfnWndProc := @DefWindowProc; //指向默认窗口过程的指针
WindowClass.cbClsExtra := 0; //没有额外的类信息
WindowClass.cbWndExtra := 0; //没有额外的窗口信息
WindowClass.hInstance := hInstance; //程序实例
WindowClass.hIcon := 0; //没有指定图标
WindowClass.hCursor := 0; //没有 指定光标。
WindowClass.hbrBackground := COLOR_WINDOW; //使用预定义的颜色。
WindowClass.lpszMenuName := nil; //没有菜单
WindowClass.lpszClassName := 'Test Class';//注册的类名称
//窗口类已经设置完毕,在系统中注册
Result := Windows.RegisterClass(WindowClass)<>0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hWindow: HWnd;
begin
//注册新的窗口类
if not RegisterClassEx then
begin
ShowMessage('窗口注册失败');
Exit;
end;
//在窗口类的基础上建立新窗口
hWindow := CreateWindowEx(0, //没有扩展风格
'Test Class', //注册的类名称
'New Window', //标题栏文本
WS_OVERLAPPEDWINDOW, //通用窗口风格
CW_USEDEFAULT, //默认水平位置
CW_USEDEFAULT, //默认垂直位置
CW_USEDEFAULT, //默认宽带
CW_USEDEFAULT, //默认高度
0, //没有属主窗口
0, //没有菜单
hInstance, //程序实例
nil); //没有附加信息
//显示窗口
if hWindow<>0 then
begin
ShowWindow(hWindow,SW_SHOWNORMAL);
UpdateWindow(hWindow);
end else begin
ShowMessage('窗口创建失败');
Exit;
end;
下面是运行效果图,我用的是Delphi 2010试用版
end;