|
▼ 2014/5/16 (金) 00:29:53 もか | |
|
[2183] Re5:不具合:「開きません」のキャンセルが存在しません |
MessageBoxやDialogBox*(ついでにSHBrowseForFolder、GetOpenFileName等)は内部でGetMessage等を呼び出してメッセージ処理をするから、
BlockingHookと同じように他のウィンドウのメッセージが処理されることを意識する必要があるってことですね
(サクラのコードはBlockingHookもほとんど他の処理が走ることを考慮していませんけど)
VMessageBoxFを表示中にさらにVMessageBoxFが表示されることがあるようです。
何かのダイアログが表示された状態で、親ウィンドウにWM_CLOSEが送られてきたとか。
ためしに、編集中ドキュメントを[X]で閉じようとして「保存しますか?」ときかれてきて、
その状態でタスクバー(Win7)から「このウィンドウを閉じる」を選んだら、
もう一つ「保存しますか?」が表示されました。
1つめが他のダイアログだった場合は、VMessageBoxFのszBufはstaticなので、
2つめをキャンセルして1つめに戻ってきた場合に、よろしくないんじゃないでしょうか。
LR4さんの代替案ならWarpでコピーされて問題なさそうです。
考慮したほうがいいことで思いつくことは
1.バッファのリサイクル(LS/LSW/to_*char)
2.staticになってる変数等の再入問題
3.API呼び出し前にチェックしたファイル・ウィンドウ・共有変数等の内容が変更になっている可能性
4.プロセス(親ウィンドウ)の終了
とかいろいろありますが現状は結構手抜きのはず。
|
|