起動時のダイアログサイズを記憶しておきたくてOnInitDialog()でGetWindowRect(&rect)を使用してサイズを取得しようとしたのですが、DebugモードではうまくいくのですがReleaseモードだと取得したサイズ(rect)に変な値が入ってしまうことがあります。
BOOL CHogeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect rect;
GetWindowRect( &rect ); <--- Releaseモードだと取得した値が変?
}
これは何かソース上に問題があるのでしょうか?
また、これ以外にリソースで設定したダイアログのサイズを取得する方法が
ありましたらご教授願います。
開発環境 WindowsXP VC++6.0 MFC
よろしくお願いします
私の場合は、下のようなコーディングにしていますが・・・
お問い合わせのようなことが起きたことはありません。
CRect rect;
GetWindowRect(rect); <- &なし
あんじゅさん、コメントありがとうございます。
あんじゅさんの書かれたコーディングも試してみたのですが同様の現象が発生してしまいます。
自分でも色々試してみていますが、もし何か他の情報等ありましたらまあtご教授願います。
えっと、「Releaseモードだと取得した値が変」とありますが、これはどのように確認していますか?
私がよくやる手順としては
・ブレイクポイントを設けてウオッチ式で確認
・取得した値をMessageBoxなどで確認
ですが、前者はでばっぐモードの時のみの確認方法です。
たしか、Releaseモードでブレイクポイントを指定しても値が正しく表示されませんよ(その辺の情報を取得できるようにしているのがでばっぐモードなわけで)?
的外れな回答でしたらすんません(汗)。
> また、これ以外にリソースで設定したダイアログのサイズを取得する方法が
こちらは下記コードで実装可。
xxxx CHogeDlg::xxxx() {
// ダイアログ ボックス単位 == リソースで設定したダイアログのサイズ
const int width = 200; // 横幅(ダイアログ ボックス単位)
const int height = 200; // 縦幅(ダイアログ ボックス単位)
CRect rect(0, 0, width, height);
MapDialogRect(rect);
::AdjustWindowRectEx(rect, GetStyle(), (GetMenu() != NULL), GetExStyle());
// st.Format(_T("%d, %d"), rect.Width(), rect.Height());
// MessageBox(st);
}
どらさん、gakさん、コメントありがとうございます。
> えっと、「Releaseモードだと取得した値が変」とありますが、これはどのように確認していますか?
取得したサイズの確認はDebug/Releaseモード共にMessageBoxで表示させて確認しました。
>> また、これ以外にリソースで設定したダイアログのサイズを取得する方法が
> こちらは下記コードで実装可。
ご教授ありがとうございます。
さっそく試してみようと思います。
ツイート | ![]() |