CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

怎样通过API为MDI主窗口或其子窗口添加主菜单?

楼主vbangle(VsNetMenu 菜单工具条控件 http://vbangle.5ivb.net/)2006-03-09 23:32:14 在 VB / API 提问

参照这个代码可以较容易为SDI窗口使用AP唁菜单:http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=49583&lngWId=1  
   
  我想问的是通过API为MDI主窗口或其子窗口添加主菜单? 问题点数:99、回复次数:8Top

1 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-10 09:39:31 得分 55

 
  Option   Explicit  
   
  Private   Const   MF_POPUP   =   &H10&  
  Private   Const   MF_STRING   =   &H0&  
   
  Private   Const   MF_SEPARATOR   =   &H800&  
  Private   Const   MF_BYPOSITION   =   &H400&  
   
  Private   Declare   Function   CreateMenu   Lib   "user32"   ()   As   Long  
  Private   Declare   Function   CreatePopupMenu   Lib   "user32"   ()   As   Long  
  Private   Declare   Function   InsertMenu   Lib   "user32"   Alias   "InsertMenuA"   (ByVal   hMenu   As   Long,   ByVal   nPosition   As   Long,   ByVal   wFlags   As   Long,   ByVal   wIDNewItem   As   Long,   ByVal   lpNewItem   As   Any)   As   Long  
  Private   Declare   Function   ModifyMenu   Lib   "user32"   Alias   "ModifyMenuA"   (ByVal   hMenu   As   Long,   ByVal   nPosition   As   Long,   ByVal   wFlags   As   Long,   ByVal   wIDNewItem   As   Long,   ByVal   lpString   As   Any)   As   Long  
   
  Private   Declare   Function   SetMenu   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   hMenu   As   Long)   As   Long  
  Private   Declare   Function   DrawMenuBar   Lib   "user32"   (ByVal   hwnd   As   Long)   As   Long  
   
  Private   Declare   Function   GetSubMenu   Lib   "user32"   (ByVal   hMenu   As   Long,   ByVal   nPos   As   Long)   As   Long  
   
  Private   Declare   Function   GetMenu   Lib   "user32"   (ByVal   hwnd   As   Long)   As   Long  
   
  Private   Declare   Function   FindWindow   Lib   "user32"   Alias   "FindWindowA"   (ByVal   lpClassName   As   String,   ByVal   lpWindowName   As   String)   As   Long  
   
  Dim   hMenu   As   Long  
  Dim   hFileSubMenu   As   Long  
  Dim   hHelpSubMenu   As   Long  
   
  Private   Sub   cmdCreate_Click()  
          hMenu   =   GetMenu(MDIForm1.hwnd)  
          hFileSubMenu   =   CreatePopupMenu()  
          hHelpSubMenu   =   CreatePopupMenu()  
           
          InsertMenu   hMenu,   0,   MF_BYPOSITION,   0,   "&File"  
          InsertMenu   hMenu,   1,   MF_BYPOSITION,   1,   "&Edit"  
          InsertMenu   hMenu,   2,   MF_BYPOSITION,   2,   "&View"  
          InsertMenu   hMenu,   3,   MF_BYPOSITION,   3,   "&Help"  
           
          ModifyMenu   hMenu,   0,   MF_POPUP,   hFileSubMenu,   "&File"  
          hFileSubMenu   =   GetSubMenu(hMenu,   0)  
   
          InsertMenu   hFileSubMenu,   0,   MF_BYPOSITION,   1001,   "&New"  
          InsertMenu   hFileSubMenu,   1,   MF_BYPOSITION   Or   MF_SEPARATOR,   1002,   ""  
          InsertMenu   hFileSubMenu,   2,   MF_BYPOSITION,   1003,   "&Exit"  
           
          ModifyMenu   hMenu,   3,   MF_POPUP,   hHelpSubMenu,   "&Help"  
          hHelpSubMenu   =   GetSubMenu(hMenu,   3)  
          InsertMenu   hHelpSubMenu,   0,   MF_BYPOSITION,   4001,   "&About..."  
          InsertMenu   hHelpSubMenu,   1,   MF_BYPOSITION   Or   MF_SEPARATOR,   4002,   ""  
          InsertMenu   hHelpSubMenu,   2,   MF_BYPOSITION,   4003,   "&Help"  
           
          SetMenu   MDIForm1.hwnd,   hMenu  
          DrawMenuBar   MDIForm1.hwnd  
          MDIForm1.Show  
  End   Sub  
  '----------------------------------------------------  
  '使用子类化   ,   拦截WM_COMMAND消息,   并通过ID来判断是哪个菜单被点(ID在你用API添加时可以自己确定)  
  Top

