- ベストアンサー
タイトルバー・メニューバーの高さ取得
- サイズ変更可能なダイアログボックスアプリケーションを作成しています。
- ダイアログのサイズを変更する際に、GetClientRect関数を使用してサイズを取得し、設定ファイルに保存します。
- しかし、GetClientRectはメニューバーやタイトルバーの高さを含まない座標を返すため、復元時に高さが小さくなってしまいます。メニューバーやタイトルバーの高さを取得する方法がわかりません。環境はVC++6.0 MFCです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
dannerです。 >> WINDOWPLACEMENTは最大化とか最小化には対応できそうですが、ウィンドウの角を引っ張っての微妙なサイズ変更を保存することができないですよね??(本当か?)。 保存できますよ。 やり方としては 保存: GetWindowPlacementしてWINDOWPLACEMENTのメンバ変数をすべて保存 復元: 保存したファイルからWINDOWPLACEMENTのメンバ変数に設定 SetWindowPlacementを実行 ShowWindow(wndplace.showCmd);を実行 ←いらないかも こんな感じでできると思うのですが?
その他の回答 (1)
- danner
- ベストアンサー率72% (8/11)
メニューバーやタイトルバーの高さは GetSystemMetricsで取得することはできますよ。 ただ、ウィンドウサイズの保存・復元は ウィンドウを閉じるときに保存したほうがいいと思います。 あとサイズの保存・復元は、 GetWindowPlacementとSetWindowPlacementを使用すれば メニューバーとかのサイズを気にしなくてすみます。
お礼
GetWindowPlacementで解決できました。 ありがとうございました。
補足
GetWindowPlacementの存在には気づいてはいたんですが WINDOWPLACEMENTは最大化とか最小化には対応できそうですが、ウィンドウの角を引っ張っての微妙なサイズ変更を保存することができないですよね??(本当か?)。 説明不足で申し訳ありませんです。 とりあえずGetSystemMetrics()で挑戦してみます。 これは知りませんでした(でもすごく重要そうな関数ですね・・) あと保存は閉じるときにします。 Windowsプログラミングはいくらやっても判らないことだらけで・・ うまくいったら報告致します。 また、なんか勘違いしてたら突っ込んでください。 どうもありがとうございました。
お礼
たびたびどうもすみませんです。 GetWindowPlacementで出来ました。 rcNormalPosition変数に保存されてたんですね;; よく考えたらそんな中途半端な関数作らないですよね。 完全に独学でやっているので知識不足や思い込みで 簡単なことにするのに何時間もかかってしまったりします。 あげく訳のわからんコードを書いて自己満足してたりして・・ ほんとにネットだけが頼りです(寂しいな) おかげさまで簡単に保存することが出来ました