菜单的内容我但不知道怎么改,不过可以截获这些消息,是WM_SYSCOMMAND,你再检查一下它的wParam参数有WM_CLOSE、SC_CONTEXTHELP、SC_DEFAULT等(你可以去MSDN里查)

解决方案 »

  1.   

    这个想法不错!我用SPY++看了一下,好像是一个系统自定义的消息(spy++不认识它,说是unknown),消息值(message)为0x0313,wparam为NULL,lparam好像是鼠标位置(高字为纵坐标,低字为横坐标,比如:0x02ed0138,刚好是(312,749)我的显示器分辨率是1024*768,它的纵坐标总在750左右转悠,可见我的假设很合理)。你试试能不能得到这个消息。注:我的系统是Windows2000,如果你的系统和我的不一样,最好自已查一下,消息值有可能不一样。
      

  2.   

    哈哈,其实很easy的 (如果我没有理解错你问的问题的话)
    给你一段用api写的代码其中hWnd为主窗体的句柄  HMENU SysMenu;
      // to modify the System Menu ! Cool!
      SysMenu = ::GetSystemMenu(hWnd,False);
      //删除原来的 
      DeleteMenu(SysMenu,SC_MOVE,MF_BYCOMMAND);
      DeleteMenu(SysMenu,SC_MAXIMIZE,MF_BYCOMMAND);
      DeleteMenu(SysMenu,SC_MINIMIZE,MF_BYCOMMAND);
      DeleteMenu(SysMenu,SC_SIZE,MF_BYCOMMAND);
      DeleteMenu(SysMenu,SC_RESTORE,MF_BYCOMMAND);
      DeleteMenu(SysMenu,0,MF_BYPOSITION);
      //添加自己的
      //IDM_ABOUT,IDM_OPTION为常数,当点击这个菜单条时会向程序发送WM_COMMAND消息
      //在你的程序中处理好这两个command消息即可
      InsertMenu(SysMenu,1,MF_STRING or MF_BYPOSITION,IDM_ABOUT,'About');
      InsertMenu(SysMenu,1,MF_STRING or MF_BYPOSITION,IDM_OPTION,'Option');
      InsertMenu(SysMenu,1,MF_SEPARATOR or MF_BYPOSITION,0,'');具体的函数说明请参考msdn上的帮助文档
      

  3.   

    消息是mw_syscommand
    得到菜单用::getsystemmenu()具体参数见 msdn
      

  4.   

    这个Unknown消息真的行啊
    我自定义了一个
    居然能够用。