モーダルダイアログが隠れてしまう – プログラミング – Home

モーダルダイアログが隠れてしまう
 
通知
すべてクリア

[解決済] モーダルダイアログが隠れてしまう


量産型
 量産型
(@量産型)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

こんにちは。
Windows2000(SP4)、VC++6.0(SP5)で開発しています。
現在開発中のアプリで以下のよう事象が発生して困っています。

システムの性質上、ビューを最大表示に固定でマウス操作のみのアプリです。
ビューからあるポイントAをクリックするとモーダルダイアログBが表示されます。
ところがあるとき、ポイントAをクリックしてもダイアログBが表示されずマウス操作が
効かなくなりました。
タスクマネージャでアプリを最小化すると裏にダイアログBが隠れており、それを閉じる
と復旧しました。
通常、ダイアログBが前面に表示されているときにアプリを最小化すると一緒に最小化さ
れます。
この事象では、ビューとダイアログBの親子関係が何らかの原因で崩れているように思え
るのですが、なぜそのようなことが起こるのでしょうか?
また、どのようにしたら回避することができるのでしょうか?
なお、この事象は何百回と再現を試みましたが、再現しませんでした。

どなたかご存知の方いらっしゃいましたら、教えていただけないでしょうか?
よろしくお願いします。


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

MFC?
「モーダルダイアログ」でなく「モードレスダイアログ」
にしましょう。


返信引用
量産型
 量産型
(@量産型)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

失礼しました。MFCです。

ITOさん、早速の回答ありがとうございます。

実は、モードレスにすれば・・・というのは考えていたのですが
何しろ再現しないので原因も分からず、有効な対策なのかどうか悩んでました。
ということで、モードレスに変更してしばらく様子を見ようと思います。

なお、『原因不明』のままではモヤモヤが晴れないので申し訳ありませんが[[解決]]は
もう少し引き延ばさせていただきたいと思います。

引続き、原因についてご存知の方ご教授よろしくお願いします。


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

うーーん、
スレッド等から起動してないですよね、ビューからですよね。
もしスレッド等からだと「HWND」がビュ-と違っているときがあるのかなぁ
何か参考になりますか?
「モードレス」なら構築時にビューのthisポインターを指定できるので大丈夫だと
思います。
 


返信引用
量産型
 量産型
(@量産型)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

ITOさんありがとうございます。

> スレッド等から起動してないですよね、ビューからですよね。
> 「モードレス」なら構築時にビューのthisポインターを指定できるので大丈夫だと
> 思います。

はい、ビューから起動しています。
やっぱり「モードレス」なら大丈夫ですよね。

とりあえず以下のように対策しました。(依然、原因不明のままですが・・・)
 ①起動されるダイアログを「モードレス」に変更。
 ②ヘルプメニューから最大/最小化を可能とする。

②は、万が一再現してしまったときにユーザ側で対処できるようにするためのものです。
(通常は最大化固定なので、タスクマネージャ云々をユーザが扱わなくて済むように)

ITOさんはじめ、この問題について考察していただいた方、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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