起動時のダイアログサイズを取得したいのですが・・・


KOZO  2007-10-12 19:31:37  No: 66558

起動時のダイアログサイズを記憶しておきたくてOnInitDialog()でGetWindowRect(&rect)を使用してサイズを取得しようとしたのですが、DebugモードではうまくいくのですがReleaseモードだと取得したサイズ(rect)に変な値が入ってしまうことがあります。

BOOL CHogeDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    CRect rect;
    GetWindowRect( &rect ); <--- Releaseモードだと取得した値が変?
}

これは何かソース上に問題があるのでしょうか?

また、これ以外にリソースで設定したダイアログのサイズを取得する方法が
ありましたらご教授願います。

開発環境  WindowsXP VC++6.0 MFC

よろしくお願いします


あんじゅ  2007-10-13 09:11:36  No: 66559

私の場合は、下のようなコーディングにしていますが・・・
お問い合わせのようなことが起きたことはありません。

  CRect rect;
  GetWindowRect(rect);   <- &なし


KOZO  2007-10-15 22:40:17  No: 66560

あんじゅさん、コメントありがとうございます。
あんじゅさんの書かれたコーディングも試してみたのですが同様の現象が発生してしまいます。
自分でも色々試してみていますが、もし何か他の情報等ありましたらまあtご教授願います。


どら  2007-10-16 00:02:44  No: 66561

えっと、「Releaseモードだと取得した値が変」とありますが、これはどのように確認していますか?

私がよくやる手順としては

     ・ブレイクポイントを設けてウオッチ式で確認
     ・取得した値をMessageBoxなどで確認

ですが、前者はでばっぐモードの時のみの確認方法です。
たしか、Releaseモードでブレイクポイントを指定しても値が正しく表示されませんよ(その辺の情報を取得できるようにしているのがでばっぐモードなわけで)?

的外れな回答でしたらすんません(汗)。


gak  2007-10-16 01:35:58  No: 66562

> また、これ以外にリソースで設定したダイアログのサイズを取得する方法が
こちらは下記コードで実装可。

  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);
  }


KOZO  2007-10-17 00:47:21  No: 66563

どらさん、gakさん、コメントありがとうございます。

> えっと、「Releaseモードだと取得した値が変」とありますが、これはどのように確認していますか?

取得したサイズの確認はDebug/Releaseモード共にMessageBoxで表示させて確認しました。

>> また、これ以外にリソースで設定したダイアログのサイズを取得する方法が
> こちらは下記コードで実装可。

ご教授ありがとうございます。
さっそく試してみようと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加