私のメインクラスに、CTreeViewコントロールから派生したクラスであるプライベートメンバーがあるとしましょう。メインクラス自体でこのツリービューコントロールからのメッセージを処理するにはどうすればよいですか?
これは、Visual Studiosが構築するMDIベースアプリケーションに似ています。ここでは、CClassViewおよびCFileViewという名前の2つのドッキング可能なツリービューコントロールがあり、それぞれに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;
}
2回目の試行:
//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");
}