1. 程式人生 > >windows訊息機制詳解

windows訊息機制詳解

MessageBox("ComboBox 選項"+str+" selected!");
在按鈕1 的響應函式OnButton1()中新增程式碼:
m_tab1.SetCurSel(0);
NMHDR nmhdr;
nmhdr.code=TCN_SELCHANGE;
nmhdr.hwndFrom=GetDlgItem(IDC_TAB1)->m_hWnd;
nmhdr.idFrom=IDC_TAB1;
SendMessage(WM_NOTIFY,(WPARAM)IDC_TAB1,(LPARAM)&nmhdr);
m_cb1.SetCurSel(0);
WPARAM wParam=0;
WPARAM lParam=0;
wParam=IDC_COMBO1;
wParam= wParam | (CBN_SELCHANGE<<16);
lParam=(WPARAM)(GetDlgItem(IDC_COMBO1)->m_hWnd);
SendMessage(WM_COMMAND, wParam, lParam);
在按鈕2 的響應函式OnButton2()中新增類似程式碼,只需要把m_tab1.SetCurSel(0)和
m_cb1.SetCurSel(0)分別改成m_tab1.SetCurSel(1)和m_cb1.SetCurSel(1)。
通過SendMessage() 函式向控制元件的父視窗也就是對話方塊視窗傳送相應的訊息,
TCN_SELCHANGE 是以WM_NOTIFY 訊息的形式傳送,引數WPARAM 標識傳送
TCN_SELCHANGE 訊息的控制元件ID,LPARAM 是一個NMHDR 結構體的指標,此結構體的
成員code 標識傳送什麼通告訊息,此處是TCN_SELCHANGE,hwndFrom 是傳送訊息的控
件控制代碼, 程式中用GetDlgItem()->m_hWdn 獲得, idFrom 是傳送訊息的控制元件ID 。
CBN_SELCHANGE 以WM_COMMAND 訊息的形式傳送,同樣的,通過查閱MSDN,可以
對此訊息的兩個引數進行賦值,以保證訊息的正確傳送。
通過上面的5 個步驟,我們的程式就編寫完成了,單擊Button1,可以發現,CTabCtrl
切換到了Tab1 標籤頁,CComboBox 選擇了“選項1”,並彈出訊息對話方塊。由此可見確實引
起了訊息響應函式的呼叫,完成了預定的功能。
通過查閱MSDN,可以得到其他訊息的傳送和包裝形式,我們可以方便的加以利用,完
成更為複雜的功能,可以說,掌握了Windows 的訊息機制,就掌握了Windows 程式設計的核心。