タイトルバー・メニューバーの高さ取得

このQ&Aのポイント
  • サイズ変更可能なダイアログボックスアプリケーションを作成しています。
  • ダイアログのサイズを変更する際に、GetClientRect関数を使用してサイズを取得し、設定ファイルに保存します。
  • しかし、GetClientRectはメニューバーやタイトルバーの高さを含まない座標を返すため、復元時に高さが小さくなってしまいます。メニューバーやタイトルバーの高さを取得する方法がわかりません。環境はVC++6.0 MFCです。
回答を見る
  • ベストアンサー

タイトルバーやメニューバーの高さ取得

サイズ変更可能なダイアログ ボックスアプリケーションを作っています ダイアログサイズ変更時に GetClientRect( m_DlgSize ); のようにしてサイズを取得し、設定ファイルにm_DlgSizeを保存します 次回起動時にInitDialog()で SetWindowPos( NULL, 0, 0, m_DlgSize.Width(),m_DlgSize.Height() ,SWP_NOMOVE); のように復元しました。 幅はきちんと復元できたんですけど高さが小さくなってしまいます。 どうやらGetClientRectではメニューバーやタイトルバーの高さを含めない座標を返し、 SetWindowPosではそれらも含めてサイズを設定してしまうようです この差を埋めるためにメニューバーやタイトルバーの高さを取得する方法がわかりません。 何か良い方法があったらご教授願います。 環境はVC++6.0 MFCです。

  • ystk
  • お礼率83% (55/66)

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

  • ベストアンサー
  • danner
  • ベストアンサー率72% (8/11)
回答No.2

dannerです。 >> WINDOWPLACEMENTは最大化とか最小化には対応できそうですが、ウィンドウの角を引っ張っての微妙なサイズ変更を保存することができないですよね??(本当か?)。 保存できますよ。 やり方としては 保存:  GetWindowPlacementしてWINDOWPLACEMENTのメンバ変数をすべて保存 復元:  保存したファイルからWINDOWPLACEMENTのメンバ変数に設定  SetWindowPlacementを実行  ShowWindow(wndplace.showCmd);を実行 ←いらないかも こんな感じでできると思うのですが?

ystk
質問者

お礼

たびたびどうもすみませんです。 GetWindowPlacementで出来ました。 rcNormalPosition変数に保存されてたんですね;; よく考えたらそんな中途半端な関数作らないですよね。 完全に独学でやっているので知識不足や思い込みで 簡単なことにするのに何時間もかかってしまったりします。 あげく訳のわからんコードを書いて自己満足してたりして・・ ほんとにネットだけが頼りです(寂しいな) おかげさまで簡単に保存することが出来ました

その他の回答 (1)

  • danner
  • ベストアンサー率72% (8/11)
回答No.1

メニューバーやタイトルバーの高さは GetSystemMetricsで取得することはできますよ。 ただ、ウィンドウサイズの保存・復元は ウィンドウを閉じるときに保存したほうがいいと思います。 あとサイズの保存・復元は、 GetWindowPlacementとSetWindowPlacementを使用すれば メニューバーとかのサイズを気にしなくてすみます。

ystk
質問者

お礼

GetWindowPlacementで解決できました。 ありがとうございました。

ystk
質問者

補足

GetWindowPlacementの存在には気づいてはいたんですが WINDOWPLACEMENTは最大化とか最小化には対応できそうですが、ウィンドウの角を引っ張っての微妙なサイズ変更を保存することができないですよね??(本当か?)。 説明不足で申し訳ありませんです。 とりあえずGetSystemMetrics()で挑戦してみます。 これは知りませんでした(でもすごく重要そうな関数ですね・・) あと保存は閉じるときにします。 Windowsプログラミングはいくらやっても判らないことだらけで・・ うまくいったら報告致します。 また、なんか勘違いしてたら突っ込んでください。 どうもありがとうございました。

