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