ダイアログ上のチェックボックスの状態を取得するには?

解決


ななし  2009-05-18 20:23:30  No: 70173

開発環境はVisualStudio2005  WindowsXPでMFCを使用しています。
仕様はメニューバーからとあるメニューを実行したら、モーダルダイアログが表示され、そのモーダルダイアログのチェックボックスの状態を取得しようとしています。DDXは使用しません。

void Cxxx::OnExecMenu()    //自作関数
{
  CDialog dlgModal(IDD_xxx);        //ダイアログリソースの読み出し
  int iRet = dlgModal.DoModal();      //モーダルダイアログの表示

  switch( iRet )
  {
  case -1:
    AfxMessageBox( _T("modal dialog could not be created!!") );
    break;
  case IDOK:    
    UINT uiRet = IsDlgButtonChecked( IDC_xxx );    //チェックボックスリソースの読み出し(★問題箇所)
    break;

}

該当チェックボックスにチェックを付けた状態で、モーダルダイアログのOKボタンを押下しても、
★のところでuiRetが必ず0になり、正常な状態を取得できません。

どのようにしたらよろしいでしょうか?
ご教授ください。


Blue  2009-05-18 20:33:41  No: 70174

ダイアログをモーダルで表示して閉じてしまうと、
そのリソースはすべて消えてしまいます。
ですので、いくらチェックを入れてもなくなってしまうので、チェックされているか
どうかすら確認できなくなります。

IDでリソースにアクセスせずに、DDXのように一度(リソースではない)変数に入れてからそれを使うように
するしかないでしょう。

OnOKあたりでチェックの入っているリソースIDを配列に入れるやらフラグやらで保持する等


ななし  2009-05-18 21:59:23  No: 70175

Blueさん、ありがとうございます。
該当クラスはCDialogを継承していないので、DDXのように出来ないのではと思っています。
すみませんが、具体的なソースコードでご教授いただけないでしょうか?


Blue  2009-05-18 22:03:07  No: 70176

>CDialogを継承していない
ということは、前述通りダイアログ閉じた後では無理では?


どら  2009-05-18 22:19:02  No: 70177

グローバル変数で対象チェックボックスのステータスを格納する変数を用意したり、(一時)ファイルでステータスを保存したり、という方法はなしなのでしょうか?

的外れな内容だったらごめんなさい・・・>_<


Blue  2009-05-18 22:33:20  No: 70178

継承しないので、そのファイルやグローバル変数に格納するタイミングがないわけで、
継承しなくてもたぶんできなくはないと思うけど(CDialogを使わないとか)、
素直に継承したほうがよっぽど簡単なコードになるしわかりやすいとおもう。


ななし  2009-05-18 23:58:45  No: 70179

ありがとうございました。
CDialogを継承した新しいクラスを作って解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加