関連するQ&A

  • メニューバーの高さ

    タイトルバーの高さは変更不可能ということなのですが それではメニューバーはどうでしょう。 コントロールの1つだから他のコントロール同様変更できると考えていいのでしょうか?

  • Excel画面でメニューバーとタイトルバーが消えてなくなりました

    さきほどExcelを立ち上げると、通常あるはずのメニューバーとタイトルバーがなくなってしまいました。 復元させるにはどうしたらよいのでしょうか? 画面上には操作するボタンなどが何もありません。 ただ広い画面(セルの部分)と上部にアクティブセルの番地を表示する部分と関数を表示する部分のみが1行残っていますが・・・

  • フォームのサイズを変更したいです。

    フォームビューにて、 void CProject2View::OnBnClickedButton1() { this->SetWindowPos(&wndTop,0,0,100,100,SWP_NOMOVE); } とすると、スクロールバーが表示されるだけです。 タイトルのことをするにはどうすればいいですか? よろしくお願いします。

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

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

  • タイトルバー左の小さいアイコンをクリックして出たメニューをいじるAPI

    ウィンドウのタイトルバーを左クリックしたときに、 [元のサイズに戻す(R)] [移動(M)] [サイズ変更(S)] ・ ・ といったメニューが表示されますが、このメニューに項目を追加したり変更したりすることのできるAPIはあるのでしょうか?? 宜しくお願い致します。

  • タイトルバーの左に小さなアイコンを表示したい

    素人質問ですみません。 VC++6.0、MFCで作業しています。 ダイアログウィンドウのタイトルバーに表示する小さなアイコンを表示する方法がわかりません。 ダイアログプロパティのどこかで設定できるのでしょうか? 探してみましたがよく分かりませんでした。 簡単そうな質問ですみませんが、宜しくお願いします。

  • androidタイトル&メニューバーサイズ取得

    こん◯んは。 いつもお世話になっています。 Andoidアプリを勉強しながら作成していますが、端末別に画像サイズ(全体)を取得するやり方がわかりましたが、タイトルバーとメニューバーを含めた数字なのでその大きさを取得する方法を教えて欲しくて質問しました。 【知りたい事】 画像添付(青色□の部分の高さを取得したい) 説明が下手ですすいません。 画面サイズは取得出来ているので、青□部分のサイズを取得する事で計算出来ます。 または、逆に青□部分を省いた高さの取得方法があれば知りたいです。 【開発環境】 Windows vista Eclipse Galaxy-S 【知識レベル】 PHP MySQL Java初体験中 いろいろ検索してみましたが、理解度も少ないのでなかなかうまく出来ません。 皆様のお知恵をお貸しください、宜しくお願いたします。 また参考になるサイト等ありましたら教えてください。

    • ベストアンサー
    • Java
  • メニューバーの色

    コントロールパネル→画面→デザイン→詳細設定 で、全ての色を自分の好きな色に変更したのですが、 上下のメニューバーとスクロールバーのところだけ何故か変わりません!! 詳細設定で設定してるときは変わるのですが、OKにして、デザイン、の画面に戻ると、上下メニューバーとスクロールバー以外だけ色がきちんと変更されていて、あとはそのままです 何故でしょう??どうしたら上下のメニューバーとスクロールバーの色も変更できますか? また、デスクトップやお気に入りのフォルダの色はどうやったらかえられますか 初心者なのでわかりやすいようにお願いします。。。。

  • アクセス2010本体フォーム固定

    アクセス本体のフォームの大きさを固定したく、下記サイトを参考にし http://hatenachips.blog34.fc2.com/blog-entry-2.html SetWindowPos hWnd, HWND_TOP, 0, 0, 800, 600, SWP_NOMOVE 、としました。 これを解除してフォームの大きさを変更できるようにするには、どうしたらよろしいでしょうか?

  • メニューバーに有った、キャプチャーが消えました。

    パソコンは、ウインドウXPなんですが、事情で、数日前に初期化を 致しました。昨日再びインターネットの設定を試みてみた所が BIGLOBEインターネットのメニューバーの「キャプチャー」のカメラが メニューバーの覧に、無いのですがどうしたら復元できますか? 教えてください。

専門家に質問してみよう