根据前面的介绍, 可以完成一个窗口的建立了:
program Project1;
uses
Windows, Messages;
{窗口回调函数, 必须声明在使用它的程序前面}
function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall;
begin
Result := 0;
if msg = WM_DESTROY then {当窗口销毁时}
PostQuitMessage(0) {告诉 GetMessage: 退出吧!}
else
Result := DefWindowProc(wnd, msg, wParam, lParam); {其他消息做默认处理}
end;
{主程序}
var
hWnd : THandle;
Msg : TMsg;
MyWndClass: TWndClass;
begin
{指定窗口类型}
MyWndClass.style := CS_HREDRAW or CS_VREDRAW; {改变大小时重绘}
MyWndClass.lpfnWndProc := @WndProc; {回调函数指针}
MyWndClass.cbClsExtra := 0; {没有额外的窗口类信息}
MyWndClass.cbWndExtra := 0; {没有额外的窗口信息}
MyWndClass.hInstance := HInstance; {程序实例句柄}
MyWndClass.hIcon := 0; {没指定图标}
MyWndClass.hCursor := LoadCursor(0, IDC_ARROW); {选用了系统提供的指针}
MyWndClass.hbrBackground := HBRUSH(COLOR_WINDOW + 1); {背景色使用 Windows 默认的窗口颜色}
MyWndClass.lpszMenuName := nil; {不指定默认菜单}
MyWndClass.lpszClassName := 'MyWindowClass'; {给窗口类型命名}
{注册窗口类型}
RegisterClass(MyWndClass);
{建立窗口并返回句柄}
hWnd := CreateWindow('MyWindowClass', {窗口类型名}
'新窗口', {标题}
WS_OVERLAPPEDWINDOW, {窗口的常规样式}
Integer(CW_USEDEFAULT), {默认水平位置}
Integer(CW_USEDEFAULT), {默认垂直位置}
Integer(CW_USEDEFAULT), {默认宽度}
Integer(CW_USEDEFAULT), {默认高度}
0, {无父窗口}
0, {无主菜单}
HInstance, {实例句柄}
nil {无附加信息}
);
{显示窗口}
ShowWindow(hWnd, SW_SHOWNORMAL);
//UpdateWindow(hWnd); {这个更新窗口要不要好像都可以}
{消息循环}
while(GetMessage(Msg, 0, 0, 0)) do
begin
TranslateMessage(Msg); {对部分键盘消息的再处理}
DispatchMessage(Msg); {将消息发送给回调函数}
end;
end.
接下来再继续完善这些代码!