アプリ版:「スタンプのみでお礼する」機能のリリースについて

WinXP、SDKです。
VC5で開発しています。

ウィンドウの大きさを変更された時、親ウィンドウ内に表示している複数のウィンドウを自動的にリサイズさせています。
ある程度画面サイズが大きいうちは良いのですが、画面を横にぐーっと縮めてきた時、元々1行で表示されていたメニューバーが二行、三行と増えて行った時、メニューの高さが変わってしまった事を認識していない為に下のほうのウインドウが切れてしまいます。

通常は
GetSystemMetrics(SM_CYMENU);
でメニューバーの高さを出しているのですが、画面の縮みによりメニューが複数行になった場合などはどのようにして分かるのでしょうか。

よろしくお願い致します。

A 回答 (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:メニューバーの高さ
    • good
    • 0
この回答へのお礼

Oh-Orangeさま、アドバイスをありがとうございます。
頂いたサンプルを参考にしたところ、リサイズがうまくいくようになりました。
本当にありがとうございます。
メニューが複数行にならない制御もあるのですね。
とても勉強になりました。

私は丸一日悩んで結果が出なかった事でした…
非常に分かりやすい回答を頂き、本当に感謝です。
ありがとうございました。

お礼日時:2008/06/30 13:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!