Windows API視窗程式設計 - 自定義按鈕
流程介紹
自定義按鈕實際上就是新建一個自定義類,系統標準按鈕也不知道能不能重繪,反正我不知道怎麼去重繪,只能新建一個類自己去畫了。
畫一個自定義控制元件很簡單,用RegisterClass註冊一個類,然後在回撥函式的WM_PAINT屬性中用GDI去畫控制元件。
程式碼解釋
註冊類只能在CreateWindow之前執行,所以我們找到註冊頂級容器類的地方,在下面修改一下wndclass的屬性再註冊,程式碼如下:
BtnWndProc是我們自定義按鈕的回撥函式名。
游標使用手型,類名為FButton,也就是系統標準按鈕類名前加了個F。
修改完畢後註冊一下就可以了。
然後我們在WndProc的WM_CREATE訊息中使用CreateWindow新建自定義按鈕,我們只要把類名改一下就可以了,程式碼如下:
接下來寫BtnWndProc函式,模板採用WndProc,我們只修改WM_PAINT訊息,給這個按鈕畫一個邊框,我們使用GDI函式的BeginPaint、EndPaint、MoveToEx和LineTo,程式碼如下:
HDC和PAINTSTRUCT作為繪圖相關的資訊。
BeginPaint和EndPaint函式作為為指定視窗進行繪圖的範圍,BeginPaint通知作業系統準備繪圖,EndPaint結束繪圖。
MoveToEx相當於是將畫筆移動到指定座標,這裡設定是(0, 0)。
LineTo是從MoveToEx或是上一個LineTo開始向指定座標繪製線段,我們這裡執行了四次,也就是為按鈕畫了一個框,執行效果如下:
在左上角我們就畫了一個框了,並且滑鼠移上去會變成手型,這就是我們之前註冊類時的IDC_HAND。
只不過這看起來就是一個框,根本不像是一個按鈕,而且連文字都沒有,點選也沒有任何反應。
別急,下一節課我們來調整自定義按鈕。
相關文章
- Windows API視窗程式設計 - 完善自定義按鈕WindowsAPI程式設計
- Windows API視窗程式設計 - 系統標準按鈕WindowsAPI程式設計
- Windows API視窗程式設計 - 空白視窗WindowsAPI程式設計
- fastadmin新增自定義按鈕,並使用彈窗功能AST
- LabVIEW的自定義按鈕View
- Qt QMessageBox::information 自定義按鈕QTORM
- iOS 自定義鍵盤字母按鈕iOS
- Simple WPF: WPF 自定義按鈕外形
- (五)自定義按鈕模板和設定觸發器觸發器
- 如何自定義radio按鈕的樣式
- 3-Windows程式設計 -視窗與訊息Windows程式設計
- fastadmin 工具欄新增自定義按鈕,實現彈窗並儲存資料效果AST
- antd-mobile 自定義picker按鈕樣式
- Qt自定義開關按鈕控制元件QT控制元件
- 「HTML+CSS」--自定義按鈕樣式【004】HTMLCSS
- 「HTML+CSS」--自定義按鈕樣式【003】HTMLCSS
- 「HTML+CSS」--自定義按鈕樣式【001】HTMLCSS
- 「HTML+CSS」--自定義按鈕樣式【002】HTMLCSS
- windows的錄音機視窗中單擊按鈕的作用是什麼Windows
- 短視訊開發app,自定義帶進度條的視訊播放按鈕APP
- 如何禁用控制檯視窗的關閉按鈕?
- 自定義有多個按鈕節點的SliderViewIDEView
- C#自定義控制元件—旋轉按鈕C#控制元件
- 自定義按鈕 圖片標題位置隨意放置
- ASPxGridView中Command列自定義按鈕點選事件概要View事件
- 如何給 SAP Fiori Elements 應用新增自定義按鈕
- 直播平臺搭建原始碼,qt自定義滑動按鈕原始碼QT
- 短視訊系統原始碼,實現按鈕開啟關閉,顏色可自定義原始碼
- 小程式按鈕
- 乾貨!必看創意按鈕設計,打造真正的按鈕誘惑
- 使用Windows API進行GDI視窗繪圖WindowsAPI繪圖
- 基於VUE自定義指令實現按鈕級許可權控制Vue
- Yii1自定義 CGridView 中的操作按鈕中 CButtonColumn 選項View
- 使用自定義 View 繪製一個懸浮式可拖拽按鈕View
- Vue2-利用自定義指令實現按鈕許可權控制Vue
- laravel admin 列展開 自定義行操作 增加編輯修改按鈕Laravel
- 按自定義週期統計資料
- Rust 程式設計視訊教程(進階)——011_2 自定義 BoxRust程式設計