0

まず、私の設定は次のとおりです。

VS2010/Debug/C++ Win32 Project/Vista Home Premium

ウィンドウ ( ) 内GetOpenFileNameのボタン ( ) から起動しても問題ありません。[開く] ダイアログは正常に動作し、クリックして別のフォルダーに移動することもできます...CreateWindowCreateWindow

CreateWindowここで、 myを a DialogBoxParam(CreateWindow舞台裏で呼び出す必要があります) に置き換え、同じ(DLGPROC)WndProcを呼び出しGetOpenFileNameます。ここで、[開く] ダイアログの動作がおかしくなりました: マウスのダブルクリックのみが機能するように見えます (= [ofn.lpstrFile開く] ダイアログにデータを入力して閉じる)。[開く] ボタンと [キャンセル] ボタンをクリックできず、ナビゲートできません。

これを経験したことのある人はいますか?[開く] ダイアログが「フリーズ」する既知の理由。親に属しているかどうか ( ofn.hwndOwner = hwnd; ofn.hwndOwner = NULL;) も同じ問題を引き起こします。

ありがとうございます

4

1 に答える 1

2

あなたが書いた

同じ (DLGPROC)WndProc で

それはあなたのバグです。ダイアログ プロシージャとウィンドウ プロシージャは同じものではありません。それらは異なるルールに従っており、DlgProc ルールに従う必要があるときに WndProc ルールに従うと、悪いことが起こります。

于 2012-01-09T02:32:23.220 に答える