• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ビジュアルベーシックでは、 AddHandlerステートメントがありましたが・・・・・)

ビジュアルベーシックとVisual C++のダイアログ処理についての困りごと

このQ&Aのポイント
  • ビジュアルベーシックでは、AddHandlerステートメントを使ってダイアログのボタン処理を行うことができましたが、Visual C++ではどのようにしたら良いか途方に暮れています。
  • 質問者はビジュアルベーシックを学んだ後、Visual C++を勉強中です。ダイアログにはOKとCancelのボタンがあり、それぞれ押された際に異なる処理を行い、その後に続く処理を行いたいと考えています。
  • BOOL CXXXDoc::OnNewDocument() という関数内で、ダイアログを表示させるために Cfailsettei クラスを使用し、モーダルでダイアログを表示しています。ダイアログ上のボタンが押された際には、それぞれの処理を行い、その後に続けて処理を行いたいという状況です。具体的な解決方法についてアドバイスをいただきたいとのことです。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ボタンを押してダイアログを終了させる処理をどのように記述するかにより戻り値で判断可能かどうかが決まります DoModalで実行されたダイアログをEndDialogを呼び出して終了させるとEndDialogの引数がDoModalの返り値になります 返り値の種類が複数あるなら switchで分岐したほうがすっきりしたコードになるでしょう switch( nRet ) { case IDC_COMMAND1:   FuncA();   break; case IDC_COMMAND2:   FuncB();   break; case IDC_COMMAND3:   FuncC();   break; case IDC_COMMAND4:   FuncD();   break; } といった具合です または ダイアログクラスにプロパティ(またはフィールド)として終了要因を実装しておき dlg.EndCode などのように終了要因を特定する方法も有るでしょう VS.NET付属のMSDNなどで DoModalやEndDialogなどを調べてみましょう

wxy
質問者

お礼

ありがとうございます おっしゃるとおりにしたところ、 問題は解決しました。 ありがとうございます!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

単純に nRetをif文やswitch文で処理を振り分けることで対処できませんか 処理Cに関しては 上記のブロックの次に記述すれば済むように思います if ( nRet == IDOK ) {   // 処理A } else if ( nRet == IDCANCEL ) {   // 処理B } else {   // 想定外の戻り値   ASSERT(FALSE); } // 処理C

wxy
質問者

補足

ありがとうございます、 cf.DoModal()の、戻り値を 設定することができるのでしょうか? ボタンが 5個も、6個もあった場合に 振り分ける方法を教えてもらえば助かります。 その方法が、分かれば教えて下さい、 よろしくお願いします。

すると、全ての回答が全文表示されます。