1. 程式人生 > >《windows程序設計》獲取文本尺寸(04)

《windows程序設計》獲取文本尺寸(04)

new napi ica pan arrow lpar system dex wid

技術分享圖片

代碼如下:

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  windows,
  Winapi.Messages,
  Vcl.Dialogs;

var
  swndClass: tagWNDCLASS;
  message: MSG;
  mHwnd: hwnd;
  cxChar, cyChar: Integer;

function WindowProc(hwnd: hwnd; uMsg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall
; var uHdc: HDC; ps: tagPAINTSTRUCT; tm: tagTEXTMETRIC; begin case uMsg of WM_CREATE: begin {獲取文本尺寸} 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); TextOut(uHdc, 0, 0, PWideChar(format(文字高度:%d 文字寬度:%d, [cxChar, cyChar])), Length(format(文字高度:%d 文字寬度:%d, [cxChar, cyChar]))); EndPaint(hwnd, ps); 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, 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.

《windows程序設計》獲取文本尺寸(04)