Windows API視窗程式設計 - 空白視窗
流程介紹
建立一個視窗一共需要6步:
- 註冊類
- 建立視窗獲取控制程式碼
- 進入回撥
- 顯示視窗
- 更新視窗
- 獲取訊息
程式碼解釋
在註冊類之前我們先要建立基本的程式碼框架,也就是編寫WinMain函式,這是Windows視窗程式的入口函式名,相當於控制檯下的main函式,WinMain的定義為:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
引數列表解釋:
- hInstance:當前執行的例項控制程式碼
- hPrevInstance:上一個例項的控制程式碼,不過這個控制程式碼基本沒用了
- szCmdLine:傳遞給應用程式的命令列引數
- iCmdShow:指定程式的視窗的顯示方法
註冊類用的是RegisterClass函式,RegisterClass只有一個引數用於接收WNDCLASSW型變數。
WNDCLASSW是作為一個結構體tagWNDCLASSW的別名,tagWNDCLASSW的結構如下:
而我們的引數使用如下:
視窗型別為CS_HREDRAW,該型別的意思是:移動或者調整視窗的高度(垂直方向)時,重繪整個視窗。
回撥函式後的兩個擴充套件一般都是填0的。
Icon使用預設應用程式圖示資源,Cursor使用箭頭游標。
背景色為白色,當然也可以改成黑色或是灰色。
無選單欄。
類名我們定義為MainWindow,當然定其他的名字也可以,但最好避免定義如button之類的系統內定的字串,字串不區分大小寫,這點我專門測試過。建立一個按鈕,類名寫“BuTton”都可以,但目前我們不需要太關心這個,只是順便提一下。
寫完了WNDCLASS的配置後,就可以用RegisterClass(&wndclass);來註冊類了。
註冊類後,我們就可以通過CreateWindow來獲取視窗控制程式碼,CreateWindow函式的定義如下:
而我們的呼叫如下:
在呼叫之前,我們獲取了螢幕的寬高,以便計算讓視窗位於螢幕的中間,當然也可以用CW_USEDEFAULT,在dwStyle中傳入WS_OVERLAPPEDWINDOW後可以用CW_USEDEFAULT來使視窗位於螢幕中間。
建立視窗後程式就會進入WndProc回撥函式,該回撥函式的定義如下:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
名稱不一定非要是WndProc不可,換成其他的也可以,甚至是ABCProc,但必須要與註冊類時使用的回撥函式名稱一樣,否則將會回撥失敗。
接下來就是回撥函式的實現:
其中hwnd是視窗控制程式碼。
message是傳回來的視窗訊息。
後面兩個都是額外的引數,使用方面沒什麼兩樣,主要區別在於wParam偏向資料本身,而lParam偏向結構體,不理解就當一樣的東西用好了,問題不太大。
在截圖上我們處理了一個叫WM_DESTROY的視窗訊息,在用Windows API建立視窗後,如果關閉視窗,就會發出這個訊息,但如果不做處理那只是視窗被關閉了,程式依然會留在記憶體中,所以我們在接收到訊息後就呼叫PostQuitMessage(0);來退出程式。
而其他的訊息則交給預設的處理方法DefWindowProc。
最後
現在我們已經寫完了能建立一個600 * 400的視窗的程式了,但別急著編譯執行,先檢查一下語法是否正確,括號是否寫全,我在截圖中沒有顯示出來的括號有沒有補上去,請檢查一下。
檢查完了嗎?那麼請編譯執行吧,用G++也可以,用Visual Studio也可以,編譯執行後就會出現一個空白視窗了,截圖如下:
現在空白視窗我們就建立完畢了。
相關文章
- Windows API視窗程式設計 - 自定義按鈕WindowsAPI程式設計
- Windows API視窗程式設計 - 完善自定義按鈕WindowsAPI程式設計
- C語言建立空白Windows視窗程式碼C語言Windows
- Windows API視窗程式設計 - 系統標準按鈕WindowsAPI程式設計
- Go Qt5 建立空白視窗、視窗居中及關閉視窗事件GoQT事件
- 3-Windows程式設計 -視窗與訊息Windows程式設計
- 使用Windows API進行GDI視窗繪圖WindowsAPI繪圖
- 視窗程式框架框架
- 廣告彈窗/小視窗程式碼
- 視窗程式的框架框架
- 視窗
- win10彈出視窗阻止程式在哪_win10視窗阻止程式怎麼設定Win10
- Flink的滾動視窗、會話視窗、滑動視窗及其應用會話
- 拆分視窗
- 聊天視窗
- 視窗事件事件
- mysql視窗函式中的滑動視窗MySql函式
- MAUI Blazor (Windows) App 動態設定視窗標題UIBlazorWindowsAPP
- Windows 任務計劃隱藏顯示黑視窗Windows
- 視窗程式框架示例程式碼框架
- 建立多視窗的Windowsform程式WindowsORM
- windows7視窗跑到螢幕外面Windows
- QT視窗類QT
- 彈出視窗
- pyqt5建立主視窗(介紹視窗型別)QT型別
- Qt 設定視窗居中顯示QT
- Finder Windows for Mac(訪達視窗查詢器)WindowsMac
- 視窗管理工具:All Windows Appear for MacWindowsAPPMac
- Stats渲染資料統計視窗
- Prism 彈出視窗
- 彈出視窗messagebox
- AUTOCAD——視窗縮放
- SQL 視窗函式SQL函式
- Mysql視窗函式MySql函式
- Hive視窗函式Hive函式
- idea 獨立視窗Idea
- PostgreSQL:視窗函式SQL函式
- 喬哈里視窗