- 締切済み
ターゲットクラスのメンバ変数、関数にアクセスするには
現在動作中でクラスのインスタンスを直接作れないクラスにアクセスする方法を、 両クラスの親を通してアクセスできる方法を教えてもらいましたが、 複雑なクラス構造になるとどうしても理解しにくい書き方になってしまいます。親を通さず直接操作する方法を教えてください。 今やっている方法は、親のターゲットクラスのインスタンスでターゲットを操作するために、 自分から親にメッセージを送って親を通してインスタンスを使いアクセスしています。 //自分クラス WPARAM wPara = MAKEWPARAM ( ID_BTN , NULL ) ; LPARAM lPara = ( LPARAM ) ( m_hWnd ) ; GetAncestor(GA_PARENT)->SendMessage(WM_COMMAND, (WPARAM)wPara, (LPARAM)lPara); //親クラス CTargetClass tgClass; tgClass.TargetFunction(); //ターゲットクラス (CTargetClass) TargetFunction(); 教えてください。お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
CListCtrl > CDockablePane(子Wnd) > MainFrame(親Wnd) > CDockablePane(子Wnd) > CListBox この2つのCDockablePane(子Wnd)は別物なのでしょうか? MainFrameののポインタはGetParentFrameで取得可能ですよ
- gentoo314
- ベストアンサー率41% (15/36)
MFCのプログラムのようですが、Docoument-View タイプの作りでしょうか。その場合、上記3つのクラスはそれぞれ、App, Document, MainFrame, View の4つのクラスのどれに当てはまりますか。
補足
正確にルートをたどると、 CListCtrl > CDockablePane(子Wnd) > MainFrame(親Wnd) > CDockablePane(子Wnd) > CListBox です。 グローバルコントロール変数を使わずにターゲットを探し出して 操作する方法を教えてください。 できればSDKプログラムからもアクセスするのでWin32APIで出来ればうれしいのですが、 プログラムは言語の本を読み終わってまだ数カ月のど素人ですので 基本的な部分を省略しないで教えていただけるとうれしいです。 よろしくお願いします。
お礼
やっとわかりました。 ありがとうございました。 ((CMainFrame*)GetParentFrame())->m_wnd.Function();