根據前面的介紹, 可以完成一個窗口的建立了:
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.