访问菜单API的问题?(抱歉,分用完了,无法给分)在线等待,急急急急!!!!

LLeezhiling 2002-11-22 10:33:49
在模板中:
Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, _
ByVal nPos As Long) As Long

Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, _
ByVal nPos As Long) As Long

Public Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" _
(ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, _
lpMenuItemInfo As MENUITEMINFO) As Long

Public 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

窗口文件为:
Private Sub Form_Load()
Dim hMenu, hSubMenu, HIId, hMII As Long
Dim lpMII As MENUITEMINFO

hMenu = GetMenu(Me.hwnd)
hSubMenu = GetSubMenu(hMenu, 1)

hMII = GetMenuItemInfo(hMenu, HIId, 0, lpMII)
......
End Sub
为什么hMII返回的值为0,即GetMenuItemInfo访问不成功,无法得到菜单的信息,请问错在哪里了,应该如何解决?
多谢!
...全文
63 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyl910 2002-11-23
  • 打赏
  • 举报
回复
设置cbSize为结构的大小
设置fMask为欲读取的项目的掩码
kevin6 2002-11-23
  • 打赏
  • 举报
回复
评论:Visual Basic宣告死亡

--------------------------------------------------------------------------------

http://www.sina.com.cn 2001年04月04日 09:49 eNet硅谷动力

  【eNews专稿】很抱歉把这个标题放上这个字眼。毕竟这句话要对全世界700多万的VB程序员负责,其实我也是一名VB的学习者和拥护者。但是事实就是如此,使用人口多,简单容易上手的微软开发工具Visual Basic,即将面临宣告死亡的命运。

  或许您会说这是反微软基本教义派在造谣,现在VB的版本是VB 6.0,再来不是有VB 7.0,就是所谓的Visual Basic.NET吗?可是等大家拿到这个新版的VB.NET,或是去要一份Be
