Go語言Windows程序設計(4)--處理子窗體消息之按鈕點擊事件


前言

在上一篇中,我們給最基本的窗體添加了一個按鈕,有了按鈕后,當然就需要發揮按鈕的作用,大家都知道按鈕最基本的功能就是通過用戶的點擊事件與計算機產生交互。如果你做過.net 的winform,wpf或者java的gui等開發,相信這樣的操作你做過無數遍了,而且這樣的操作也是非常方便的,借助vs這樣強大的ide,很容易創建窗體,添加按鈕,並給按鈕添加點擊事件,最后監聽該事件,當該事件觸發時候,回調事件處理函數,執行相應的操作。在現代的窗體應用程序開發中,你經常能看到event(事件)這樣的東西,而看不到消息的處理,因為面向對象的語言對消息處理進行了封裝,使得更方便的開發。那么go語言是否也能這樣呢?答案是肯定的。但是,今天我們不做這樣的事情,我們還是使用傳統的處理消息的方式,來進行點擊消息的處理,至於封裝成類似c#中winform這樣的,這個以后再玩。扯了那么一堆,無非就是想說,其實雖然各種新技術,新語言的不斷出現,其實歸根到底其本質還是沒什么大的變化,至少目前是這樣,無非就是對不方便的操作進行封裝或者通過各種算法和數據機構得到更優的解決方案。那么就開始今天的按鈕點擊消息處理吧。

一、處理子窗體消息

當你給一個窗體添加了一個按鈕后,按鈕也就成了窗體的一個子窗體,當我們點擊按鈕的時候,按鈕就產生了相應的消息,但是,我們之前就知道,父窗體取出消息隊列中的各種消息,然后把消息傳到消息處理函數中處理,那么子窗體的消息是否也能拿到呢?事實上是可以的。當按鈕被點擊后,子窗體就向父窗體發送了一個WM_COMMAND消息,所以我們需要在消息處理函數中添加WM_COMMAND類型消息的分支,最終的消息處理函數如下:

注意看,WM_COMMAND分支中,有一個if條件,它比較的是消息處理函數中參數wParam的低位與指定子窗體的id號是否相等。其實,wParam的低位就是產生消息的子窗體的id號,所以通過它便可以知道具體是那個子窗體產生的消息了。這里,產生消息后,彈出一個第一篇中就講過的彈出消息窗口。

二、關於wParam參數與lParam參數的具體含義

1.LOWORD(wParam) ==> 子窗體ID

2.HIWORD(wParam) ==> 通知碼

3.lParam ==> 子窗體句柄

三、添加按鈕

那么這個子窗體id為什么和1比較?請看WM_CREATE中,addButton函數的最后一個參數就是1,因為我們創建了一個id為1的button。除了通過子窗體id來判斷是哪個子窗體產生的消息外,我們也可以通過窗口句柄進行判斷,如WM_COMMAND中注釋所示。addButton函數如下:

上一篇已經講過如何創建子窗體,所以這里就不講了,關鍵是最后一個id參數,是本篇新加的子窗體id參數。

最后效果:

今天就到此,下次再繼續~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM