MFC工程怎么去掉左上角的菜单:还原 还原
移动 移动
大小 大小
最小化 最小化
最大化 最大化
关闭 关闭
下一个
移动 移动
大小 大小
最小化 最小化
最大化 最大化
关闭 关闭
下一个
解决方案 »
- MFC中ini文件读写问题
- #if !defined(AFX_RYGWND_H_1AA889D5_9788_11D0_BED2_00C04FC2A0C2 __INCLUDED_)
- 为什么返回的颜色值总是黑色?痛苦!!!
- 如何给CListCtrl控件发送模拟鼠标按下消息?
- 模拟数字键盘的问题!
- 各位老大帮帮忙,请问哪里有installer shield下载呀,请给出下载地址,在线等待中!
- 浏览器插件开发
- 请教各位。这个信息是什么意思,为什么我试了几个不同代码都出这样的提示?
- 如何在sql server的存储过程中使用select 栏位名 into 变量名
- 哪里有VC++电子版教程下载呀。。
- 发个贴试试
- 调用DLL中的函数,该函数的参数为一个实例对象
函数功能:该函数允许应用程序为复制或修改而访问窗口菜单(系统菜单或控制菜单)。
函数原型:HMENU GetSystemMenu(HWND hWnd,BOOL bRevert);
参数:
hWvd:拥有窗口菜单拷贝的窗口的句柄。
BPevert:指定将执行的操作。如果此参数为FALSE,GetSystemMenu返回当前使用窗口菜单的拷贝的句柄。该拷贝初始时与窗口菜单相同,但可以被修改。
如果此参数为TRUE,GetSystemMenu重置窗口菜单到缺省状态。如果存在先前的窗口菜单,将被销毁。
返回值:如果参数bRevert为FALSE,返回值是窗口菜单的拷贝的句柄:如果参数bRevert为TRUE,返回值是NULL。
备注:任何没有用函数GetSystemMenu来生成自己的窗口菜单拷贝的窗口将接受标准窗口菜单。
窗口某单最初包含的菜单项有多种标识符值,如SC_CLOSE,SC_MOVE和SC_SIZE。
窗口菜单上的菜单项发送WM_SYSCOMMAND消息。
所有预定义的窗口菜单项的标识符数大于OxFOOO。如果一个应用程序增加命令到窗口菜单,应该使用小于OxFOOO的标识符数。
系统根据状态自动变灰标准窗口菜单上的菜单项。应用程序通过响应在任何某单显示之前发送的WM_INITMENU消息来实现选取和变灰。
Windows CE环境下,不支持系统菜单,但GetSyemMenu以宏的方式实现,以保持和已存在代码的兼容性。可以使用该宏的返回菜单句柄使关闭框无效,与在 Windows桌面平台上一样。Windows CE下的返回值没有其他用处。参数bRevert无用。
用下面的代码使关闭按钮无效:
EnableMenultem(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND I MF_GRAYED);
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。
{
//屏蔽右键标题功能
if(pMsg->message == WM_NCRBUTTONDOWN)
return true;
return CDialog::PreTranslateMessage(pMsg);
}直接屏蔽右键不行吗?
void CYourDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect crect,wrect;
GetClientRect(&crect);
GetWindowRect(&wrect);
CRect rc;
rc.top = wrect.top;
rc.left = wrect.left;
rc.bottom = wrect.bottom - crect.Height();
rc.right = rc.left+30;
if(PtInRect(&rc,point))
return;
CDialog::OnNcLButtonDown(nHitTest, point);
}
void CYourDlg::OnNcRButtonDown(UINT nHitTest, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return;
CDialog::OnNcLButtonDown(nHitTest, point);
}
rc.right = rc.left+30;
改为:
rc.right = wrect.right; 不然,右键标题栏的其他位置还是会出现系统菜单的。
{
CDialog::OnInitDialog();
CMenu* pMenu = GetSystemMenu(FALSE);
for(int i=pMenu->GetMenuItemCount()-1;i>=0;i--)
{
pMenu->DeleteMenu(i,MF_BYPOSITION);
}
}
void Cldlg1Dlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
//直接返回不做处理就能屏蔽右键菜单}
BOOL Cldlg1Dlg::PreTranslateMessage(MSG* pMsg)
{
//屏蔽Alt+空格键
if(pMsg->wParam==VK_SPACE && ::GetKeyState(VK_MENU)<0)
{
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
LRESULT Cldlg1Dlg::OnNcHitTest(CPoint point)
{
//屏蔽系统菜单
if(CDialog::OnNcHitTest(point)==HTSYSMENU)
return 0;
return CDialog::OnNcHitTest(point);
}
在XP系统下一般的时候都没有了菜单,但点左上角的图标偶尔会弹出菜单
主框架的和视图的图标都是。
并且在vist系统下就屏蔽不了。
30这个数字加大点
rc.left = wrect.left;
rc.bottom = wrect.top +30;
rc.right = rc.left+30;
if(PtInRect(&rc,point))
这样改
{
//屏蔽系统菜单
if(CDialog::OnNcHitTest(point)==HTSYSMENU)
return 0;
return CDialog::OnNcHitTest(point);
}
如图。直接点上面框架的图标不会弹出菜单。