本例效果图:
新建一个控制台程序, 贴入下面代码即可运行:
program Project1;
uses
Windows, Messages;
{等待调用的过程, 用于在窗体上绘制文本}
Procedure OnPaint(h: HDC);
const
s = 'CodeGear Delphi 2007';
begin
TextOut(h, 10, 10, PChar(s), Length(s));
end;
{窗口回调过程}
function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall;
var
Handle: HDC;
ps: PAINTSTRUCT;
begin
case msg of
WM_PAINT: begin
Handle := BeginPaint(wnd, ps);
OnPaint(Handle);
EndPaint(wnd, ps);
result := 0;
end;
WM_DESTROY: begin
PostQuitMessage(0);
result := 0;
end;
else
Result := DefWindowProc(wnd, msg, wParam, lParam);
end;
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 := LoadIcon(0, IDI_QUESTION);
MyWndClass.hCursor := LoadCursor(0, IDC_ARROW);
MyWndClass.hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH));
MyWndClass.lpszMenuName := nil;
MyWndClass.lpszClassName := 'MyWindowClass';
RegisterClass(MyWndClass);
hWnd := CreateWindow('MyWindowClass', '这是窗口标题', WS_OVERLAPPEDWINDOW,
100, 100, 250, 150, 0, 0, HInstance, nil);
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
while(GetMessage(Msg, 0, 0, 0)) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
计划从这里出发, 了解更多底层的东西; 先弄明白这些代码吧!