ダイアログの連続表示時に一瞬消えないようにしたい – プログラミング – Home

ダイアログの連続表示時に一瞬消えないよ...
 
通知
すべてクリア

[解決済] ダイアログの連続表示時に一瞬消えないようにしたい


ぬる
 ぬる
(@ぬる)
ゲスト
結合: 15年前
投稿: 8
Topic starter  

環境:VS2012、MFC

ダイアログをDoModalで連続して表示させると、
一つ目を表示後、一瞬画面から消えて次の画面が表示されます。

CDlgAAA aaa;
CDlgBBB bbb;

aaa.DoModal();
bbb.DoModal();

これを、画面が消えずに連続して表示したい場合どのようにすれば良いのでしょうか?
初歩的な質問かと思いますが、ご教授宜しくお願いいたします。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

「できません」が基本的な回答となります。

DoModal()とはアプリケーション全体を停止して、
DLGのみ有効にする操作ですね。
再びメインのアプリケーションを有効にするためには、
DoModal()したDLGが消えてくれなければなりません。
前のDLGが「消えて」、有効になったメインアプリケーションは、
次のDLG2のDoModal()を実行できる・・・という順番になるわけです。
この動作はWindowsの原理上、不可避です。

さて、この様なことをやらなければならなくなった、
「原因」又は、この仕様の「目的」などを
説明してみると、別の解決方法が提示できるかもしれません。


返信引用
ぬる
 ぬる
(@ぬる)
ゲスト
結合: 15年前
投稿: 8
Topic starter  

目的は、複数の画面を連続して表示したい
インストーラーのようなものを作成したいのです。

巷でよくあるインストーラーのように、画面が消えないまま
次の画面へ遷移するようにしたいのですが、難しいのでしょうか?


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

一つの画面で行えばよいだけの様な気がします。
残念ながら、むしろそれができない理由がわかりません。

一般に、状態の遷移をDLGの画面切り替えで表現する場合、
ないし、複数のオプション画面を同一DLG内で切り替えたい場合は、
親となるモーダルDLGの中に、複数の子DLGを作成し、
これらの表示、非表示を切り替えることによって表現します。
この様な最も基本的な手法以外にも色々な方法が考えられます。

あたりまえですが、これらの子DLGはWS_CHILDのモードレスDLGとなります。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

>巷でよくあるインストーラーのように、画面が消えないまま
>次の画面へ遷移するようにしたいのですが、難しいのでしょうか?

ウィザード形式ですかね?

プロパティシートなどで作成するようですが。
http://mail2.nara-edu.ac.jp/~asait/visual_cpp/property/property.htm

APIでやるなら…お約束の「猫でも~」から。
http://www.kumei.ne.jp/c_lang/sdk3/sdk_212.htm

インストーラ作るなら、VSのセットアッププロジェクトでmsiを作るとかの方法もあると
思いますよ。
# 私はInnoSetupで処理しましたが。(VSはExpressEditionだったし)


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

VS2012ならinstallSHILDのVisualC限定版を使うのでは?
画面数が決まっているのならMDI使うとか?


返信引用
ぬる
 ぬる
(@ぬる)
ゲスト
結合: 15年前
投稿: 8
Topic starter  

皆さんご回答ありがとうございます。

ウィザード形式にしようと思ったのですが、
プロパティシートを使うと不要なボタンや線が表示されてしまうので、
自由度の高い自作のダイアログにしようと考えてました。

とりあえず、一つの画面を表示させたまま
子ダイアログの表示を切り替える方法で試してみます。
また何かあったらご質問させて下さい。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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