画面の状態を保持するには – プログラミング – Home

画面の状態を保持するには
 
通知
すべてクリア

[解決済] 画面の状態を保持するには


roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

ダイアログベースでメイン画面を表示し、

// AppのInitInstance()で呼んでいる。
CDlgMain dlg();
m_pMainWnd = &dlg;
dlg.DoModal();

メインのダイアログからボタンを押されたときに
メンバであるダイアログベースの画面(検索画面)を表示しています。

void CDlgMain::OnButton()
{
m_DlgSearch.DoModal();
}

検索画面を表示すると、ラジオボタンやエディットボックスが
あります。ラジオボタンを押すと、エディットボックスが
操作不可になります。
ここでOKを押すと検索画面は、消えてしまいます。

もう一度ボタンを押して、検索画面を表示させると、
ラジオボタンやエディットボックスが初期状態に戻ってしまいます。
ラジオボタンやエディットボックスを検索画面のメンバにしてみても
元に戻ってしまいます。

初期状態に戻す処理は、OnInitDialog()で行っています。

検索画面の状態は、検索画面クラス(CDlgSearch)で持っておきたいのですが、
ボタンを押すたびにOnInitDialog()が呼ばれてしまいます。
DoModal()だと、ダイアログが破棄されてしまうのですか?

初期状態は、1度だけで、ボタンを何度押しても状態を保持しておきたいのですが、
いい方法があれば教えてください。

開発環境は、
VC++6.0
MFC,PlatFormSDK
Windows2000です。


引用未解決
トピックタグ
汎
 汎
(@汎)
ゲスト
結合: 22年前
投稿: 43
 

OnInitDialog()は WM_INITDIALOG メッセージでよびだされます。
WM_INITDIALOG はダイアログが最初に表示されるときに呼び出されますので
DoModal()を呼ぶたびに呼び出されます。

何回、DoModal()をよんでも、
CDlgSearchクラスを破棄するまではデータは保持されるはずです。
保持するデータをOnInitDialog()で初期化せずコンストラクタで初期化するように
すればよいのではないでしょうか。


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
 

間違っていたらすみません

メンバ変数で状態を保持し、OnInitDialog内で保持した状態で表示すればよいのでは?

コンストラクタ内で
m_bState = TRUE;

OnInitDialog内で
m_Edit.EnableWindow(m_bState);

状態を変更する時に
m_bState = FALSE;   ←状態を取得しての方がいいかもこれでは固定なので
などとすると

OnInitDialogが何回呼ばれようが前のままで表示されるはずです


返信引用
roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

みなさん、ありがとうございます。

やっぱり、OnInitDialogでメンバ変数の反映という形しかないようですね。

うー。簡単な方法があると思ったのですが。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

モードレスダイアログを使って、
ダイアログを破棄せずに非表示にしておくこともできます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました