2009年11月25日 星期三

MFC的訊息

搞了很久,才發現原來是自己多事造成的問題。總之,先大致解釋一遍好了:

如果動態產生了一個物件,例如CBotton,把它的click event 接來parents的流程應該是這樣:

1. 當然要定義一個ID

#define IDC_BUTTON_UNICODE              1077

2. 利用這個ID去create它

m_Unicode.Create(_T("My Unicode Button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, rect, this, IDC_BUTTON_UNICODE);

this是parents,message 應該會傳去給parents

3. 再來就是在message map 中加入它

BEGIN_MESSAGE_MAP(CRulerRichEditCtrlDemoDlg, CDialog)
    //{{AFX_MSG_MAP(CRulerRichEditCtrlDemoDlg)
    ON_BN_CLICKED(IDC_BUTTON_UNICODE, OnButtonUnicode)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

4. 最後就是定義函式

void CRulerRichEditCtrlDemoDlg::OnButtonUnicode()

 

我搞砸的部份在於,我定義了一個

class WUnicodeButton : public CButton

原來照上面的做也就OK了,但我多事在這個class內部又去收click event,結果外面就收不到了,真是畫蛇添足呀!

 

相關的做法可以參考這裡:

http://www.codeproject.com/KB/cpp/DynMsgMap.aspx

沒有留言: