CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

form表单的问题

楼主jamsband(东子)2002-04-15 11:31:53 在 VB / 基础类 提问

一个form中我允许有最小化和最大化按钮,但是我要禁掉关闭按钮,就是表单右上角的那个,请问该怎么做呀 问题点数:20、回复次数:8Top

1 楼nebular(星云)回复于 2002-04-15 11:42:44 得分 5

最简单的方法,把窗体的CONTROLBOX设为FALSETop

2 楼water_j(随心所欲)回复于 2002-04-15 11:45:29 得分 2

楼上说的没错!Top

3 楼jamsband(东子)回复于 2002-04-15 11:47:20 得分 0

不行,要有那个最小化和最大化的呀,就是不要关闭的那个,还有其他办法吗Top

4 楼zhongminsheng(小生)回复于 2002-04-15 11:52:35 得分 1

Private   Sub   Form_Unload(Cancel   As   Integer)  
              cancel=true  
  End   SubTop

5 楼nebular(星云)回复于 2002-04-15 11:54:06 得分 6

这样就要使用API了。  
     Private   Declare   Function   GetSystemMenu   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   bRevert   As   Long)   As   Long  
   
     Private   Declare   Function   RemoveMenu   Lib   "user32"   (ByVal   hMenu   As   Long,   ByVal   nPosition   As   Long,   ByVal   wFlags   As   Long)   As   Long  
   
    其中GetSystemMenu参数如下表:  
   
  hwnd   Long,   系统菜单所在窗口的句柄  
     
  bRevert   Long,如设为TRUE,表示恢复原始的系统菜单  
     
  返回值   Long,如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单)    
   
    而RemoveMenu参数如下表:  
   
  hMenu   Long,菜单的句柄  
     
  nPosition   Long,欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)  
     
  wFlags   Long,常数MF_BYCOMMAND=&H0&或MF_BYPOSITION=&H400&,取决于nPosition参数    
  返回值   Long,非零表示成功,零表示失败。  
   
  使用方法如下  
     MyMenu   =   GetSystemMenu(Me.hwnd,0)      
     RemoveMenu   MyMenu,   &HF060,   MF_BYCOMMANDTop

6 楼eaglezhao(笨小子)回复于 2002-04-15 11:54:11 得分 6

实际上右上角的三个按钮和系统菜单里(就是坐上角点击图标出来得菜单)的菜单是一致的,你可以使用Api函数将菜单中的关闭设置为不可用即可,代码如下:  
  Const   xMenuID   =   10&  
   
  Private   Sub   Command1_Click()  
          Dim   hMenu   As   Long,   MII   As   MENUITEMINFO  
           
          hMenu   =   GetSystemMenu(Me.hWnd,   0)  
           
          MII.cbSize   =   Len(MII)  
          MII.dwTypeData   =   String(80,   0)  
          MII.cch   =   Len(MII.dwTypeData)  
          MII.fMask   =   MIIM_STATE  
          MII.wID   =   SC_CLOSE  
           
          GetMenuItemInfo   hMenu,   SC_CLOSE,   False,   MII  
           
          MII.wID   =   xMenuID  
          MII.fMask   =   MIIM_ID  
          SetMenuItemInfo   hMenu,   SC_CLOSE,   False,   MII  
           
          MII.fState   =   MII.fState   Or   MFS_GRAYED  
          MII.fMask   =   MIIM_STATE  
          SetMenuItemInfo   hMenu,   MII.wID,   False,   MII  
           
          SendMessage   Me.hWnd,   WM_NCACTIVATE,   True,   ByVal   0&  
  End   Sub  
   
  所用到的API声明为:  
  Public   Const   WM_NCACTIVATE   =   &H86  
  Public   Const   SC_CLOSE   =   &HF060&  
   
  Public   Const   MIIM_STATE   =   &H1&  
  Public   Const   MIIM_ID   =   &H2&  
   
  Public   Const   MFS_GRAYED   =   &H3&  
  Public   Const   MFS_CHECKED   =   &H8&  
   
  Type   MENUITEMINFO  
          cbSize   As   Long  
          fMask   As   Long  
          fType   As   Long  
          fState   As   Long  
          wID   As   Long  
          hSubMenu   As   Long  
          hbmpChecked   As   Long  
          hbmpUnchecked   As   Long  
          dwItemData   As   Long  
          dwTypeData   As   String  
          cch   As   Long  
  End   Type  
  Declare   Function   GetSystemMenu   Lib   "user32"   (ByVal   hWnd   As   Long,   ByVal   bRevert   As   Long)   As   Long  
  Declare   Function   GetMenuItemInfo   Lib   "user32"   Alias   "GetMenuItemInfoA"   (ByVal   hMenu   As   Long,   ByVal   un   As   Long,   ByVal   b   As   Boolean,   lpMenuItemInfo   As   MENUITEMINFO)   As   Long  
  Declare   Function   SetMenuItemInfo   Lib   "user32"   Alias   "SetMenuItemInfoA"   (ByVal   hMenu   As   Long,   ByVal   un   As   Long,   ByVal   bool   As   Boolean,   lpcMenuItemInfo   As   MENUITEMINFO)   As   Long  
  Declare   Function   SendMessage   Lib   "user32"   Alias   "SendMessageA"   (ByVal   hWnd   As   Long,   ByVal   wMsg   As   Long,   ByVal   wParam   As   Long,   lParam   As   Any)   As   Long  
  Top

7 楼jamsband(东子)回复于 2002-04-15 11:55:50 得分 0

可不可以帮我实现这个功能,不要给我写这么长呀,我看不懂~_~,嘻嘻,多谢Top

8 楼jamsband(东子)回复于 2002-04-15 13:03:57 得分 0

结束吧,谢谢各位Top

相关问题

  • 关于Form表单
  • 求教form(表单)属性
  • FORM表单中回车键的问题?
  • 怎样陷藏FORM表单中的TEXTFIELD??
  • 使用表单Form上载文件?
  • **form表单中的action指向问题**
  • 关于form表单高度的问题
  • form表单能不能嵌套?
  • 表单form为什么不能提交?
  • FORM表单提交后怎样清空表单中原有的内容。

关键词

  • 系统
  • me
  • mii
  • 菜单
  • 句柄
  • brevert
  • hmenu
  • getsystemmenu
  • 参数
  • miim

得分解答快速导航

  • 帖主:jamsband
  • nebular
  • water_j
  • zhongminsheng
  • nebular
  • eaglezhao

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo