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

OS -> Windows7 Enterprice SP1
VSバージョン -> VS2008 Professional Edition

メインフレーム(CFrameWnd)内に分割ウィンドウでCFormViewを縦2つ内包した画面です。
(内1つはダミーで縦サイズが0指定)

フォームビューの初期表示時にデータの有無を判定し、
データが無ければリストコントロールを非表示にして、
それ以下のコントロールを上詰めする、という処理を取っています。

その際、フレームサイズもコントロールの非表示に伴い
サイズを縮小したいのですが、現状のやり方では
想定よりも縦幅が大きくなってしまいます。

以下にコードを記述します。

// CFormView
void CSumpleFormView::InitFormView()
{
// データ取得、コントロールの位置変更は省略

// 現在のフレームサイズを取得
RECT stFrameRect;
GetParentFrame()->GetWindowRect(&stFrameRect);

// フレーム幅
int iFrameWidth = stFrameRect.right - stFrameRect.left;

// 最下端(OKボタン)のコントロール
RECT stBtnRect;
m_BtnOk.GetWindowRect(&stBtnRect);

// ダイアログベース単位を取得
iDlgBaseY = HIWORD(GetDialogBaseUnits());
// 余白をピクセル高さに換算する
int iYPadding = MulDiv(4, iDlgBaseY, 8);

// フレーム高さ
// 最下端コントロールのbottom + 余白をフレーム高さとする
int iFrameHeight = stBtnRect.bottom + iYPadding;

// メインフレームにサイズを渡す
pclMainFrame->ChangeSize(iFrameWidth, iFrameHeight);
}

// CFrameWnd
void CSumpleFrameWnd::ChangeSize(int iWidth, int iHeight)
{
RECT stRect;

GetWindowRect(&stRect);
SetWindowPos(&CWnd::wndTop, stRect.left, stRect.top
, iWidth, iHeight, SWP_SHOWWINDOW);
}

余白(iYPadding)を加算せずにサイズを変更しても
最下端コントロールの下に余白が出来るので、
縦幅の設定に問題があるようです。
ですが、原因が分かりません…。

ご教授のほど、宜しくお願い致します。
また、不明な点がありましたらご質問下さい。

A 回答 (1件)

単純な事なので要所要所でトレース出力して見ればすぐに判ると思うのですが...



ざっと眺めた感じでは、
SetWindowPosは座標ではなく、マニュアル通りに高さを要求するので、ちゃんと高さを計算した方がいいと思います。
何だかスクリーン座標のまま計算してあるように見えます。理屈が合えばそれでもいいのですが。
    • good
    • 0

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

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