none
MFC SDIのウインドウサイズについて RRS feed

  • 質問

  • Visual Studio 2010でMFC SDIで悩んでいます?

    Visual Studio 2010を使用して、SDI+CFormViewで作成した場合に次の現象が出ます。

    1.作成したプログラムを起動する。
    2.最大化ボタンで、最大化する。
    3.プログラムを終了する。
    4.再度、プログラムを起動する。
    5.最大化した状態で、ウインドウサイズのみFORMのサイズになってしまう。

    -> 5.で、最大化してほしいのですが、変な動きをしているようです。

    MDIでは、上記の現象は出ません。

    • 編集済み S.Kunihiro 2012年3月11日 9:48
    • 移動 山本春海 2012年3月15日 8:17 より適切と思われるカテゴリに移動しました。 (移動元:Visual Studio 共通 フォーラム)
    2012年3月11日 9:47

回答

すべての返信

  • どんな状態になってるのかよくわからないので、具体的な指摘は難しい感じですが・・・。


    ウィザードで作成した SDI アプリは普通に最大化状態を保存してくれてるようなのですが・・・。

    MFC のアプリケーションウィザードで SDI を作った後に改造してそうなったのですか?


    それならば改造した部分に原因があるはずなので調べてみると良いでしょう。

    2012年3月11日 13:52
  • ウィザードで作成した状態で、何も改造していません。

    > ウィザードで作成した SDI アプリは普通に最大化状態を保存してくれてるようなのですが

    最大化状態を、保持してくれて、最大化ボタンは最大化状態になって、ウインドウサイズのみFormの大きさになってしまいます。

    SP1にしても何も変わりませんでした。

    2012年3月11日 14:31
  • こちらの環境 VS2010 Pro SP1 + Win7 Home x64 では普通に最大化で表示されてますね。

    ウィザードで作成した時点では CFormView は作られてないようなので、CFormView を作ってるのではないのですか?

    作成した CFormView のせいだと考えたのですが・・・。

    2012年3月11日 15:14
  • kyano30さま、ありがとうございます。

    CFormView は、ウィザードで作成しています。

    FormのOnsizeイベントを見てみると、最後に小さいサイズのイベントが発生しています。
    イベントの順番がずれているようなのですが。

    環境は VS2010 Ultimate SP1 + Win7 Ultimate x64です。

    2012年3月11日 22:09
  • ViewのOnInitialUpdateの2行をコメントアウトするとそれらしい動きを
    してくれます。

    void CTestView::OnInitialUpdate()
    {
     CFormView::OnInitialUpdate();
     //GetParentFrame()->RecalcLayout();
     //ResizeParentToFit();

    }

    ====================================
    GetParentFrame()->RecalcLayout();
    ResizeParentToFit();

    この2行は、不要なのでしょうか、それとも何か意図があるのでしょうか?

    2012年3月12日 1:00
  • そこまでわかったのなら MFC リファレンスや検索で調べるようにした方が身に付きますよ。


    以下の質問で答えがでていたので張っておきます。

    http://social.msdn.microsoft.com/Forums/ja/vcgeneralja/thread/6eb9af8d-84bd-42bd-a62a-c7861f018e35

    • 回答としてマーク 山本春海 2012年3月15日 8:17
    2012年3月12日 10:56
  • kyano30さま、ありがとうございました。

    解決いたしました。

    2012年3月12日 22:12