2 楼Modest(塞北雪貂)·(偶最欣赏楼主的分)回复于 2006-03-10 09:42:16 得分 7

http://www.ddvip.net/program/C++/index6/29.htmTop

3 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-10 10:45:57 得分 7

我建议你研究一下WM_MDISETMENU这条消息Top

4 楼vbangle(VsNetMenu 菜单工具条控件 http://vbangle.5ivb.net/)回复于 2006-03-10 18:02:10 得分 0

对MDI添加主菜单用上面代码可以,我也实现了,  
  难点在为其子窗口建立主菜单搞不定Top

5 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-13 14:33:55 得分 15

MSDN:  
   
  在   MDI   应用程序中,每一个子窗体的菜单都显示在   MDI   窗体上,而不是在子窗体本身。当子窗体有焦点时,该子窗体的菜单(如果有的话)就代替菜单栏上的   MDI   窗体的菜单。如果没有可见的子窗体,或者如果带有焦点的子窗体没有菜单,则显示   MDI   窗体的菜单  
  Top

6 楼vbangle(VsNetMenu 菜单工具条控件 http://vbangle.5ivb.net/)回复于 2006-03-17 18:15:06 得分 0

上面的理解,我的问题是使用API建立MDI子窗口的主菜单Top

7 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-17 20:50:52 得分 15

好象不行,即使建立了子窗口的主菜单,在显示子窗体的时候,它上面也不显示菜单,而是显示到MDI主窗体上去Top

8 楼vbangle(VsNetMenu 菜单工具条控件 http://vbangle.5ivb.net/)回复于 2006-03-18 06:54:05 得分 0

我不讨论MDI子窗口的主菜单是不是显示到MDI主窗口上,我只要这个主菜单是其子窗口的,验证方式,MDI没有打开子窗口时有一个主菜单,打开子窗口时又有一个主菜单,这2个是不同时的,而这种主菜单是通过API实现的,现在征求的难点是打开子窗口时使用API建立的主菜单代码写法,MDI没有打开子窗口时主菜单上面的代码已经可以Top

相关问题

  • 在MDI窗口中打开子窗口,如何让子窗口的菜单覆盖MDI窗口菜单
  • 在MDI窗口中,子窗口如何访问主窗口的菜单?
  • 怎么让MDI父窗口和子窗口的菜单合并???
  • 怎么让MDI父窗口和子窗口的菜单合并???
  • Mdi子窗口主菜单问题[C#]
  • 能否在MDI窗口的菜单中调用子窗口的按钮事件?
  • MDI主窗口无主菜单,子窗口最大化的问题
  • 打开Sheet窗口时,如何让Sheet窗口的菜单插入到Mdi的菜单中??
  • 如何激活自定义的MDI主祯窗口菜单
  • 非MDI窗口的菜单合并问题。

关键词

  • 代码
  • api
  • 菜单
  • 窗体
  • mdi
  • longprivate
  • 主
  • 添加
  • byval
  • 打开子窗口时

得分解答快速导航

  • 帖主:vbangle
  • faysky2
  • Modest
  • rainstormmaster
  • faysky2
  • faysky2

相关链接

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

广告也精彩

反馈

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