Windows API視窗程式設計 - 自定義按鈕

1136863240發表於2019-07-30

流程介紹

自定義按鈕實際上就是新建一個自定義類,系統標準按鈕也不知道能不能重繪,反正我不知道怎麼去重繪,只能新建一個類自己去畫了。
畫一個自定義控制元件很簡單,用RegisterClass註冊一個類,然後在回撥函式的WM_PAINT屬性中用GDI去畫控制元件。

程式碼解釋

註冊類只能在CreateWindow之前執行,所以我們找到註冊頂級容器類的地方,在下面修改一下wndclass的屬性再註冊,程式碼如下: enter image description here

BtnWndProc是我們自定義按鈕的回撥函式名。
游標使用手型,類名為FButton,也就是系統標準按鈕類名前加了個F。
修改完畢後註冊一下就可以了。
然後我們在WndProc的WM_CREATE訊息中使用CreateWindow新建自定義按鈕,我們只要把類名改一下就可以了,程式碼如下:
enter image description here

接下來寫BtnWndProc函式,模板採用WndProc,我們只修改WM_PAINT訊息,給這個按鈕畫一個邊框,我們使用GDI函式的BeginPaint、EndPaint、MoveToEx和LineTo,程式碼如下:
enter image description here

HDC和PAINTSTRUCT作為繪圖相關的資訊。
BeginPaint和EndPaint函式作為為指定視窗進行繪圖的範圍,BeginPaint通知作業系統準備繪圖,EndPaint結束繪圖。
MoveToEx相當於是將畫筆移動到指定座標,這裡設定是(0, 0)。
LineTo是從MoveToEx或是上一個LineTo開始向指定座標繪製線段,我們這裡執行了四次,也就是為按鈕畫了一個框,執行效果如下:
enter image description here

在左上角我們就畫了一個框了,並且滑鼠移上去會變成手型,這就是我們之前註冊類時的IDC_HAND。 只不過這看起來就是一個框,根本不像是一個按鈕,而且連文字都沒有,點選也沒有任何反應。
別急,下一節課我們來調整自定義按鈕。

相關文章