我有一個CListCtrl類,並且當用戶選擇其中一個子項目時,我正在用戶可以從中進行選擇的子項目上顯示CComboBox。從MFC的孩子的孩子截取消息
但是我有一個問題。當用戶做出選擇時,我需要組合框消失(即攔截CBN_SELCHANGE)。問題是我需要使CComboBox成爲CListCtrl的子元素(否則,即使將組合框設置爲最頂層,我也會在列表框中繪製奇怪的問題)。所以CBN_SELCHANGE消息被髮送到列表視圖,可以理解的是,忽略它。如何獲得列表視圖以將該消息傳遞給父窗口。
我真的需要派生我自己的CListCtrl類,它只是截獲CBN_SELCHANGE消息並將其傳遞給父窗口?有沒有比創建OnWndMsg處理程序更好的方法?
感謝您的幫助!
編輯:此代碼的工作
class CPassThroughListCtrl : public CListCtrl
{
protected:
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if (message == WM_COMMAND)
{
GetParent()->SendMessage(message, wParam, lParam);
}
return CListCtrl::OnWndMsg(message, wParam, lParam, pResult);
}
public:
CPassThroughListCtrl()
{
};
};
但我很想知道是否有這樣做一個更好的方式。
雖然它不是一個壞的建議,我還是最終創建出具有的特殊情況外很少使用的自定義類。此外,當你說子類的窗口,我認爲它不意味着使用SubclassWindow函數?如果我能截取信息,我還會想知道是否使用真正的窗口子集。恥辱我neer得到了窗口子類化工作( – Goz
否通過繼承我的意思不超過這個:-):類CNotifyingComboBox:公共CComboBox – BostonLogan
因此,我仍然回到原點之一,即創建一個類是僅在這些特定情況下使用。這就是說你的組合框的優點是我可以重寫圖形,並將其納入列表視圖子項:) – Goz