本例效果图:
新建一个控制台程序, 贴入下面代码即可运行:
新建一个控制台程序, 贴入下面代码即可运行:
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.计划从这里出发, 了解更多底层的东西; 先弄明白这些代码吧!