• ベストアンサー

ダイアログボックスのサイズの違い

ResEditを使いwidthを306に設定してダイアログボックスを作成したのですが、プログラム中にGetWindowRect関数を使い、そのダイアログボックスの横幅を調べてみると542という値が返されました。どうしてこのような違いが出るのでしょうか? また、両方の数値を一致させるにはどうすればいいですか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

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

  • ベストアンサー
  • hymat
  • ベストアンサー率58% (95/162)
回答No.1

この話でしょうかね? https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/3ded9f7e-6b4b-491d-8aac-60b6ecb15d9a/mfc?forum=vcgeneralja GetWindowRectが返すサイズの単位はPixelですが、リソースエディタでの単位はdialogUnitなのです。解像度の異なるディスプレイで表示しても見た目のサイズが変わらないようになっている、ということです。なのでpixel単位でのサイズは変わることになります。 常にPixel単位で同じサイズに表示したい場合は、ダイアログボックスにはしないで、CreateWindow等で通常のウィンドウとして作ることになります。その場合はウィンドウのcallbackも(DlgProcではなく)WndProcとして自分で作る必要があります。

nazoda
質問者

お礼

回答ありがとうございました。 2つのサイズが同じであることを確認するにはPixelをdialogUnitに変換しなければいけないようですね。教えていただいたサイトを参考に調べてみます。

関連するQ&A

  • 閉じてないファイルについて

    Visual C++ 2010 Expressで、開いたら閉じなければいけないファイルやハンドルを閉じないでプログラムを終了した場合に、閉じていないファイル名やハンドル名を確認するにはどうすればいいですか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • トラックバーをクリックした時のつまみの位置について

    トラックバーのつまみ以外の場所をクリックするとマウスカーソルの位置に関係なく、ページサイズで設定されている量だけつまみが移動するようですが、 クリックした位置につまみを移動するにはどうすればいいですか? (ダイアログベースのプログラムでダイアログに横向きのトラックバーを貼り付けている場合) --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • ダイアログ表示後に1回だけ実行

    ダイアログベースのプログラムで、ダイアログを表示後にメッセージボックスを表示しようとして、下のプログラムのようにしたのですがダイアログが表示される前にメッセージボックスが表示されてしまいます。 ダイアログが表示された直後に1回だけ表示されるようにするにはどうすればいいですか? #include<Windows.h> #include "resource.h" HINSTANCE hinst; INT_PTR CALLBACK dlgproc(HWND,UINT,WPARAM,LPARAM); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { hinst=hInstance; DialogBox(hinst,TEXT("mydlgmain"),NULL,dlgproc); } INT_PTR CALLBACK dlgproc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp) { TCHAR moji[]=TEXT("ダイアログ表示"); switch(msg) { case WM_INITDIALOG: MessageBox(hwnd,moji,TEXT(""),MB_OK); return(INT_PTR)TRUE; case WM_CLOSE: EndDialog(hwnd,LOWORD(wp)); return (INT_PTR)TRUE; } return(INT_PTR)FALSE; } --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • Outlookのログオン・ダイアログボックス

    Microsoft Outlook 2000とOutlook Express を使っています。 自宅で自分だけで使っているのに、起動するたびにログオン・ダイアログボックスが出てきて、ユーザー名とパスワードを要求してくるのですが、これを出てこなくする方法を教えてください。

  • メッセージボックスが何度も表示される理由は?

    スクロールバーを作り下のプログラムのようにSB_LINEDOWN:の所でメッセージボックスを表示するとなぜかメッセージボックスが何個も表示されてしまいます(20個ぐらい)。しかも表示される個数が変わる時もあります。 メッセージボックスを表示する行を消し、実行される回数をカウントする変数を記入してデバッグしてみると正常に1回実行されているようです。 SB_ENDSCROLLの中で表示した場合も正常に1回だけ表示されます。 どうしてこうなるのでしょうか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語 case WM_VSCROLL: switch(LOWORD(wParam)){ case SB_LINEDOWN: MessageBox(hwnd,TEXT("スクロールバーのテスト中"),TEXT("メッセージボックス"),MB_OK); break; } break;

  • 最初に押されたキーを調べるには?

    下のプログラムではCTRLを押しながらAを押しても、Aを押しながらCTRLを押してもメッセージボックスが表示されます。 これをCTRLを押しながらAを押した場合だけメッセージボックスを表示するように変えたいのですが、2つのキーが押されている時に最初に押されたキーを調べる方法がわかりません。 どうすればいいでしょうか? case WM_KEYDOWN: if( (GetKeyState(VK_CONTROL)<0) && (GetKeyState(0x41)<0)){ MessageBox(hWnd,TEXT("CTRL+Aが押されました。"),TEXT("テスト"),MB_OK); } --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • トラックバーのつまみを動かせない

     トラックバーの範囲を設定するときに最大値を98304以上にするとトラックバーのつまみを動かせなくなるのですが、これはトラックバーの仕様なのでしょうか?  これ以上の値を設定しても正常に動かす方法があったら教えてください。 <最大値の設定部分> InitCommonControls(); SendMessage(hbar,TBM_SETRANGE,TRUE,MAKELPARAM(0,98304)); --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • C言語 ダイアログボックスについて

    C言語でダイアログボックスを作っています。 閉じるボタンを押しても、ウィンドウが閉じないようにするには、どうしたらいいですか? ちなみに、閉じるボタンを表示しなくするのではなく、閉じるボタンは押せるのですがおしても無反応(操作を設定していないボタンみたいな)にすることはできませんか? 閉じるときに、ウィンドウだったらWM_CLOSEが送られてきますよね、それのダイアログ版というかがあれば閉じる作業をする前にreturnしてしまえばいいのですが・・・もしあったら教えてください。 コンパイラはBccです。

  • Visual C++.NET 実行時のダイアログを消す方法

    Microsoft Development Environment プロジェクトの構成が変更されています abc - Debug Win32 ビルドしますか? はい いいえ キャンセル ヘルプ 上記の Visual C++.NET の実行する時に出る ダイアログを出ないようにする方法をお願いします。

  • 『GetDlgItemText』について

    開発環境は Microsoft Visual C++ 2008 Express Edition です。 いま、ダイアログボックスを作っているのですが、その ダイアログボックス内のテキストボックスに入力した文字を 取得したいのですが、GetDlgItemTextと同様の働きをする ものはあるのでしょうか? もし無かった場合、MFCを使わずに、ダイアログボックス内にて入力された 文字を取得することは可能なのでしょうか? MFCの無い開発環境なので、困っています。

専門家に質問してみよう