こんにちは。
Windows2000(SP4)、VC++6.0(SP5)で開発しています。
現在開発中のアプリで以下のよう事象が発生して困っています。
システムの性質上、ビューを最大表示に固定でマウス操作のみのアプリです。
ビューからあるポイントAをクリックするとモーダルダイアログBが表示されます。
ところがあるとき、ポイントAをクリックしてもダイアログBが表示されずマウス操作が
効かなくなりました。
タスクマネージャでアプリを最小化すると裏にダイアログBが隠れており、それを閉じる
と復旧しました。
通常、ダイアログBが前面に表示されているときにアプリを最小化すると一緒に最小化さ
れます。
この事象では、ビューとダイアログBの親子関係が何らかの原因で崩れているように思え
るのですが、なぜそのようなことが起こるのでしょうか?
また、どのようにしたら回避することができるのでしょうか?
なお、この事象は何百回と再現を試みましたが、再現しませんでした。
どなたかご存知の方いらっしゃいましたら、教えていただけないでしょうか?
よろしくお願いします。
MFC?
「モーダルダイアログ」でなく「モードレスダイアログ」
にしましょう。
失礼しました。MFCです。
ITOさん、早速の回答ありがとうございます。
実は、モードレスにすれば・・・というのは考えていたのですが
何しろ再現しないので原因も分からず、有効な対策なのかどうか悩んでました。
ということで、モードレスに変更してしばらく様子を見ようと思います。
なお、『原因不明』のままではモヤモヤが晴れないので申し訳ありませんが[[解決]]は
もう少し引き延ばさせていただきたいと思います。
引続き、原因についてご存知の方ご教授よろしくお願いします。
うーーん、
スレッド等から起動してないですよね、ビューからですよね。
もしスレッド等からだと「HWND」がビュ-と違っているときがあるのかなぁ
何か参考になりますか?
「モードレス」なら構築時にビューのthisポインターを指定できるので大丈夫だと
思います。
ITOさんありがとうございます。
> スレッド等から起動してないですよね、ビューからですよね。
> 「モードレス」なら構築時にビューのthisポインターを指定できるので大丈夫だと
> 思います。
はい、ビューから起動しています。
やっぱり「モードレス」なら大丈夫ですよね。
とりあえず以下のように対策しました。(依然、原因不明のままですが・・・)
①起動されるダイアログを「モードレス」に変更。
②ヘルプメニューから最大/最小化を可能とする。
②は、万が一再現してしまったときにユーザ側で対処できるようにするためのものです。
(通常は最大化固定なので、タスクマネージャ云々をユーザが扱わなくて済むように)
ITOさんはじめ、この問題について考察していただいた方、ありがとうございました。