高难度问题,只要您能解决,500分为谢!一次不够我可以分几次给。

foxmsdn 2002-06-07 01:34:48
我在做一个菜单特效方面的程序,出现了一些问题,详情如下:
我用VB菜单生成器生成了一些菜单,以备使用。然后我在自己的程序下了一个钩子,打算截获菜单显示时创建的窗体,将它们子类掉。
然而事与愿违,并不是所有的菜单弹出的时候都有窗体被创建。我写了一段程序跟踪了一下,发现有时菜单使用的是一个句柄为65554的窗体,而且这个窗体是在系统中一直存在的。
...全文
38 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
foxmsdn 2002-06-08
  • 打赏
  • 举报
回复
我想处理的就是包括影子效果在内的一些特效。
GLAY 2002-06-08
  • 打赏
  • 举报
回复
我已成功用VB做出和Office XP的菜单几乎一样效果的菜单了,
是用窗体做的,但因技术问题乳没有影子效果……
解决了包括文字与菜单接合的问题……
有意Call : mort@163.net
Oicq: 49341049
foxmsdn 2002-06-08
  • 打赏
  • 举报
回复
其实office的菜单和ActiveBar控件的原理一样,它们是菜单,但不是从属于主窗体的,所以从主窗体中截获不了WM_MENUSELECT等消息,而且什么是系统菜单这个问题其实本身就很模糊。都是在一个含有WS_POPUP类型的窗体中实现的。我不用VB窗体做的原因是占用的资源较大。如果真的需要,还不如用CreateWindowEx自己建一个好些。
foxmsdn 2002-06-08
  • 打赏
  • 举报
回复
TO zyl910(910:分儿,我来了!)
谢谢你的关心,可惜没有完成我的要求,所以500分就不能给了,小给70,不要嫌少呀!
foxmsdn 2002-06-08
  • 打赏
  • 举报
回复
骗你们干什么,打开SPY++,点查找按钮,在文本框中输入10012(65554的十六进制),它会给你一些有关提示的,但是很模糊。
我已经搞定这个问题了。感兴趣的可以和我交流一下。谢谢大家的关心。我也非常开心,正在散分。
Speedies 2002-06-08
  • 打赏
  • 举报
回复
句柄为65554的窗体?
好像最大只能65536嘛
zyl910 2002-06-08
  • 打赏
  • 举报
回复
1.Office XP的菜单是菜单,这我跟过的。
====================================================================
你根据什么判断它是菜单的

我以前在VC区看过一篇关于 Office 2000的菜单是不是菜单 的帖子,后来根据它没有WM_MENUSELECT等菜单消息而认定它不是用系统的菜单
我觉得Office XP的菜单所用的技术应该和Office 2000的差不多

而且Office XP是MS出的、绝对不是VB写的
不可能像VB做的模拟菜单一样 用Form数组
它肯定是用CreateWindow(或CreateWindowEx)创建的窗体
为了方便,它应该会用系统的菜单窗体的类名

同时为了使其看起来像一个菜单
它会用 跟系统的菜单窗体一样的窗体属性
要不然会像http://www.dapha.net/vb/list.asp?id=748的,“菜单”弹出来后主窗体的标题会变灰(可以通过修改窗体属性来解决)



2.你如果想做半透明的菜单,就要解决我的问题。因为只有知道每一个菜单所用窗体的创建,才能给每一个窗体设置WM_EX_TRANSPARENT属性,否则用函数自己画的话效率太差了。
====================================================================
WM_EX_TRANSPARENT是全透明
不好

对于图像的半透明合并
可以直接对DIB位图数据的内存进行操作
这样很快的

现在最关键的是GetMenuItemRect取得的坐标不对




顺便问一下,知道消息482(16进制是1E2)是什么含义吗?我的资料里查不出。
====================================================================
我也查不到
NaZiChong 2002-06-08
  • 打赏
  • 举报
回复
xp的菜单是windows菜单至于如何才能写出这样的效果在vb里如果不用窗体是很困难的(据说vb 7.0很简单)但是在vc里做还是简单的,如果需要这方面的帮助可以联系我.
foxmsdn 2002-06-07
  • 打赏
  • 举报
回复
顺便问一下,知道消息482(16进制是1E2)是什么含义吗?我的资料里查不出。
foxmsdn 2002-06-07
  • 打赏
  • 举报
回复
TO zyl910(910:分儿,我来了!)
1.Office XP的菜单是菜单,这我跟过的。
2.你如果想做半透明的菜单,就要解决我的问题。因为只有知道每一个菜单所用窗体的创建,才能给每一个窗体设置WM_EX_TRANSPARENT属性,否则用函数自己画的话效率太差了。
zyl910 2002-06-07
  • 打赏
  • 举报
回复
我也有个问题
http://www.csdn.net/expert/topic/777/777552.xml?temp=.6264917
不知道你会不会
帮我看看好吗?
zyl910 2002-06-07
  • 打赏
  • 举报
回复
估计全世界还没有其他人想到这种方法

只有问Bill了

顺便说一下
Office XP的菜单不是菜单
是用窗体模拟的
foxmsdn 2002-06-07
  • 打赏
  • 举报
回复
TO zyl910(910:分儿,我来了!)
我不是想做xp菜单。我只是要搞需要65554这个窗体的一些详细资料。或者避过它的方法,我看了你的两个程序,由于我机器上现在的65554这个窗体的样式已经被我改变,所以你的程序也跟着出了一些莫名其妙的问题,

qq:38339658,可以的话上来好好聊聊。
foxmsdn 2002-06-07
  • 打赏
  • 举报
回复
TO zyl910(910:分儿,我来了!)
自绘制我也可以,我是想改变菜单所在窗体的效果,我见了网上很多所谓的XP菜单,但XP菜单最重要的一条(平面)都没有实现,怎么叫XP菜单呢?
zyl910 2002-06-07
  • 打赏
  • 举报
回复
最好还是用窗体模拟菜单

http://www.dapha.net/vb/list.asp?id=748
XP下拉菜单(影子效果)
zyl910 2002-06-07
  • 打赏
  • 举报
回复
对不起
看错提了
foxmsdn 2002-06-07
  • 打赏
  • 举报
回复
不好意思,还没有写完就按错键,发了出去。我现在接着说。

65554到底是什么了,我用SPY++得到了一些答案。您也可以了解一下。

我的问题是。
1.怎么样可以使我的窗体上的菜单不是用65554这个窗体。因为我在子类它之后经常出现一些莫名其妙的死机,影响程序的调试。


说明,您可以试着改变65554这个窗体的样式,然后在记事本中看一下改变后的效果。
zyl910 2002-06-07
  • 打赏
  • 举报
回复
我编的自画菜单:

http://go6.163.com/910grtd/vb/wdzp/DrawMenu-S.htm(有注释!特地为想学自画菜单的人写的)
http://go6.163.com/910grtd/vb/wdzp/CoolGUI.htm(效果比较好,但没有注释)

7,763

社区成员

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

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