假設我的主類有一個私有成員,它是從CTreeView控件派生的類。我如何處理主類本身的樹視圖控件中的消息?(MFC)如果控件是私有成員,父類如何接收控件的消息?
這與Visual Studio爲您構建的MDI基本應用程序類似,您可在其中獲得兩個名爲CClassView和CFileView的可停靠樹視圖控件,每個控件都有一個從CTreeView派生的私有成員。
我可以像這樣將消息從子成員控件CViewTree傳遞到我的CFileView類嗎?
void CViewTree::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
GetParent()->SendMessage(WM_NOTIFY, 0, (LPARAM)pNMHDR);
}
這段代碼會拋出一個異常,但如果這樣做有效,我將如何處理父類中的TVN_SELCHANGED消息?
編輯: 所以我試了下面的建議,但沒有太多的運氣與任何一個。
//First try, in the parent .h file:
afx_msg BOOL OnSelChange(NMHDR *pNMHDR, LRESULT *pResult);
//In the .cpp file:
ON_NOTIFY_REFLECT_EX(TVN_SELCHANGED, OnSelChange)
//and
BOOL ParentClass::OnSelChange(NMHDR *pNMHDR, LRESULT *pResult)
{
AfxMessageBox(L"in handler");
Return TRUE;
}
第二個嘗試:
//in the parent .h file:
afx_msg void OnSelChange(NMHDR *pNMHDR, LRESULT *pResult);
//In the .cpp file:
ON_NOTIFY(TVN_SELCHANGED, AFX_IDW_PANE_FIRST, OnSelChange)
//and
void ParentClass::OnSelChange(NMHDR *pNMHDR, LRESULT *pResult)
{
AfxMessageBox(L"in handler");
}
優秀的寫作。許多人試圖「烹飪」MFC已經提供的功能。 –
說實話,我不想這樣做。我想要做到「正確」的方式。我嘗試過在父級處理TVN_SELCHANGED,但它不起作用。當然,這很可能是我做錯了。你能否給我一個例子,你將如何處理父母的這個信息? –
您將在父級獲得WM_NOTIFY,因此您所做的是將ON_NOTIFY宏添加到樹視圖的父級,就像您通常爲對話框上的樹控制所做的一樣。如果您沒有指定,則視圖的ID可能爲AFX_IDW_PANE_FIRST。 –