MDIの最小化

[戻る]
しんた 2003/02/19(水) 15:24:14
度々お世話になります。

MDIで、プログラムを作成しているのですが、
親ウインドウを開いたときに子ウインドウを3個開くようにしています。
    _________
   |    |    |
   | A  |    |
   |____| C  |
   |    |    |
   | B  |    |
   |    |    |
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
↑こんな感じです。

このときに、二点質問があります。

1.A,Bに関しては、最大・最小、消去のボタンすらなしにしたい。
(これは、最初の作成時にできると思うのですが、Cにその機能をつけたくなかったので。最大
化は消してあります。)
どうすれば、バーに、何も表示せずにすむのか??

2.Cを最小化すると、Bの後ろに隠れる形になってしまいます。そうではなくて、Bの右隣に
最小化したときのウインドウをおきたいのです。どうすればいいのでしょうか??

二点、ご教授ください。
よろしくお願いします。

ひろ 2003/02/20(木) 12:54:54
AとBをダイアログバーにするのが手っ取り早いのでは?

>発言される前に「使用上の注意」を必ずお読み下さい
は忘れずに

しんた 2003/02/20(木) 14:14:51
すいません。

書き忘れていました。
開発環境は Win2000、VC++6.0、MFC,MDIです。

で、この件のに関してですが、
>1.A,Bに関しては、最大・最小、消去のボタンすらなしにしたい。
につては、

CMDIChildWndの派生クラスCMyMDIを作成し、

BOOL CMyMDI::PreCreateWindow(CREATESTRUCT& cs) 
{
    cs.style ^= WS_SYSMENU;
    cs.style ^= WS_MINIMIZEBOX;
    cs.style ^= WS_MAXIMIZEBOX;
    return CMDIChildWnd::PreCreateWindow(cs);
}

と、関数をつくり、
BOOL CMainApp::InitInstance()
{
//省略
    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
        IDR_MAINTYPE,
        RUNTIME_CLASS(CMainDoc),
        RUNTIME_CLASS(CMyMDI), // カスタム MDI 子フレーム
        RUNTIME_CLASS(CMainView));
    AddDocTemplate(pDocTemplate);
}
として、解決しました。

しかし、2については、皆目検討がつきません。

なにか、いい方法はありませんか??
ご助言お願いします。

dairygoods 2003/02/20(木) 15:07:43
SetWindowPlacementで最小化したときのウィンドウの位置を
指定できますが、これで何とかなりますでしょうか。

しんた 2003/02/20(木) 16:30:51
ありがとうございます。

早速試してみました。
    WINDOWPLACEMENT a;
    a.ptMinPosition.x=500; //値は適当
    a.ptMinPosition.y=500;
    CWnd::SetWindowPlacement(&a);

ソース自体はこのように書いて、あってると思うのですが、
どこに書いていいのかわかりませんでした。

このプログラムを書いてあるOnCreateに書いてみたのですが、失敗。
この、ウインドウを作る時に、呼ぶCChildFrmのOncreateに、書き込むと、
ウインドウ自体表示されなくなってしまいました。。。(泣)

最小化するときに呼ばれるところはどこなのでしょうか??

dairygoods 2003/02/20(木) 16:48:56
OnCreate()でも可能でしたよ。

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
  if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
    return -1;

  WINDOWPLACEMENT wp;
  GetWindowPlacement(&wp);
  wp.flags = WPF_SETMINPOSITION;
  wp.ptMinPosition.x = 10;
  wp.ptMinPosition.y = 10;
  SetWindowPlacement(&wp);

  return 0;
}

最小化するたびに位置を直したいならば、
上記をOnSysCommand()で行えばよいでしょう。

しんた 2003/02/20(木) 17:20:03
[[解決]]
あれ??
行きました。。。(^^ヾ

たくさんのご助言ありがとうございます。

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