我做了一个"不"支持DOC/VIEW的SDI应用,想屏蔽最大化按钮, 我采用了以下两种方法:
(1)在InitInstance()中,加入:
     LONG lStyle;
     lSytle = SetWindowLong(m_pMainWnd->m_hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX;
     ::SetWindowLong(m_pMainWnd->m_hWnd, GWL_STYLE, lStyle);
     pFrame->ShowWindow(SW_SHOW);
     pFrame->UpdateWindow();
(2)改写BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)如下:
     if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;

     cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX;
     cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
     cs.lpszClass = AfxRegisterWndClass(0);     return TRUE;两种方法在支持DOC/VIEW的SDI中是可以达到屏蔽主窗口的最大化按钮的目的的, 但在不支持DOC/VIEW SDI中不起作用.希望大家来帮一下忙.

解决方案 »

  1.   

    在PreCreateWindow()涵数中去掉WS_MAXIMIZEBOX风格
    BOOL CxxFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
    {
        cs.style &= ~WS_MAXIMIZEBOX;
        return CFrameWnd::PreCreateWindow(cs);
    }或者试试:
    CMenu *pmenu=AfxGetMainWnd()->GetSystemMenu(FALSE);
    if(pmenu)
      pmenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);//禁止关闭按钮
      

  2.   

    在CMainFrame的PreCreateWindow里面BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs    // Create a child window without the maximize button 
        cs.style &= ~WS_MAXIMIZEBOX;

    return TRUE;
    }
      

  3.   

    感谢上面两位,你们的方法我试过了,但不能屏蔽掉最大化按钮。如果在DOC/VIEW的SDI里就行的。
      

  4.   

    问题是找到了,但还没有解决. 有什么办法使最大化按钮不响应MOUSE的点击?
      

  5.   

    OnSysCommand( UINT nID, LPARAM lParam );
    {
        if(nID==SC_MAXIMIZE)//最大化CWnd对象
        {
           ....  //什么也不写  
        }
    }