窗口右上角的三个小按钮,如何设置Enable或Disable?

shangke_sks 2004-10-20 11:35:47
如题……

谢谢。

...全文
661 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
shangke_sks 2004-10-25
  • 打赏
  • 举报
回复
谢谢大家,回想起来好像真没大见过最大化最小化按钮都是灰色的窗口呢。
shangke_sks 2004-10-25
  • 打赏
  • 举报
回复
谢谢大家,回想起来好像真没大见过最大化最小化按钮都是灰色的窗口呢。
alon21 2004-10-21
  • 打赏
  • 举报
回复
移除 是指移除系统菜单,你用鼠标点程序左上角的图标,出现的那个菜单。
bugbugbug 2004-10-21
  • 打赏
  • 举报
回复
to:alon21(飘一族.Alon)
我试过了你的这种方法,关闭按钮还只式变灰并没有移除。
alon21 2004-10-21
  • 打赏
  • 举报
回复
晕 刚才写错了,没有写最小化的,当然有效了 -_-|||

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);
pMenu->DeleteMenu(SC_MINIMIZE,MF_BYCOMMAND|MF_GRAYED);
pMenu->DeleteMenu(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);

这样倒是可以达到你的要求,使之失效,但是按钮不会灰化
EnableMenuItem的话,对最大化和最小化无效,希望高手给出解决。
alon21 2004-10-21
  • 打赏
  • 举报
回复
to :Maconel(Maconel) 你可以试验一下
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);
pMenu->EnableMenuItem(SC_MAXIMIZE,MF_BYCOMMAND|MF_GRAYED);

系统菜单中的相关内容会被移除,但是 按钮不会灰化(用EnableMenuItem也不可以),
不过移动最大化会失效,但是最小化还是可以用。
alon21 2004-10-21
  • 打赏
  • 举报
回复
我说的方法,你试验一下就知道了,建一个单文档,加一个菜单
内容
GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED); //关闭失效
内容
GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_ENABLED); //关闭有效

不过上面的方法对最大化、最小化无效。我也不知道为什么,还希望高手给出答案 -_-|||

Maconel 2004-10-21
  • 打赏
  • 举报
回复
alon21(飘一族.Alon)的方法其实是这样的。
程序都有一个系统菜单,就是在标题栏上点右键出来的那个。
利用GetSystemMenu可以得到这个菜单的句柄,如果用RemoveMenu把“关闭”那个菜单项删除掉,那么你会发现窗体的关闭按钮也变成不可用的了,最大化之类按钮也是一样。
而alon21(飘一族.Alon)的方法是没有删掉,只是disable掉了,一样的道理。
goowei 2004-10-21
  • 打赏
  • 举报
回复
其实和alon21(飘一族.Alon)说得是一样的。
先得到窗口系统菜单的句柄,然后把close disable。
goowei 2004-10-21
  • 打赏
  • 举报
回复
HMENU hMenu = ::GetSystemMenu(m_hWnd,false);
EnableMenuItem(hMenu, SC_CLOSE | MF_BYCOMMAND , MF_GRAYED );
shangke_sks 2004-10-21
  • 打赏
  • 举报
回复
在问这个问题前,除了alon21(飘一族.Alon) 说的方法外,其他的我都会。而alon21(飘一族.Alon) 说的方法我还没弄清楚。

总之是没有找到我想要的答案。

不过还是谢谢大家热心的回答问题。
oyljerry 2004-10-21
  • 打赏
  • 举报
回复
要去掉,需要自己重绘了
alexmayer 2004-10-21
  • 打赏
  • 举报
回复
搬个凳子坐下听讲!

顺便帮顶混分!
Maconel 2004-10-21
  • 打赏
  • 举报
回复
想移除恐怕比较难实现了,那不如自己画标题栏。
shangke_sks 2004-10-20
  • 打赏
  • 举报
回复
谢谢各位,

现在遇到的问题是,我需要控制一个View子窗口的这三个按钮,而不是对话框的。

alon21(飘一族.Alon) 的方法也不好用啊。

而且对对于对话框来讲,去掉WS_MINIMIZEBOX和WS_MAXIMIZEBOX这两个属性后,这两个按钮干脆就没有了,能不能获取CButton指针呢,然后用EnableWindow()?
alon21 2004-10-20
  • 打赏
  • 举报
回复
上面都说的差不多了,我再补充一下:

//让对话框右上角关闭按钮(X)变灰
GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);
huaboy408 2004-10-20
  • 打赏
  • 举报
回复
基于SDI的:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
添加cs.style &= ~WS_MAXIMIZEBOX;可以灰化最大化按钮
李马 2004-10-20
  • 打赏
  • 举报
回复
最小化和最大化按钮在窗口样式中将WS_MINIMIZEBOX和WS_MAXIMIZEBOX去掉就可以了。
至于关闭按钮,需要禁用左上角系统菜单的“关闭”项。
Wenxy1 2004-10-20
  • 打赏
  • 举报
回复
1,第一种方法,在对话框的属性中勾选相应的选项。

2,第二种方法, 在程序中用ModifyStyle()来设置。
shangke_sks 2004-10-20
  • 打赏
  • 举报
回复
看来是我没说明白。

我要在程序中动态的控制它们。如何做?
加载更多回复(2)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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