如何屏蔽系统菜单?

xbdvcx2 2002-12-14 10:39:01
我写了一个对话框程序,只想让其有固定的大小,所以只让最小化和关闭按钮有用。最大化已经禁止了,可是点击标题栏上的图标,在弹出的系统菜单上仍可选择最大化,或者将其最小化后,在任务栏上的程序按钮上右击也可弹出系统菜单。我看到一些程序,其系统菜单上只有最小化和关闭,这是怎么做的?或者让最大化和移动等留在上面,只将其禁止也可。
...全文
214 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xbdvcx2 2002-12-15
  • 打赏
  • 举报
回复
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);
GoogleGeek 2002-12-14
  • 打赏
  • 举报
回复
或者这样做
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);
}
}
zhaolaoxin 2002-12-14
  • 打赏
  • 举报
回复
在对话框的初始化函数里去掉不想要的菜单项。
GoogleGeek 2002-12-14
  • 打赏
  • 举报
回复
没有你说的问题呀!
你是怎么禁止最大化按钮的?
你这样做就行了:
resourceview->yourdialog template->right click->property->Switch to style page->select :Title Bar,System menu and minimize box
ok!
这样就disable the maximize button
cbc 2002-12-14
  • 打赏
  • 举报
回复
如何禁止对话框关闭按钮和浮动工具条上的系统菜单
(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);
}
fingerfox 2002-12-14
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1164/1164810.xml?temp=9.571475E-02

http://expert.csdn.net/Expert/topic/1123/1123426.xml?temp=.3115961
GoogleGeek 2002-12-14
  • 打赏
  • 举报
回复
简单!
给你写个demo
WM_SYSCOMMAND

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