WinXP、SDKです。
VC5で開発しています。
ウィンドウの大きさを変更された時、親ウィンドウ内に表示している複数のウィンドウを自動的にリサイズさせています。
ある程度画面サイズが大きいうちは良いのですが、画面を横にぐーっと縮めてきた時、元々1行で表示されていたメニューバーが二行、三行と増えて行った時、メニューの高さが変わってしまった事を認識していない為に下のほうのウインドウが切れてしまいます。
通常は
GetSystemMetrics(SM_CYMENU);
でメニューバーの高さを出しているのですが、画面の縮みによりメニューが複数行になった場合などはどのようにして分かるのでしょうか。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
★アドバイス
・方法1としてメニューバーが折り返さないように制御。
WM_GETMINMAXINFOメッセージを処理します。
http://www.winapi-database.com/Message/WM/WM_GET …→『WM_GETMINMAXINFO』
・方法2はGetWindowRect()、GetClientRect()、GetSystemMetrics()を
組み合わせて計算するのはどうでしょうか。
(1)ウインドウ領域の取得
(2)クライアント領域の取得
(3)(ウインドウ領域の高さ)-(クライアント領域の高さ)
(4)(3)-(キャプションの高さ)
(5)(4)-(サイズ変更の高さ)
(6)(5)が残ったメニューバーの高さになります。
※ツールバーがある場合にはその高さも引きます。
サンプル:
RECT rc1;
RECT rc2;
int height;
GetWindowRect( hWnd, &rc1 );
GetClientRect( hWnd, &rc2 );
height = (rc1.bottom - rc1.top) - (rc2.bottom - rc2.top);
height -= GetSystemMetrics( SM_CYCAPTION );
height -= GetSystemMetrics( SM_CYSIZEFRAME );
height:メニューバーの高さ
Oh-Orangeさま、アドバイスをありがとうございます。
頂いたサンプルを参考にしたところ、リサイズがうまくいくようになりました。
本当にありがとうございます。
メニューが複数行にならない制御もあるのですね。
とても勉強になりました。
私は丸一日悩んで結果が出なかった事でした…
非常に分かりやすい回答を頂き、本当に感謝です。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- gooブログ ブログの記事を書きだしのみに表示したい 1 2022/06/25 19:11
- その他(ブラウザ) Edgeバー 3 2023/02/23 18:33
- その他(動画サービス) VLCメディアプレーヤーについて 1 2022/11/29 14:19
- モニター・ディスプレイ パソコンでスクリーンショットしたもの(HP)を印刷しました。 3 2022/07/03 16:39
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- WordPress(ワードプレス) Wordpress テーマを編集 の編集する枠が表示されない 2 2022/11/19 11:07
- その他(IT・Webサービス) Yahooの地図の文字サイズ、googleの地図の画面分割 1 2022/05/21 12:31
- モニター・ディスプレイ WindowsノートPC 13.3で画面縮小したい 画面全体が見えない めり込んでしまってます 1 2023/01/22 13:42
- 筋トレ・加圧トレーニング 高校生女子です。 私は一年ほど前から自宅で腹筋トレーニングをしているんですが、なかなかメニューを安定 2 2022/10/06 14:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
Excelの上下を固定したい
-
ゲームでは結局どっちが良いの?
-
VBA .Value=.Value ?
-
FindWindowの戻り値が違う!?
-
ボタンのハンドルウィンド取得...
-
作成したウインドウのサイズを...
-
CTなどでいう,ウィンドウレベ...
-
ラジオボタンの初期指定
-
名前を付けて保存のウィンドウ...
-
ウィンドウ生成時にアクセス違...
-
VBAで単一ブック複数窓を閉じる...
-
Alt+P,Alt+NをPostmessageで送...
-
eclipseからコンソールが消えた
-
C# ウィンドウハンドルの取得
-
ExcelのBOOKが消えた!
-
リストビューでNM_CLICKを受け...
-
隠れたウィンドウの画面をキャ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
勝手にウィンドウが開いて止ま...
-
検索の画面がでなくなってしま...
-
ゲームでは結局どっちが良いの?
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
[VBA] UserForm を Excel の W...
-
EnumChildWindowsの使い方(VBA)
-
Vba LongPtrについて教えてくだ...
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
ラジオボタンの初期指定
-
ExcelVBAでAPIを使って外部ウイ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
隠れたウィンドウの画面をキャ...
-
「&HFFFF」「&H1A」とは?
-
名前を付けて保存のウィンドウ...
-
最大化と最小化ボタン
おすすめ情報