ta版来看看,现在熟悉VB的人,可以发现己根本无从下手,因为从基本语法开始已经全都和以前不一样了。目前只熟悉VB的朋友必须重新学起,反倒是会Java/C++的朋友会发现新的VB似曾相识,因为VB已经改头换面成为物件导向语言,原来那个比尔盖茨的最爱,从DOS时代就伴随微软使用者成长的BASIC语言已经不复存在。

  先不论这个改变对既有使用者的影响,这应该是一个好的改变。原有的VB优点是初学者容易上手,很简单就可以拼拼凑凑兜出一个可以执行的小程式,对于入门者或是功能简单的应用程序来说,实在是个好工具。但是面对目前网络时代这些企业级的系统开发,旧有的VB实在不胜负荷。很多人会写VB程序,但是如果没有严谨的专案管理和好的写程序习惯,很容易大家写出一堆很难维护的VB程序码。反观Java或C++,由于规定严谨,虽然因此造成入门学习障碍比VB高,但是一旦领进门,按照物件导向分析/设计的脚步一路走来,就会写出漂亮而且易读、易管理的程序。所以微软这次趁推出.NET的机会,将旧有的VB一次大翻修,正式跨入物件导向的领域,在技术成长上面来看应该是正确的方向。

  只不过微软每次有新版本,总是不顾旧版使用者的需求。现在VB6.0到VB.NET全面大翻修,在微软网站上宣称要推出〝VB.NET Upgrade Tool〞用来帮助升级VB 6.0的旧程序,不过从上面的功能介绍看来它只做了五件事:

  1.变数到物件的型别转换

  2.长短整数型态的转换

  3.移除参数预设的性质

  4.增加阵列范围定义限制

  5.将VB 6.0 Form转换成新的Windows Form

  但是将旧的VB 6.0程序全盘转为VB.NET,岂是这五件事就可以做好的。于是微软又有另一份长达26页的文件〝Preparing Your Visual Basic 6.0 Applications for the Upgrade to Visual Basic.NET〞,洋洋洒洒列出一串在写VB 6.0程序时的注意事项,只有这一串条件都符合了,才有可能用上述的升级工具来作转换。面对目前成千上万行VB程序,各位VB程序设计师,请大家自求多福。重新改写也许是一种活路,但是如果要重新改写,为什么不干脆用Java?反正VB.NET也会是物件导向语言,微软另一个神奇宝贝C#则是根本抄袭自Java和C++,在VB.NET尚未正式上市之前,我倒是建议大家来学Java。J2EE会是比.NET更完备,而且是目前已经成熟的企业运算架构。如果到时候.NET全部正式推出,您还是喜欢被微软拥抱的感觉,先会了Java再接触C#或是VB.NET,也许会觉得得心应手、游刃有余。

  总之,旧的Visual Basic宣告死亡。对于微软号称全世界共有七百万以上个VB程序设计师们,请不要把希望放在这个〝VB.NET Upgrade Tool〞上面,此举无异是坐以待毙。在java大行其道的现在,与其苦等新版的VB.NET,不如现在开始学Java。看看正统的物件导向程序要怎么写,了解微软为什么要全面翻修见贤思齐,将来不管是写Java或是VB.NET程序都没有问题,保证学习所花的工夫不会白费。去Yahoo上查一下,看看编程语言一项,VB的支持着越来越少,而Java的则是呈几何级数上升。“真正精通Java的程序员,才能体会道编程的真谛,才是真正的程序员。”——Mephis。全世界的程序员,行动起来吧。

  微软推出JUMP专案,协助移植Java到.NET

  产品的命名学,其实这方面最厉害的就是微软。我常想在微软内部一定有个小组专门负责替产品取名字。之前微软要推出一套程序语言对抗Java,东西还不见踪影,就先宣布一个很酷的名字,就叫做COOL (Common Object-Oriented Language)。可是后来的发展就好比太监一样──下面没有了,COOL无疾而终,取而代之的就是现在见到不知所云的"C#"。现在又有一个具有响亮名称的产品推出,叫做JUMP,四各英文字母代表Java User Migration Path,缩写就是JUMP,实在让我深深佩服微软命名小组的巧思,产品好不好是另外一回事。

  这个JUMP,实际上就是要来对付Java的第一步。它的内容是要推出一套工具,帮助使用者把以前用Visual J++写的Java程序移植到未来的NET平台上。其中包含了自动将Java程序换为C#的工具,Visual Studio.NET和Java程序整合的工具,以及协助移植Java专案的咨询服务。不过,这些工具的价格未定,Beta版的推出日期预计是今年上半年,正式版要到下半年才会上市。

  这个JUMP专案的目的很清楚,就是要Java使用者不再用Java,转而采用微软的C#和NET。在微软网站上公布一份JUMP的FAQ,其中最后一个问题很有趣,它的问题是"这代表微软会支援Java平台吗?"微软的回答是"绝对不是。微软只支援Java这个程序语言,并且帮助开发者从Java平台转换到.NET平台。那些对Sun的Java解决方案有兴趣的客户,必须到其他地方去寻求支援。"

  微软的意思很清楚,这就是微软自始至终对Java的态度——只是一个程序语言,其他的J2SE、J2EE……,都是微软产品的竞争对手。对Sun和Java阵营来说,目前这个JUMP专案并不代表太大意义,因为如果是Java用户,谁还在使用内含旧版JDK1.1.4的Visual J++?况且JUMP之中所谓的自动转换Java程序到C#,听起来好像十分强大,实际上是个笑话,因为C#根本就是抄袭自Java,基本语法根本一样,只要用最简单的字串取代/置换功能就可以了,哪需要什么特殊工具?这哪需要什么Beta上半年上市,正式版下半年上市,根本马上就可以推出,Word或其他文字编辑器就有字串取代功能了。

  所以微软如果真的在乎自己使用者的需求,真正需要的不是JUMP,而是对于其他语言的转换工具(如Visual C++、COBOL…….)。现在抢先宣布JUMP,只是为了打击Java,似乎这才是第一要务。可怜的微软使用者,大家准备面对.NET排山倒海的技术文件,以及可预期的改版、升级问题吧!(杨磊)

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