MFC User defined message & SendMessage

最近需要做一個功能是使用 Combobox 讓使用者輸入位置,之後 CListCtrl 中顯示的資料就需要跳到該位置。不過這兩個控件之間彼此要怎麼溝通呢?

因為這兩個控件同時是 ProgMemView 的子項,因此我的想法是當使用者改變 Combobox 時,讓 Combobox 通知 ProgMemView ,讓 ProgMemView 去告訴  CListCtrl 要做什麼。可能有方式可以讓兩個子控件彼此溝通,待研究出來再補充囉。

2015-03-12-01

 

[實作過程]

1. 在 ProgMemView 和 Combobox 共有的 include 檔中宣告使用者自定義的訊息:

#define WM_MY_COMBO (WM_USER + 1000)

2. 接著在接收端 ProgMemView.h/.cpp 中設定訊息接收處理方式:

// ProgMemView.h
afx_msg LRESULT OnMyComboSetVertPos(WPARAM wPararm, LPARAM lParam);

ProgMemView.cpp
BEGIN_MESSAGE_MAP(CProgMemView, CFormView)
	ON_MESSAGE(WM_MY_COMBO, OnMyComboSetVertPos)
END_MESSAGE_MAP()

LRESULT CProgMemView::OnMyComboSetVertPos(WPARAM wPararm, LPARAM lParam){
	// What you want the receiver do
	m_clPM.SetTopRowNum(wPararm);
	m_clPM.SetVerticalPos();
return 0;
}

3. 再到傳送訊息的 Combobox.cpp 進行資訊傳遞:

int m_bEnterNum = 100;
GetParent()->SendMessage(WM_MY_COMBO,m_bEnterNum);

就可以進行訊息的傳遞囉, wPararm 和 lParam 是訊息傳遞時的參數,這邊我就直接把數字傳過去了~

[參考資料]

1. 用户自定义消息SendMessage的使用

2. MFC中SendMessage和PostMessage两种发送消息用法

3. SendMessage() 跟 PostMessage()