to _TMG_(Alan): 谢谢关心,网友b_wind已经告诉了我这个Bug.本人才疏学浅让大见笑了。我正在修改它们(还有一些Bug,比如在windowsxp下菜单阴影异常等),谢谢你的关心。to vbangle(vbangle)、NowCan(能量、激情、雨水、彩虹——雷雨云): 不要意思,由于工作比较忙,没有时间搞主页,现在在和一个朋友商量,希望不久的将来会在网上安个家。to 大家: 本人才疏学浅,有没有水平高的帮一下手。我希望能约到几个人一起搞,把功能搞全一些。如xp的工具条等,一起做出来。 再次感谢大家的关心。
To 大家: 其实程序主要有几点比较特别,我在这里说一下: 1.利用Hook截获每一个新生成的窗体(其实Windows的菜单都使用一个类名为"#32768"的窗体完成的),然后将它们的类型设置为平面的。需要说明的是如果需要修改的是窗体上的菜单而不是PopupMenu,那么Windows有时并不创建新的窗体,而是直接使用一个句柄固定为65554的窗体,这是一个很奇怪的窗体,处理它的时候要小心,如果想了解具体的情况,可以联系我。2.绘制阴影。需要计算这个菜单用到的窗体会在什么地方出现。然后利用屏幕上的原始图案来生成阴影。3.处理边框。Windows的菜单是重叠的(有4个像素的重叠),而xp菜单没有,所以需要处理这些重叠的地方,使其看起来没有重叠。还有一些问题有待解决: 1.过长的菜单,如果一个菜单拥有过多的项,应该像xp菜单一项在上下方使用箭头来滚动。 2.优先级别,xp的菜单有优先级别,对于不常用的菜单会隐藏,在单击最下方的箭头后再出现。这也称为个性化菜单。 3.菜单在运行时的自定义。 这些功能在ActiveBar中完成的很好,但在vbsmart的菜单中没有支持。我打算把它们做出来。希望有高手来指点我一下。本人感激不尽。
to _TMG_(Alan): 右键Bug的修正:找到类TExtendMenu中方法ShowPopupMenu的行: lngFlags = TPM_RETURNCMD 将其改为 lngFlags = TPM_RETURNCMD Or TPM_RIGHTBUTTON
to 大家: 真惭愧,我犯了一个致命的错误!在我一次次的跟踪了解之后发现,所谓的Xp菜单应该不是真正的菜单。它是由一个类名为msoCommandBarPopup的窗体和两个类名为msoCommandBarShadow的窗体实现的。实现的步骤我己经大体的了解。但有一个关键的问题搞不明白。就是一个类型为Layered的窗体,这种窗体是2000/xp新增加的,主要完成窗体半透明的操作。我只了解到这里,具体的使用方法我都不是很了解。不知道有没有人可以帮我一下。先谢谢了。问题在:http://www.csdn.net/expert/topic/881/881513.xml?temp=.7542841。我用100分谢你,不够的话我可以加。
Image1.Picture = LoadResPicture(101, vbResIcon)
[email protected]
子菜单的那一部分程序,可以参考zyl910的。
以下是调用例:
Dim hMenu as Long,hSubMenu as Long,MenuId as long
hMenu = GetMenu(me.hwnd) '获得该窗口菜单的句柄
hSubMenu = GetSubMenu(hMenu, 0) '取得第0个子菜单的hSubMenu(子句柄)
MenuId = GetMenuItemId(hSubMenu,1)'取得hSubMenu的第1个命令的MenuID
ModifyMenu hSubMenu,1,MF_BYPOSITION Or MF_STRING,MenuID,"HAHA"
'文字标题改为“HAHA”
Static Pic As Picture
Set Pic = LoadPicture("PicName.Bmp")
MenuID = GetMenuItem(hSubMenu, 2)
ModifyMenu hSubMenu,2,MF_BYPOSITION Or MF_BITMAP, MenuID, Pic.Handle
'祝好运
'有空的话,给我发一份:[email protected]
我就是在http://www.vbsmart.com的创意下写的菜单程序。部分技术是从那里了解到的。
贴Picture什么意思?在箭头上贴图???
顺便问一下,你做的XP菜单有没有阴影背影啊?? 就像2K和XP一样! ̄ ̄
把字体设为Webdings
再绘制字符“4”就行了
[email protected]
谢谢!!
[email protected]
看看 能不能用在我的程序中!我现在用一个VBSKIN.DLL做皮肤的,如果你的好用,就用你的了!谢谢了!
[email protected]
当然有阴影,不然怎么叫xpmenu.
to 大家:
想要源程序的请等星期一。因为我说了,还没有加热键支持,如果想先看看,可以到qq上找我。
谢!
真对不住,我星期六和星期日不上班,而我是在上班时才上qq的。所以...(qq时间:星期一至星期五,9:00-17:30,很高兴认识你)。
1. 连续两次鼠标右键, 位置不变, 再次在空白地区点右键, 出现非法错误
2. 在菜单上点击鼠标右键, 再次在空白地区点右键, 出现非法错误两个错误, 可能是一个原因
谢谢关心,网友b_wind已经告诉了我这个Bug.本人才疏学浅让大见笑了。我正在修改它们(还有一些Bug,比如在windowsxp下菜单阴影异常等),谢谢你的关心。to vbangle(vbangle)、NowCan(能量、激情、雨水、彩虹——雷雨云):
不要意思,由于工作比较忙,没有时间搞主页,现在在和一个朋友商量,希望不久的将来会在网上安个家。to 大家:
本人才疏学浅,有没有水平高的帮一下手。我希望能约到几个人一起搞,把功能搞全一些。如xp的工具条等,一起做出来。
再次感谢大家的关心。
其实程序主要有几点比较特别,我在这里说一下:
1.利用Hook截获每一个新生成的窗体(其实Windows的菜单都使用一个类名为"#32768"的窗体完成的),然后将它们的类型设置为平面的。需要说明的是如果需要修改的是窗体上的菜单而不是PopupMenu,那么Windows有时并不创建新的窗体,而是直接使用一个句柄固定为65554的窗体,这是一个很奇怪的窗体,处理它的时候要小心,如果想了解具体的情况,可以联系我。2.绘制阴影。需要计算这个菜单用到的窗体会在什么地方出现。然后利用屏幕上的原始图案来生成阴影。3.处理边框。Windows的菜单是重叠的(有4个像素的重叠),而xp菜单没有,所以需要处理这些重叠的地方,使其看起来没有重叠。还有一些问题有待解决:
1.过长的菜单,如果一个菜单拥有过多的项,应该像xp菜单一项在上下方使用箭头来滚动。
2.优先级别,xp的菜单有优先级别,对于不常用的菜单会隐藏,在单击最下方的箭头后再出现。这也称为个性化菜单。
3.菜单在运行时的自定义。
这些功能在ActiveBar中完成的很好,但在vbsmart的菜单中没有支持。我打算把它们做出来。希望有高手来指点我一下。本人感激不尽。
右键Bug的修正:找到类TExtendMenu中方法ShowPopupMenu的行:
lngFlags = TPM_RETURNCMD
将其改为
lngFlags = TPM_RETURNCMD Or TPM_RIGHTBUTTON
真惭愧,我犯了一个致命的错误!在我一次次的跟踪了解之后发现,所谓的Xp菜单应该不是真正的菜单。它是由一个类名为msoCommandBarPopup的窗体和两个类名为msoCommandBarShadow的窗体实现的。实现的步骤我己经大体的了解。但有一个关键的问题搞不明白。就是一个类型为Layered的窗体,这种窗体是2000/xp新增加的,主要完成窗体半透明的操作。我只了解到这里,具体的使用方法我都不是很了解。不知道有没有人可以帮我一下。先谢谢了。问题在:http://www.csdn.net/expert/topic/881/881513.xml?temp=.7542841。我用100分谢你,不够的话我可以加。
2. 可不可以 emiCheckBox 样式的菜单项也有自己的图标, 如果有图标的画, 就把图标画一个框, 没有就用打勾