修改CMyView类的preCreateWindow(也许就可以了)

解决方案 »

  1.   

    重载子窗口类的WM_CLOSE消息,什么事也不作,该消息值好像只能手动添加
      

  2.   

    void CChildFrame::ActivateFrame(int nCmdShow)
    {
    CMenu *pSysMenu = GetSystemMenu(FALSE);
    pSysMenu->EnableMenuItem(SC_CLOSE,MF_DISABLED); nCmdShow = SW_SHOWMAXIMIZED;
    CMDIChildWnd::ActivateFrame(nCmdShow);
    }
    在子框架中调用GetSystemMenu函数,将要屏蔽的按钮禁止就可以了。刚刚想起来,不好意思!!
      

  3.   

    在ChildFrame类的OnCreate中加入:
    CMenu* pMenu=GetSystemMenu(false);
    if(pMenu)
        pMenu->RemoveMenu(SC_CLOSE,MF_BYCOMMAND);
      

  4.   

    用classwizard重载CChildFrame类的WindowProc函数。LRESULT CChildFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(message == WM_SYSCOMMAND && wParam == SC_CLOSE)
    {
    return FALSE;
    }
    return CMDIChildWnd::WindowProc(message, wParam, lParam);
    }
      

  5.   

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    ...
    GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
    ...
    }
    int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
    return -1;

    // TODO: Add your specialized creation code here
    GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
    return 0;
    }
      

  6.   

    void CChildFrame::ActivateFrame(int nCmdShow)
    {
    CMenu *pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu)
    {
    pSysMenu->EnableMenuItem(SC_CLOSE, MF_GRAYED | MF_BYCOMMAND);
    } nCmdShow = SW_SHOWMAXIMIZED;
    CMDIChildWnd::ActivateFrame(nCmdShow);
    }使用RemoveMenu也能实现,不过在鼠标点击子窗口左上角的图标时,弹出的菜单中分割条有两个,不爽!!用上面的代码我认为较好,感谢大家提供的意见,
    谢谢!!!顺便问一下,能给自己加分嘛?