• ベストアンサー

いとこの親のコントロール変数のメンバ関数が実行できない

MFCでこのメンバ関数を実行できません。 GetAncestor(GA_PARENT)->GetAncestor(GA_PARENT)->m_wnd.m_ListBox.AddString(_T("test")); friend classを使ってもダメで、FindWindowでも検索できず、 SendMessageも受け取れず、extern CListbox m_ListBoxでもエラーがでます。どうすればいいんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

> extern CListbox m_ListBox m_ListBox をexternするような処理は、とても信じられません。 MFCの入門書から、勉強しなおした方が良いのではないでしょうか。 ●憶測 情報量がとても不足していて、回答不能なのですが、 少し、憶測だけで、ヒントを出してみます。 # はずしている場合は、無視してください。 たぶんですが、例えば、クラスA内にm_ListBoxがあり、クラスBより、 クラスA#m_ListBoxを使用したいのでは、ないかと憶測してみます。 この場合、直接クラスBよりクラスA#m_ListBoxを参照する事はできません。 friend classを使用しても、インスタンス参照できないので、だめです。 extern を使用するのは、まったくの場違いです。 この場合、クラスAとクラスBを使用している共通の呼び出し元クラスCがあると想定して、 クラスCより、クラスA#m_ListBoxの参照を、クラスBへなんらかの方法で、 受け渡してあげると良いと思います。

_jast
質問者

補足

ありがとうございます。クラスCを通してクラスAをクラスBから操作することができました。 //クラスC.cpp ON_COMMAND(ID_TEST, test) void クラスC::OnCreate(LPCREATESTRUCT lpCreateStruct){ m_wndA.Create(... CListBox m_LISTBOX = &m_wndA.m_ListBox; } void クラスC::test(void){ m_LISTBOX->AddString(_T("test")); } //クラスB WPARAM wPara = MAKEWPARAM ( ID_TEST, NULL ) ; GetAncestor(GA_PARENT)->SendMessage(WM_COMMAND, (WPARAM)wPara, (LPARAM)lPara); 教えてください。 これ以上少しでも直接的に操作することはできないのでしょうか? GetAncestor(GA_PARENT)->FindWindowExW(NULL,NULL,NULL,_T("クラスAタイトル"))->SendMessage(WM_COMMAND, (WPARAM)wPara, (LPARAM)lPara); これでクラスAに直接メッセージを送れないのはなぜでしょうか? 親の親を取得する場合は、 GetAncestor(GA_PARENT)->GetAncestor(GA_PARENT)-> ではなくて GetAncestor(GA_PARENT)-> でいいのはなぜですか?

関連するQ&A