• ベストアンサー

コモンダイアログの表示座標

フルスクリーンモードで、WinAPIの「GetOpenFileName」や 「GetSaveFileName」などのコモンダイアログを使用する際、 稀にダイアログが表示されない時がありました。 おそらくフルスクリーンモードで表示されている領域よりも外側に 表示されていると思うので、ダイアログを表示する座標を指定したいのですが、 その方法が分からず困っております。 ご存知の方いらっしゃいましたらお教えください、 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。  OPENFILENAME構造体のlpfnHookとFlagsメンバを以下の様にしてから、 //http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx ofn.lpfnHook = OFNHookProc; ofn.Flags = OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_ENABLEHOOK | OFN_EXPLORER; //http://msdn.microsoft.com/ja-jp/library/cc410977.aspx //フックプロシージャ UINT CALLBACK OFNHookProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch(iMsg) { case WM_INITDIALOG: { HWND hParent = ::GetParent(hWnd); RECT rc; ::GetWindowRect(hParent, &rc); const int x = (1440/*スクリーン横幅*/ - (rc.right - rc.left)) / 2; const int y = (900/*スクリーン縦幅*/ - (rc.bottom - rc.top)) / 2; ::SetWindowPos(hParent, NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } break; } return 0; }  で出来ませんか。

dottt
質問者

お礼

回答して頂きありがとう御座います。 変更してみたところ、ダイアログの座標を指定する事が出来ました。 ですが、稀にダイアログが表示されない現象は改善されませんでした。 どうやら他に問題があるようなのでもう少し調べてみます。 どうもありがとう御座いました。

関連するQ&A