メニューバーの高さの取得方法

このQ&Aのポイント
  • WinXP、SDKで開発しているVC5で、ウィンドウの大きさが変更された時に自動的にリサイズされる複数のウィンドウ内のメニューバーの高さを取得する方法について教えてください。
  • 通常はGetSystemMetrics(SM_CYMENU)を使用してメニューバーの高さを取得しているのですが、画面の縮みによりメニューが複数行になった場合などはどのようにして高さを判別すればよいのでしょうか。
  • 画面を縮めた際にメニューバーの高さが変わることを認識せず、下のほうのウィンドウが切れてしまう問題が発生しています。メニューバーの高さを正しく取得する方法について教えてください。
回答を見る
  • ベストアンサー

メニューバーの高さの取得方法

WinXP、SDKです。 VC5で開発しています。 ウィンドウの大きさを変更された時、親ウィンドウ内に表示している複数のウィンドウを自動的にリサイズさせています。 ある程度画面サイズが大きいうちは良いのですが、画面を横にぐーっと縮めてきた時、元々1行で表示されていたメニューバーが二行、三行と増えて行った時、メニューの高さが変わってしまった事を認識していない為に下のほうのウインドウが切れてしまいます。 通常は GetSystemMetrics(SM_CYMENU); でメニューバーの高さを出しているのですが、画面の縮みによりメニューが複数行になった場合などはどのようにして分かるのでしょうか。 よろしくお願い致します。

  • mm666
  • お礼率92% (58/63)

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

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

★アドバイス ・方法1としてメニューバーが折り返さないように制御。  WM_GETMINMAXINFOメッセージを処理します。  http://www.winapi-database.com/Message/WM/WM_GETMINMAXINFO.html→『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:メニューバーの高さ

mm666
質問者

お礼

Oh-Orangeさま、アドバイスをありがとうございます。 頂いたサンプルを参考にしたところ、リサイズがうまくいくようになりました。 本当にありがとうございます。 メニューが複数行にならない制御もあるのですね。 とても勉強になりました。 私は丸一日悩んで結果が出なかった事でした… 非常に分かりやすい回答を頂き、本当に感謝です。 ありがとうございました。

関連するQ&A

  • Macのメニューバーの表示について

    windows ヘビーユーザーだったのですが 最近Macを使い始めています。 設定でメニューバーをいつも表示させるように設定したのですが Safariを全画面表示で見ているときにはメニューバーがポインターを 持っていかないとメニューバーが表示されませんが 全画面でSafariを見ている時も常にメニューバーを表示させることは 可能でしょうか?

    • ベストアンサー
    • Mac
  • VC++ メニューバーのアイコンと、ショートカットキーについて

    開発環境はVC++6.0 SDKでやっているのですが、 メニューバーの項目の横に("新規作成"のようなメニューの左側に)にアイコンのような絵を付けることってできないのでしょうか? それと、アクセラレータリソースで作った、ショートカットキーをメニューの中に表示させるにはどのようにすればよいでしょうか?("新規作成 Ctrl+N"のような感じに) どなたかお願いします。

  • メニューバーが表示されなくなって、困っています。

    メニューバーが表示されなくなって、困っています。 Windows XPを使用しています。 インターネット・エクスプローラーを、バージョン6から8に変更した ところ、ホームページ用のファイルを開いた時の画面が添付画像のよう に、今まで、表示されていた上段にあった「ファイル(F)」や「編集(E)」 等のメニューバーが表示されなくなってしまいました。 再び、表示できるようにする方法を教えてください。

  • メニューバーを表示させたい。Win7

    WINDOWS7のパソコンで、Windows Media Playerのバージョンを調べたくて、このソフトを起動させました。 画面にメニューバーがあって、「ヘルプボタンを選択して」、とネットで解説を見つけたのですが、私のパソコンには、メニューバーが表示されません。これどうしたらいいですか? 補足: コンピューター>整理>フォルダーと検索のオプション>表示>常にメニューを表示する。にチェックを入れました。 コンピューター>整理>レイアウト>メニューバーにチェックが、入ってます。 スタートから「コンピューター」をクリックすると、メニューバーは表示されます。 ですが、、Windows Media Playerの画面上では、メニューバーが表示されません。 よろしくお願いします。

  • メニューバー

    WindowsXPを使用していますが、 ウィンドウのメニューバーが画面の外になってしまったというか、 消えてしまいました。 どうしたら直りますか?

  • ウインドウのメニューバーの下の表示を非表示にする方法

    ウインドウのメニューバーの下の表示を非表示にする方法 メニューバーの下のバーを、ここでは「整理バー」とします。 従来のメニューバーの文字列の下に、使わない文字列が表示されていると 見にくくて非常に使いにくいです。 非表示にしたいのですが、どうやったらいいのでしょうか? 添付画像の赤枠の部分です。 整理バーの右にあるボタン等は無くて全く問題ありません。 メニューバーの下の、 整理バーの1行が、まるまる消えてくれれば理想的なのですが。

  • メニューバー

    IEで、上のメニューバーから「編集」→「このページの検索」をしようとしたら間違って「表示」→「全画面表示」をクリックしてしまいました 上のバーと下のバーが出なくなりました>< どうやったら直りますか?お願いします!

  • メニューバーが消えた

    パソコン初心者です 当方IE5.5 winME使用です IEの画面のどこをさわったのか見当もつきませんが さいしょは上の表示のバー(?)→メニューバーというのでしょうか ファイル、編集・・とかなっているところと次の段の戻る、更新、ホーム・・・ とかなっているバーあたりが英文字のようになりました その後、IEを立ち上げた時、niftyの検索画面がでるはずなのに何もしなくても アダルトサイトが立ち上がります これでは子どものいる時にIEはたちあげられません 上段のツールからインターネットオプションを開けば設定できるのかな? と思いましたがそのツールバー周辺は消えてしまっているので皆目わかりません どうすればメニューバーは復活しますか また、どうすればIEをたちあげたときniftyの画面が出るようになりますか

  • メニューバーの表示

    MacOS10.4.9をインストールしました。画面上のバーの表示についてですが、「リンゴ、Finder、ファイル、編集、表示、移動、ウインドウ、ヘルプ」の時には右端に時刻、ことえりの入力メニューを示す『あ』のマークが表示されます。しかしネットスケープを立ち上げると、「リンゴ、Netscape、ファイル、編集、表示、ジャンプ、ブックマーク、ツール、ウインドウ、ヘルプ」のところでバーのほぼ右端まで来てしまい、時刻も『あ』のマークも消えてしまいます。これでは今、入力メニューが日本語なのか半角英字なのか実際に文字を打つまでわかりません。全てを表示することは可能なのでしょうか?

    • ベストアンサー
    • Mac
  • エクスプローラーのメニューバーやツールバーが出ない

    WinXPですが、エクスプローラーの画面でメニューバーとツールバーが出なくなってしまいました。 どうすれば直るでしょうか? 参考までに画面を添付致します。 宜しくお願い致します。

専門家に質問してみよう