2013-04-09 115 views
0

我只是維護一些MFC C++代碼,我有一個屏幕與許多CEdit對象。如何實現MFC CEdit的事件處理程序ON_EN_SETFOCUS?

我想實現所有的OnFocus事件,但只寫一個方法來處理事件。

要做到這一點,我需要知道CEdit ID觸發事件,但它看起來像在MFC中OnFocus事件的實現沒有這個作爲一個參數(相對於其他一些事件,如OnCtlColorCWnd*對象作爲參數)。

我只是拒絕相信我必須爲每個單獨的CEdit實現一個小方法,將它的ID傳遞給將要做我想做的主要方法!如果這是唯一的解決方案,可惜你MFC!

回答

3

ON_CONTROL_RANGE macro確切地存在以允許將單個處理程序映射到多個控件上的相同事件。

首先您需要確保您的控件ID是連續的。 然後在標題中你需要聲明一個處理程序,其作爲控制ID作爲參數:

afx_msg void OnSetFocusMulti(UINT ctrlId); 

這使您可以區分發送控制處理程序,如果你需要它。

現在,您需要把它添加到消息映射的一堆ON_EN_SETFOCUS(IDC_EDIT1, &CMyDlg::OnSetfocus)代替:

ON_CONTROL_RANGE(EN_SETFOCUS, IDC_EDIT1, IDC_EDIT_X, OnEnSetFocusMulti) 
        ^  ^  ^   ^
//  notification code | first ctrl | last ctrl | the handler 

其他消息映射宏都記錄here

+0

呀,工作,非常感謝!有一個很大的手動工作來排序的ID,但一旦我完成了,主要來源得到更整潔! – Andres 2013-04-09 11:34:53

+0

很高興聽到它。是的,這有時真的是處理ID的麻煩,特別是如果項目中的多個人員手動更改它們並且邏輯依賴於它們的順序。 – 2013-04-09 14:22:56

相關問題