代码如下:
program Project2; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, windows, Winapi.Messages, Vcl.Dialogs; var swndClass: tagWNDCLASS; message: MSG; mHwnd: hwnd; cxChar, cyChar: Integer; cxClient, cyClient: Integer; function WindowProc(hwnd: hwnd; uMsg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall; var i: integer; uHdc: HDC; ps: tagPAINTSTRUCT; tm: tagTEXTMETRIC; str: string; begin case uMsg of WM_CREATE: begin {获取窗口尺寸} cxclient := GetSystemMetrics(SM_CXSCREEN); cyclient := GetSystemMetrics(SM_CYSCREEN); {获取文本尺寸} uHdc := GetDC(hwnd); GetTextMetrics(uHdc, tm); ReleaseDC(hwnd, uHdc); cxChar := tm.tmAveCharWidth; cyChar := tm.tmHeight + tm.tmExternalLeading; end; WM_PAINT: begin uHdc := BeginPaint(hwnd, ps); // for i := 0 to 100 do // begin // str:='Hello world num:' + i.ToString; // TextOut(uHdc,0,i*cychar,PWideChar(str),Length(str)); // end; EndPaint(hwnd, ps); end; WM_VSCROLL: begin case LOWORD(wParam) of SB_BOTTOM: begin {滚动到底部} uHdc := GetDC(hwnd); str := '滚动到底部'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; SB_ENDSCROLL: begin {完成滚动,松开鼠标} uHdc := GetDC(hwnd); str := '完成滚动,松开鼠标'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; SB_LINEDOWN: begin {向下滚动一行} uHdc := GetDC(hwnd); str := '向下滚动一行'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; SB_LINEUP: begin {向上滚动一行} uHdc := GetDC(hwnd); str := '向上滚动一行'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; SB_PAGEDOWN: begin {向下滚动一页} uHdc := GetDC(hwnd); str := '向下滚动一页'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; SB_PAGEUP: begin {向上滚动一页} uHdc := GetDC(hwnd); str := '向上滚动一页'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; SB_THUMBPOSITION: begin {用户拖动滚动条,且松开鼠标} uHdc := GetDC(hwnd); str := '用户拖动滚动条,且松开鼠标'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; SB_THUMBTRACK: begin {用户正在拖动滚动条} uHdc := GetDC(hwnd); str := '用户正在拖动滚动条'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; sb_top: begin {滚动条到顶端} uHdc := GetDC(hwnd); str := '滚动条到顶端'; TextOut(uHdc, 0, 0, PWideChar(str), Length(str)); ReleaseDC(hwnd, uHdc); end; end; end; end; result := DefWindowProc(hwnd, uMsg, wParam, lParam); end; begin swndClass.cbClsExtra := 0; //窗口类扩展,无 swndClass.cbWndExtra := 0; //窗口实例扩展 swndClass.hbrBackground := COLOR_BACKGROUND; //窗口背景颜色黑色 //LoadCursor() swndClass.hCursor := LoadCursor(0, IDC_ARROW); //窗口采用箭头光标 swndClass.hIcon := LoadIcon(0, IDI_APPLICATION); //窗口最小化图标:采用缺省图标 swndClass.hInstance := hInstance; //窗口实例句柄 swndClass.lpfnWndProc := @WindowProc; //窗口处理函数 swndClass.lpszClassName := 'myWnd'; //窗口类名 swndClass.lpszMenuName := nil; //窗口菜单 swndClass.style := CS_DBLCLKS; //窗口样式 if RegisterClass(swndClass) = 0 then begin Writeln('windows class register error!'); Exit; end; mHwnd := CreateWindowEx(0, 'myWnd', 'Delphi Windows', WS_OVERLAPPEDWINDOW or WS_VSCROLL or WS_HSCROLL, {滚动条添加} CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, 0, hInstance, 0); ShowWindow(mHwnd, SW_SHOW); UpdateWindow(mHwnd); while GetMessage(message, 0, 0, 0) do begin TranslateMessage(message); DispatchMessage(message); end; Readln; end.