我写了一个对话框程序,只想让其有固定的大小,所以只让最小化和关闭按钮有用。最大化已经禁止了,可是点击标题栏上的图标,在弹出的系统菜单上仍可选择最大化,或者将其最小化后,在任务栏上的程序按钮上右击也可弹出系统菜单。我看到一些程序,其系统菜单上只有最小化和关闭,这是怎么做的?或者让最大化和移动等留在上面,只将其禁止也可。

解决方案 »

  1.   

    简单!
    给你写个demo
    WM_SYSCOMMAND
      

  2.   

    http://expert.csdn.net/Expert/topic/1164/1164810.xml?temp=9.571475E-02http://expert.csdn.net/Expert/topic/1123/1123426.xml?temp=.3115961
      

  3.   

    如何禁止对话框关闭按钮和浮动工具条上的系统菜单
    (Future Studio 徐景周发表于2002-1-16 20:23:23)1、禁止对话框中的关闭按钮有二种方法。
    第一种方法,用ModiftMenu()涵数来实现:CMenu* pMenu = this->GetSystemMenu(FALSE);
    pMenu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED );第二种方法,用EnableMenuItem()涵数来实现:CMenu* pMenu = this->GetSystemMenu(FALSE);
    pMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);2、禁止浮动工具条上的系统菜单。
    新建一个CToolBar的派生类CxxToolBar,在新类中的左键双击(CxxToolBar::OnLButtonDblClk(...))
    和左键单击(CxxToolBar:: OnLButtonDown(...))涵数中分别加入下面代码既可:
    if (IsFloating()) //工具条正在浮动状态中
    {
       CWnd* pMiniFrame;
       CWnd* pDockBar;   pDockBar = GetParent();
       pMiniFrame = pDockBar->GetParent();   //去除其上系统菜单
       pMiniFrame->ModifyStyle(WS_SYSMENU, NULL);   //重绘工具条
       pMiniFrame->ShowWindow(SW_HIDE);
       pMiniFrame->ShowWindow(SW_SHOW);
    }3、禁止窗口最大化按钮
    在PreCreateWindow()涵数中去掉WS_MAXIMIZEBOX风格显示既可。
    BOOL CxxFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
    {
        cs.style &= ~WS_MAXIMIZEBOX;
        return CFrameWnd::PreCreateWindow(cs);
    }
      

  4.   

    没有你说的问题呀!
    你是怎么禁止最大化按钮的?
    你这样做就行了:
    resourceview->yourdialog template->right click->property->Switch to style page->select :Title Bar,System menu and minimize box
    ok!
    这样就disable the maximize button
      

  5.   

    或者这样做
    void CHanZiDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    }
    else
    {
    if(nID==SC_MAXIMIZE)//屏蔽最大化按钮
    return ;
    CDialog::OnSysCommand(nID, lParam);
    }
    }
      

  6.   

    cbc(逍遥子) :
    问题解决了,多谢你的抛砖引玉,用你的函数感到效果不十分满意,顺着你的回答查找 MSDN ,终于找到了如下的函数,效果非常好。多谢,多谢!
    CMenu* pMenu = this->GetSystemMenu(FALSE);
    pMenu->DeleteMenu(SC_MAXIMIZE, MF_BYCOMMAND|MF_GRAYED);
    pMenu->DeleteMenu(SC_MOVE,MF_BYCOMMAND|MF_GRAYED);
    pMenu->DeleteMenu(SC_SIZE,MF_BYCOMMAND|MF_GRAYED);