`
tibaloga
  • 浏览: 871366 次
文章分类
社区版块
存档分类
最新评论

GetSystemMenu(FALSE)

 
阅读更多

GetSystemMenu

参数为False时返回当前窗口系统菜单(窗口标题栏右键弹出的移动、大小、最大化等)的句柄

系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”.“移动”.“最大化”.“最小化”.“关闭”这么几个按钮.这个菜单用普通的方法是不能编辑与改变的,但是我们可以通过api函数getsystemmenu来得到它的句柄,然后通过菜单相关的api函数就能改变它了。

如果括号中参数为FALSE,GetSystemMenu返回当前使用窗口菜单的拷贝的句柄。该拷贝初始时与窗口菜单相同,但可以被修改。
如果此参数为TRUE,GetSystemMenu重置窗口菜单到缺省状态。如果存在先前的窗口菜单,将被销毁。

任何没有用函数GetSystemMenu来生成自己的窗口菜单拷贝的窗口将接受标准窗口菜单。

窗口菜单上的菜单项发送WM_SYSCOMMAND消息.

在一个对话框工程中:

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);//IDM_ABOUTBOX表示要执行的动作,因为在点击这个菜单项时,将会发送消息,消息中nID就是这个ID,通过比对ID产生相应的动作
}
}
void CADO_TestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

只有在主窗口是对话框的MFC应用程序中才会出现这个消息IDM_ABOUTBOX。
IDM_ABOUTBOX是MFC框架在“InitDialog”函数中加入的“系统菜单”消息,用来弹出“IDD_ABOUTBOX”指定的对话框。
关于((nID & 0xFFF0) == IDM_ABOUTBOX):
在MSDN中SysCommand的帮助中,有这样一段:
In WM_SYSCOMMAND messages, the four low-order bits of the nID parameter are used internally by Windows. When an application tests the value of nID, it must combine the value 0xFFF0 with the nID value by using the bitwise-AND operator to obtain the correct result.
即nID的低四位是Windows内部用的,应用程序在检测这个ID时,必须用 0xFFF0与nID相与,屏蔽低四位,根据相与的结果来产生相应的动作

分享到:
评论

相关推荐

    Delphi 向窗体的系统菜单添加菜单项.rar

     AppendMenu(GetSystemMenu (Handle, FALSE), MF_SEPARATOR, 0, '');  with MainMenu1 do  begin  for I := 0 to Items.Count - 1 do  AppendMenu(GetSystemMenu(self.Handle,FALSE),mf_Popup,  Items[I]....

    wince禁止程序标题栏上的退出按钮示例

    代码如下:// 禁止标题栏上的退出按钮CMenu *menu = GetSystemMenu(false);if(menu){menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);} 恢复X按钮,用户可点击: 代码如下:// 恢复标题栏上的退出按钮...

    VC 限定框架窗口的大小和位置.rar

     CMenu* pTopMenu = GetSystemMenu(FALSE); //获取系统菜单  pTopMenu -> RemoveMenu(4,MF_BYPOSITION); //去除最大、最小化功能  pTopMenu -> RemoveMenu(2,MF_BYPOSITION); //去除改变尺寸功能  pTopMenu -> ...

    VC++编的随机数产生器简单版

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_...

    滑块对话框程序(Vc++ 实现代码)

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_...

    Delphi在窗口中添加系统菜单项.rar

    Delphi在WinForm窗口菜单中添加... Imenu:=getsystemmenu(handle,false); //获取系统菜单句柄  appendmenu(Imenu,MF_SEPARATOR,0,nil);  appendmenu(Imenu,MF_STRING,101,'我的系统菜单'); //加入用户菜单  end;

    班级查询系统,可以完成录入查询你删除

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_...

    模式识别作业,C均值聚类和感知器代码

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu...

    mfc可视化计算器编程

    //默认小数点标志为整数,也就是0,也就是FALSE } “+/-“按钮的处理函数 void CCalcDlg::OnNeg() { m_Dis=-m_Dis;//换个符号,其他都一样 UpdateData(FALSE); poz=1; point_flag=FALSE; } ‘.’按钮的处理...

    Delphi实现窗口的渐变显示特效和图片显示特效.rar

    sysmenuHandle := GetSystemMenu( handle, false ); //得到系统菜单的handle  If sysmenuHandle <> 0 Then  Begin  itemcount := GetMenuItemcount( sysmenuHandle ); //得到系统菜单的个数  for i:= 0 to ...

    C# 自定义窗体的最大化、最小化和关闭按钮

    IntPtr vMenuHandle = GetSystemMenu(Handle, false); InsertMenu(vMenuHandle, 255, MF_STRING, SC_ABOUT, "About... "); } protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_...

    中国象棋.zip

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); ...

    VC编写的聊天程序

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); ...

    mfc 计算器

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); ...

    VC++访问ACCESS数据库

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_...

    多小球碰撞

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_...

    基于sniffer做的一个抓包监控软件

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_...

    MFC制作的MP3

    GetDlgItem(IDC_pause)->EnableWindow(FALSE); GetDlgItem(IDC_stop)->EnableWindow(FALSE); GetDlgItem(IDC_del)->EnableWindow(FALSE); } void CMp3Dlg::Ondel() { UpdateData(TRUE); Mp3 mp3; int index=...

    MFC与IP多播技术的局域网聊天器网络课程设计

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); ...

    显示我的文档路径

    CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_...

Global site tag (gtag.js) - Google Analytics