我正在使用 Win32 API 創建一個游戲,并嘗試使用以下代碼自己繪制一個按鈕:
HWND button = CreateWindow("BUTTON", "", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, 100, 100, 250, 40, hwnd, NULL, instance, NULL);
HDC dc = GetWindowDC(button);
TextOut(dc, 10, 10, "test", 5);
ReleaseDC(button, dc);
我想向大家澄清一下,我曾嘗試過許多情況和各種功能,例如 FillRect、MoveTo、DrawText ......關鍵是它在 WM_CTLCOLORBTN 中作業,在那里我使用 wParam 獲得按鈕的 HDC。我不明白為什么它不起作用。也許 GetDC 功能有問題?我應該使用哪個功能?我指定我嘗試了其他函式,如 GetDC 或 BeginPaint/EndPaint。我需要做什么??
uj5u.com熱心網友回復:
使用BS_OWNERDRAW樣式時,您需要WM_DRAWITEM在父視窗的windproc 中處理(并執行繪制)訊息。這在Button Styles 檔案中有明確說明:
BS_OWNERDRAW
創建一個所有者繪制的按鈕。WM_DRAWITEM當按鈕的視覺方面發生變化時,所有者視窗會收到一條訊息。不要將該BS_OWNERDRAW樣式與任何其他按鈕樣式結合使用。
訊息的是指向結構的指標lParam,其中包含您必須用于繪圖等內容。WM_DRAWITEMDRAWITEMSTRUCTHDC
hDC
設備背景關系句柄;在控制元件上執行繪圖操作時必須使用此設備背景關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411744.html
標籤:
上一篇:C Win32獲取注冊表項
