• ベストアンサー

ダイアログボックスで指定したサイズどおり表示されない

ダイアログボックスで指定したサイズがメイン上では約2倍の大きさになって表示されてしまい、困っています。 メニューリソースは以下のとおりです。 MYDLG DIALOG DISCARDABLE 25, 50, 100, 150 STYLE WS_VISIBLE | WS_CHILD | DS_CONTROL CAPTION "Dialog" FONT 9, "MS Pゴシック" BEGIN END WndProc内にダイアログを貼り付けています。 if(hDlgWnd) break; hDlgWnd = CreateDialog((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),"MYDLG",hWnd,DialogProc); それが実際にウィンドウを開くとダイアログがだいたいですが(50,115,200,340)のように表示されてしまいます。 VC++ Ver.6.0です。コンパイラ等の問題でしょうか。 ご存知の方、宜しくお願いします。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★コンパイラ等の問題ではありません。 ・もともとダイアログのサイズはピクセル数での指定ではないのです。  この基本を知らないと今回の質問が出てくるようですね。  ダイアログは『ダイアログ・ベース単位』でサイズが決まります。  これはダイアログに設定されているフォントの高さなどから変化するのです。  次のリンクを読んで下さい。  http://wisdom.sakura.ne.jp/system/winapi/win32/win84.html→『ダイアログ』  かなり最初の方に >ただし、ダイアログで指定する座標、サイズはピクセルではないので注意してください >ダイアログの場合、座標系は文字サイズを基準としているのです  という事が書かれています。 解決策: ・CreateDialog() でダイアログを作成したときにダイアログの WM_INITDIALOG で  ウインドウのサイズをピクセル値で設定しなおす処理を行います。  つまりは  case WM_INITDIALOG:   SetWindowPos( hDlg, NULL, 25, 50, 100, 150, (SWP_NOZORDER|SWP_NOOWNERZORDER) );   return TRUE;  という記述を追加します。  重要なのは SetWindowPos() 関数でウインドウの位置とサイズをピクセル値で  設定することです。 ・以上。『ダイアログ・ベース単位』と『ピクセル値』は違います。注意。

参考URL:
http://wisdom.sakura.ne.jp/system/winapi/win32/win84.html
aakey
質問者

お礼

ありがとうございます。解決いたしました。 サイトはAPIを書くうえで参考にしていましたが、ダイアログに関する記述は見落としていたようです。 大変勉強になりました。

その他の回答 (1)

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.1

リソースファイル内のダイアログの座標は画素単位じゃなくて, 「ダイアログテンプレート単位」だということはご存知ですか? http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html#DialogUnits → ダイアログの座標系 (ダイアログテンプレート単位とダイアログベース単位)

aakey
質問者

お礼

回答ありがとうございます。 大変参考になりました。

関連するQ&A