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

サイズ変更可能なダイアログボックスアプリケーションを作っています

ダイアログサイズ変更時に
GetClientRect( m_DlgSize );
のようにしてサイズを取得し、設定ファイルにm_DlgSizeを保存します

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

A 回答 (2件)

dannerです。



>> WINDOWPLACEMENTは最大化とか最小化には対応できそうですが、ウィンドウの角を引っ張っての微妙なサイズ変更を保存することができないですよね??(本当か?)。
保存できますよ。

やり方としては
保存:
 GetWindowPlacementしてWINDOWPLACEMENTのメンバ変数をすべて保存
復元:
 保存したファイルからWINDOWPLACEMENTのメンバ変数に設定
 SetWindowPlacementを実行
 ShowWindow(wndplace.showCmd);を実行 ←いらないかも

こんな感じでできると思うのですが?
    • good
    • 0
この回答へのお礼

たびたびどうもすみませんです。
GetWindowPlacementで出来ました。
rcNormalPosition変数に保存されてたんですね;;
よく考えたらそんな中途半端な関数作らないですよね。

完全に独学でやっているので知識不足や思い込みで
簡単なことにするのに何時間もかかってしまったりします。
あげく訳のわからんコードを書いて自己満足してたりして・・

ほんとにネットだけが頼りです(寂しいな)
おかげさまで簡単に保存することが出来ました

お礼日時:2001/11/03 12:07

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


GetSystemMetricsで取得することはできますよ。

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

この回答への補足

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

うまくいったら報告致します。
また、なんか勘違いしてたら突っ込んでください。
どうもありがとうございました。

補足日時:2001/11/03 00:18
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/11/03 12:11

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

このQ&Aを見た人はこんなQ&Aも見ています