C語言Windows程序設計 - 「第一個屬於自己的窗口」

虎牙來了 發佈 2019-12-28T04:32:23+00:00

☺創建屬於自己的窗口۞創建窗口前的準備在創建窗口前我們先來熟悉幾個名詞, 這些名詞現在可以暫時不去透徹的進行理解, 只需要印象中知道有這麼回事就行。1>.

☺創建屬於自己的窗口

۞創建窗口前的準備

在創建窗口前我們先來熟悉幾個名詞, 這些名詞現在可以暫時不去透徹的進行理解, 只需要印象中知道有這麼回事就行。

1>. 窗口

  "窗口"這個我們都已經十分熟悉了, 在Windows中, 一個應用程式窗口上一般會在標題欄上顯示程序的名稱, 緊挨著標題欄的菜單欄, 或許還會有狀態欄、滾動條等其他"裝飾品"。

2>. 控制項

  在一些應用程式中, 我們經常可以在程序的介面上(窗口)看到一些按鈕(Push Button)、文本框(Text Box)、列表框(List Box)、滾動條(Scroll Bar)等, 這些對象通常被稱為控制項, 在 Windows程序設計 中, 還被稱為"子窗口"、"控制項窗口"或"子窗口控制項"。

3>. 窗口類

  在建立一個窗口前, 我們必須先註冊一個"窗口類"(Windows Class), 接觸過面向對象的朋友應該會首先想到面向對象當中的"類", 但是, 這裡"窗口類"中的"類"並不是指面向對象當中的那個"類"。

  在這裡我們可以把"窗口類"理解為一個結構體, 結構體的成員就是窗口的一些屬性, 例如窗口的標題是什麼、窗口使用什麼樣的小圖標以及窗口的風格之類的屬性, 一個窗口就是一個結構體的對象, 結構體成員的屬性決定著窗口的屬性。

4>. 消息循環

  在Windows程序設計中, 消息循環是個不得不提的概念, Windows作業系統是以消息驅動的, 消息隊列是指在一個應用程式運行時, Windows作業系統會為該應用程式建立一個"消息隊列", 這個消息隊列用來存放該程序可能創建的各種窗口的消息, 當用戶對應用程式進行操作時, 例如點擊一個按鈕、調整下窗口的大小等, 此時Windows會立即把這一消息告訴應用程式, 使應用程式能作出相應的動作。

5>. 窗口的過程函數

  當一個窗口建立之後, 就可以從Windows那裡不斷的接收到Windows發來的消息, 接收到消息後我們就需要一個函數來處理這些消息, 可以簡單的理解為, 這個用來處理接收到的消息的函數就稱為窗口過程函數或者回調函數。

下面我們來嘗試著看一個創建一個基本窗口的代碼。

۞嘗試創建自己的窗口

代碼如下:

--------------------

--------------------

  先簡單介紹這段代碼, 在主函數WinMain中的窗口類對象wndclass我們定義了窗口的相關屬性, 嘗試註冊窗口類並調用CreateWindow創建窗口, 創建完成後用ShowWindow讓窗口顯示出來, 我們還使用了個while用來從消息隊列里獲取並分發消息給程序, 我們還定義了一個過程函數WndProc用來處理系統發來的消息。

  編譯運行後, 如果沒有錯誤將首先看到一個窗口建立成功與否的對話框, 當創建窗口失敗時彈出一個錯誤對話框並關閉程序。

  當窗口被創建時首先Windows會發給我們一條創建完成的消息"WM_CREATE", 在我們的消息處理函數WinProc中有switch-case語句對該消息進行了處理, 就是彈出一個窗口創建完成的對話框。


  同樣, 我們還處理了當窗口的客戶區(內容部分)被改變時發來的的"WM_PAINT"消息進行了處理, 讓"Hello, 這是我創建的窗口!"始終顯示在窗口中心。

"WM_LBUTTONDOWN"消息是當用戶在客戶區按下滑鼠左鍵時發來的消息, 我們作出相應的動作為彈出一個滑鼠左鍵被按下的對話框。

  當用戶點擊窗口的關閉按鈕時, "WM_DESTROY"消息就會發來, 我們作出的動作是彈出"關閉程序!"的對話框並且退出程序。

今天的學習先到這裡, 明天我們詳細學習下整個創建窗口的代碼。

--------------------

我是一名從事了10年開發在退休邊緣垂死掙扎的高齡程式設計師,最近我花了一些時間整理了一個完整的學習C語言、C++的路線,項目源碼和工具。對於想學習C/C++的小夥伴而言,學習的氛圍和志同道合的夥伴很重要,筆者推薦一個C語言/C++編程愛好者的聚集地,私信我【編程學習】即可!

歡迎初學和進階中的小夥伴。希望你也能憑自己的努力,成為下一個優秀的程式設計師。工作需要、感興趣、為了入行、轉行需要學習C/C++的夥伴可以一起學習!」

關注我,帶你遨遊代碼世界!

下面這些是C/C++能做的 :

伺服器開發工程師、人工智慧、雲計算工程師、信息安全(白客)、大數據 、數據平台、嵌入式工程師、流媒體伺服器、數據控解、圖像處理、音頻視頻開發工程師、遊戲伺服器、分布式系統、遊戲輔助等!

最後分享一張C/C++編程學習路線圖給愛學習的小夥伴們


關鍵字: