2014-02-06 54 views
0

我想基於CListView類來編寫一個簡單的網格視圖類。爲了完成這個任務,我創建了一個基於ClistView類的類(CGridView)和一個基於CEdit類的類(CGridEdit)。我想攔截CGridView中的CGridEdit的EN_KILLFOCUS消息,但他們永遠不會到達那裏。這是代碼:爲什麼一個控件的消息不被所有者類攔截?

// CGridView::OnInitialUpdate() 
CRect rect; 
EditField = new CGridEdit(m_hWnd); 
EditField->Create(WS_CHILD | ES_AUTOHSCROLL | ES_CENTER, rect, this, 0); 


// Message Map entry 
ON_MESSAGE(EN_KILLFOCUS,&OnEditFieldLostFocus) 


// actual function 
afx_msg LRESULT CGridView::OnEditFieldLostFocus(WPARAM wParam, LPARAM lParam) 
{ 
    if(lParam == (LPARAM)EditField->m_hWnd) 
    { 
     // this never executes 
     ... 
    } 
} 

因此,標題說,爲什麼這不工作?我從CListView控件收到一些消息,但CEdit的消息永遠不會到達那裏。先謝謝您的幫助。

回答

2

EN_KILLFOCUS不是消息,而是通過WM_COMMAND消息收到的通知。你需要在你的消息映射中使用ON_CONTROL

+0

啊,沒錯,謝謝。但問題是我想避免使用任何用戶定義的ID或消息。我不想定義一個固定值,因爲如果有人重複使用我的類並定義了自己的常量,那麼總會有衝突的可能性。這不會發生,但我想保持正確。你知道是否有任何方法可以在不使用定義的情況下完成它,或者至少有任何方式迫使潛在的階級用戶定義他自己的定義? –