2010-02-23 74 views
1

我有一個自CWnd派生的MFC控制,它的工作原理是這樣的:定製MFC控件包含其他控件 - 沒有得到消息通過

  1. 控制有其自身的OnPaint,和黑色的背景
  2. 點擊控件上的任何位置都會導致編輯控件出現在該位置,無邊框和黑色背景,因此它會混合在此框中的用戶類型並點擊輸入,框消失並且控件的自定義繪畫功能呈現相同文字在背景上的相同位置。

因此,我們的控制擁有CCustomEdit,當你點擊控件創建或移動的背景,可見:

CCustomEdit::Show(Rect &rc,CCustomControl *pParent) 
{ 
    if (!::IsWindow(m_hWnd)) 
    { 
     Create(ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | ES_NOHIDESEL | ES_CENTER | ES_UPPERCASE, rc, pParent, 999); 
    } 
    else 
     MoveWindow(&rc); 
} 

主要部件的實際工作OK(我們就完蛋了與方法)。但有一件事情不起作用,CCustomEdit自行註冊EN_CHANGE事件等等。當CCustomEdit被創建爲普通對話框控件(對話框模板上的CEdit,DDX綁定到CCustomEdit變量)這些工作,但在CCustomControl他們不是。

CCustomEdit::PreSubclassWindow()調用SetEventmask()被調用。 CCustomEditON_CHAR處理程序也被稱爲編輯框中的按鍵,但編輯框消息如EN_CHANGE的處理程序不是。

是否有任何明顯的事情,如改變風格標誌?否則,爲什麼我的自定義控件停止這些事件到達包含的編輯控件?

回答

0

我發現它......不知何故,我的SetEventMask()被覆蓋。我不知道如何或在哪裏,但是當我稍後添加一個額外的通話來測試時,大多數事件處理程序開始被調用。

我只能假設MFC中某些部分的init代碼是負責任的。

1

我不確定我是否瞭解情況,但我有一些控制工作方式與我認爲正在發生的工作方式大致相同,都是可行的,這是可能的。

編輯控件的EN_CHANGE發送到您的CWnd派生控件。你是在反映這些信息嗎?如果EN_CHANGE得到自定義控件,你有沒有試過?根據你所描述的,你期望EN_CHANGE自動結束於CCustomEdit的消息調度程序宏鏈中,但它不會;你需要包含窗口的幫助。現在MFC在CDialog中爲你做了大部分工作,但是如果你自己推出,你需要手動完成,或者使用消息反射宏。

相關問題