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;


 

posted @ 2009-09-30 08:16  Delphi爱好者  阅读(1113)  评论(0编辑  收藏  举报