ラジオボタンの記憶

[戻る]
はな 2006/12/01(金) 11:43:25
Visual Studio2005、ダイアログベースで作成しています。

ダイアログ上にラジオボタン三つ、OKボタン一つが置いてあります。三つの内の一つの
ラジオボタンを選択してOKでデータを書き込むものです。OKの後、画面が一旦閉じま
す。

その後もう一度実行したときに前回選択したラジオボタンにチェックがついているよう
にしたいのですが、よろしくお願いします。今は再開すると一番上のラジオボタンにチ
ェックがいくようになっています。

Blue 2006/12/01(金) 11:50:02
>その後もう一度実行したときに
とは、どういうことでしょうか?
アプリをもう一度実行ということなのでしょうか?
それとも、そのダイアログだけ再度表示ということでしょうか?

どちらにせよ状態をどこかで覚えておくしかないです。

前者の場合、ダイアログを閉じるときにレジストリやXML,INIファイル等に状態を保存
し、次に起動したときにそこから状態を復元します。

後者の場合、レジスト等を使うのもアリなんですが、本当に1次的であれば
呼び出し元がその状態を覚えておいて、次に表示する前にその状態を教えてあげる。

CFooDlg d;
d.SetRadioState(m_RaidoState); // m_RaidoSateはメンバ変数で前回のラジオボタンの
                               // 状態を保持している。
d.DoModal();
m_RadioState = d.GetRadioState(); // ラジオボタンの状態を取得して覚えておく

見たいな感じ。

はな 2006/12/01(金) 11:52:36
わかりづらくてすいません。

アプリをもう一度実行するという事です。

Blue 2006/12/01(金) 11:58:30
では、普通に
>ダイアログを閉じるときにレジストリやXML,INIファイル等に状態を保存
を調べてください。

INIファイルを使う方法が一番簡明でしょう。

読み込むタイミングや、保存するタイミングは、対象のダイアログは開く/閉じる
時でいいでしょう。
(OnInitDialog/OnDestroy)

アプリケーションクラスを利用すると、とても簡単に出来ます。
参考:
レジストリ
http://www.hiramine.com/programming/windows/registrywriteget.html
INIファイル
http://www.hiramine.com/programming/windows/inifilewriteget.html

はな 2006/12/01(金) 13:43:31
詳しくありがとうございます。

単純にOnInitDialog()の所へ

CWinApp::WriteProfileInt(○, ○, ○);
CWinApp::GetProfileInt(○, ○, ○);
の追加でよろしいのでしょうか?まだまだ勉強不足なので追加はしてみたものの引数で
エラーが出ている所です。

Blue 2006/12/01(金) 13:48:14
> エラーが出ている所です。
そうですか。


という反応がほしいのでしょうか?
どんなエラーがでているのか、こちら側ではさっぱりわかりません。
(具合が悪いで、適切な薬を処方できる医者はいない。)

もうそろそろ解答がつく質問の仕方を覚えたほうがよいのでは?

はな 2006/12/01(金) 13:57:59
質問としては

単純にOnInitDialog()の所へ

CWinApp::WriteProfileInt(○, ○, ○);
CWinApp::GetProfileInt(○, ○, ○);
の追加でよろしいのでしょうか?

です。


今現在のエラーについては問題ではありません。すいません。

Blue 2006/12/01(金) 14:04:06
>追加でよろしいのでしょうか?
ちがいます。
http://www.hiramine.com/programming/windows/registrywriteget.html
にもサンプルが載っていますが、AfxGetApp関数でアプリケーションオブジェクトのイン
スタンスを取得してWriteProfileIntやGetProfileIntを呼び出します。

OnInitDialogではGetProfileIntで前回の状態を取得して、
WM_DESTORYをハンドルした関数OnDestroyを追加して(もしくはOKボタンでダイアログを
閉じるのであればそこに記述するほうがよいかも)WriteProfileIntで今の状態を保存し
てください。

はな 2006/12/01(金) 16:43:44
[[解決]]
ありがとうございました。
わからない所もあるので時間をかけて解決したいと思います。

古いスレッドには追加発言できません。