2

MFCダイアログベースのアプリケーションがあります。

メインダイアログには子ダイアログが含まれています(CTabCtrlコントロールで使用されます)。

  • CDialog mainDlgClass;

  • CMyChildDialog childDlgClass;

メインダイアログから子ダイアログのコントロールを変更したり、メッセージを送信したりする方法を教えてください。たとえば、PostMessageを介してRegisterWindowMessage、子ダイアログのコントロールを変更できるように使用しますか?

子ダイアログのハンドルを取得する方法がわかりません。

void mainDlgClass::check() 
{
   if(condition)
       PostMessage_to_the_child_dialog(***);
   OR
   if(condition)
       Modify_CStatic_text_on_the_child_dialog(***);

}

編集:

構造のスクリーンショット:

リソースエディター

リソースエディター

メインダイアログ+ChidlDialogを含むCTabCtrl

メインダイアログ

子ダイアログにはWS_CHILDプロパティが設定されています。

解決しました。

4

1 に答える 1

2

2 番目のダイアログがメインの子ダイアログ (WS_CHILD スタイルを持つ) であると仮定すると、メイン ダイアログによって作成される必要があります。子ダイアログは、親ウィンドウのクライアント領域に限定されます。

子ダイアログ クラスにパブリック メンバー関数 (アクセサー) を提供して、メイン ダイアログからアクセスし、必要なものを変更することができます。または、サブクラス化された子のダイアログ コントロールが public と宣言されている場合 (Led OOP のように)、それらに直接アクセスできます。

問題は、実際には子ではない (WS_CHILD スタイルを持たない) 2 番目のダイアログを子として参照する可能性があることです。ただし、2 番目のダイアログがモードレスとして生成される場合は、上記の方法を使用できます。

モーダルの場合、メイン ダイアログが無効になるため、アプローチが異なる場合があります。したがって、ユーザーはメイン ダイアログ コントロールにアクセスできません。もしそうなら、もっと情報を教えていただけませんか?

たとえば、どのような状況でコントロールを変更する必要があるか。

于 2012-06-24T15:54:38.870 に答える