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 SDK程式設計之一 視窗示例程式 (轉)Windows程式設計
- 呼叫API函式設計ABOUT視窗 (轉)API函式
- Android 多視窗程式設計Android程式設計
- 使用Windows API進行GDI視窗繪圖WindowsAPI繪圖
- 視窗程式框架框架
- 廣告彈窗/小視窗程式碼
- 用Go語言建立Windows視窗程式GoWindows
- C# API-動畫視窗C#API動畫
- C++“視窗”程式設計啟蒙(之二)C++程式設計
- PowerBuilder資料視窗程式設計技巧十則UI程式設計
- 視窗程式的框架框架
- 在不把視窗設定成當前視窗的條件下,對視窗進行操作。
- JavaScript - 模式視窗和非模式視窗JavaScript模式
- 討論關閉子視窗,重新整理父視窗(非模式視窗)模式
- qt 視窗預設居中QT
- 設定CMD視窗大小
- 彈出視窗程式碼
- win10彈出視窗阻止程式在哪_win10視窗阻止程式怎麼設定Win10
- 視窗事件事件
- jQuery在子視窗如何操作父視窗元素jQuery
- JS彈出視窗視窗的位置和大小JS
- jQuery獲取瀏覽器視窗和文件視窗的高度程式碼jQuery瀏覽器
- 關閉瀏覽器視窗彈出警告視窗程式碼例項瀏覽器
- MAUI Blazor (Windows) App 動態設定視窗標題UIBlazorWindowsAPP
- CSS縮小視窗時,背景圖出現右側空白CSS
- Windows 任務計劃隱藏顯示黑視窗Windows
- 建立多視窗的Windowsform程式WindowsORM
- js如何在子視窗中關閉父視窗JS
- 工作列視窗以及其子視窗結構 (轉)
- JavaScript視窗功能指南之操縱視窗 (轉)JavaScript
- 視窗程式框架示例程式碼框架
- windows7視窗跑到螢幕外面Windows