MDI子ウィンドウのサイズの固定

[戻る]
モーモー 2003/02/08(土) 22:41:40
いつもお世話になってます。

今、vc++ver6.0、MFCで、MDIを作成しています。
起動時に、3つの子ウィンドウを表示させるところまではできたのですが、
それから、子ウィンドウの表示位置とサイズを固定させたく手を加えているところなのですが
うまくいきません。

いろいろ参考にしているのですが、1つの子ウィンドウはサイズ変更できているのに対し、
2つ目・3つ目の子ウィンドウともに、初期状態のままです。

以下にソースを添付しました。どこがいけないのかわからないので、ご指摘ください。

**************
CXXXXXXView1::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
------------略
    CWnd::MoveWindow(0,0,200,200);
    return 0;
}


CXXXXXXView2::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
------------略
    CWnd::MoveWindow(200,0,200,400);
    return 0;
}


CXXXXXXView3::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
------------略
    CWnd::MoveWindow(0,200,200,200);
    return 0;
}

dairygoods 2003/02/10(月) 11:43:43
Viewは、MDI子フレームの内側に張り付いているウィンドウですので、
Viewのサイズを変えてもフレームのサイズは変わりません。

Viewの親がCChildFrameというMDIフレームクラスになっています。

モーモー 2003/02/10(月) 13:18:47
CChildFrameで、個々のウィンドウのサイズや位置の指定はできるのでしょうか?

いろいろ参考に、
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;
    // TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを
    //       修正してください。

    // ウィンドウの左上が X軸200,Y軸100の場所に指定
    cs.x = 200;
    cs.y = 100;
    // ウィンドウのサイズを、幅500,高さ300に指定
    cs.cx = 500;
    cs.cy = 300;

    return TRUE;
}

と、記述してみたのですが、3つの子ウィンドウすべてが操作されてしまい、
うまくできませんでした。

すみませんが、もう少し書き方的なことを教えてください。
よろしくお願いします。

dairygoods 2003/02/10(月) 14:36:17
> CXXXXXXView1::OnCreate(LPCREATESTRUCT lpCreateStruct)
> {
> ------------略
>     CWnd::MoveWindow(0,0,200,200);
これを、
 GetParent()->MoveWindow(...);

ここで駄目ならOnInitialUpdate()で。


あるいは、3つの異なるMDIフレームを作って、
PreCreateWindow()だけをオーバーライドする方法も考えられます。

public CView1ChildFrame : public CChildFrame {
 PreCreateWindow();
};
public CView2ChildFrame : public CChildFrame {
 PreCreateWindow();
};
public CView3ChildFrame : public CChildFrame {
 PreCreateWindow();
};

モーモー 2003/02/10(月) 22:32:38
[[解決]]
上の方のやり方でサイズと位置の変更ができました!!!!
今回の質問に対しては解決です。
本当にありがとうございました。


ずうずうしい話ですが、
ちなみに、ウインドウの移動を禁止する(?)方法【場所固定する方法】を
知っていたら教えてください。

PAI 2003/02/11(火) 01:29:15
WM_NCHITTESTでクライアント領域のふりをすればOK、多分。

古いスレッドには追加発言できません。