我们知道用SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE) & ~WS_SYSMENU);把WS_SYSMENU风格去除可以把标题栏上的最小,大化按钮去掉,可是去掉他们的同时也把标题栏的右键菜单去掉了,
有没有办法把标题栏上的最小,大化灯按钮全去掉,但是保留标题栏的右键菜单??
----------谢谢,欢迎讨论~!
有没有办法把标题栏上的最小,大化灯按钮全去掉,但是保留标题栏的右键菜单??
----------谢谢,欢迎讨论~!
他是和系统菜单和关闭按钮有关
最大化、最小化按钮的风格是WS_MINIMIZEBOX、WS_MAXIMIZEBOX
自己编辑系统菜单
一下是MFC向导生成的框架中向系统菜单中添加 关于 项的代码
你可以参考这个实现CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
那你的意思是(只能?)用~WS_SYSMENU去掉关闭按钮,(因为去掉WS_SYSMENU风格标题栏右键菜单就没了),然后自己写想OnContextMenu之类的代码编辑系统菜单项并显示?
他是和系统菜单和关闭按钮有关
最大化、最小化按钮的风格是WS_MINIMIZEBOX、WS_MAXIMIZEBOX
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetWindowLong(this-> m_hWnd,GWL_STYLE,(LONG)Style^WS_SYSMENU);
RECT rect;
this->GetWindowRect(&rect);
this->SetWindowPos(NULL,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,SWP_FRAMECHANGED);
如果要弹出和系统菜单一样的菜单,你要自己在点击边框和任务栏图标的时候写弹出菜单。。
1.去掉标题栏中的关闭按钮;
2.保留标题栏的右键菜单中的关闭菜单项;---------------------------
对于1,我的问题是:只能通过WS_SYSMENU风格去掉关闭按钮?
if(是)
{
//此时影响到2,即标题栏的右键菜单整个都被丢弃了(右键根本出不来右键菜单)。
//并且在OnContextMenu中GetSystemMenu(FALSE);根本得不到系统的菜单!
//
//这时一个办法是:自己定义菜单资源,然后加载进来,由OnContextMenu中显示,
}
else
{
//最好,方法是什么?
}--------------------------------------------------------
欢迎讨论~
哦,是吗,那只能先这样了,