关于菜单的若干问题,求指点。

永夜星空 2011-07-12 05:13:21
我想做个类似于Windows开始菜单功能的小软件,主要是在托盘位置弹出一个动态创建的菜单,另外还有一个类似于《360桌面》一样的界面(但没那么漂亮)。
首先来看看Windows的开始菜单



我自己写的程序是如下的样式:



我主要有两点难题没法解决。
1.要在菜单上显示图标:
光是显示个图标这没多大难处,但网上也有很多列子。可问题是这些图表从哪里获取呢?
虽然说大部分图标都是SHELL32.dll里的,但是我必须得在里面一个个去提取图标吗?而且毕竟还有很多菜单项目的图标是在对应的程序文件里的,甚至还有很多文件的图标是随意指定的。再者如果要分情况一个个去提取图标似乎太复杂了。
windows的桌面管理进程explorer.exe是怎么做的呢?

2.在开始菜单的某个项目上点击鼠标右键会弹出新的菜单,原来的菜单也不关闭。这是种什么原理呢?是响应某个消息吗?
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
永夜星空 2011-07-15
  • 打赏
  • 举报
回复
最终做出了这种菜单,也不想搞些花花绿绿的菜单了
永夜星空 2011-07-15
  • 打赏
  • 举报
回复
摆弄了一天终于能自绘菜单了。窗口菜单需要窗口自己的MeasureItem,DrawItem里绘制,右键菜单要在派生类里这两个函数里绘制。网上教程似乎都没点明这一点。做的好辛苦,自绘控件真不是件人做的事。



MeasureItem中菜单宽度自适应文字的关键并不是获得一个DC,而是获取菜单字体。获取字体使用函数:SystemParametersInfo(SPI_GETNONCLIENTMETRICS,....
zyrr159487 2011-07-14
  • 打赏
  • 举报
回复
或则VS2008 + SP1补丁也可,微软在VS2008后就加入了BCG皮肤库
永夜星空 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zyrr159487 的回复:]
在VS2010中新建对话框风格,每个菜单都会带着工具栏的图标
[/Quote]
我的VS2010总是出错,所以还没见识过这个功能
zyrr159487 2011-07-14
  • 打赏
  • 举报
回复
在VS2010中新建对话框风格,每个菜单都会带着工具栏的图标
zyrr159487 2011-07-14
  • 打赏
  • 举报
回复
厉害啊,当初我也一直想做这个来着,也是卡到这里了
永夜星空 2011-07-14
  • 打赏
  • 举报
回复
调试了下Explorer发现还真不是Track出来的菜单,开始菜单的程序菜单原来是个工具条。看样子得另想办法了。
永夜星空 2011-07-14
  • 打赏
  • 举报
回复
SHGetFileInfo真的很好很强大。



SHFILEINFO sfi;
HICON icon_large,icon_small;
if(SUCCEEDED(::SHGetFileInfo(path,0,&sfi,sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_LARGEICON)))
{
icon_large=sfi.hIcon;
}

if(SUCCEEDED(::SHGetFileInfo(path,0,&sfi,sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_SMALLICON)))
{
icon_small=sfi.hIcon;
}
ndy_w 2011-07-12
  • 打赏
  • 举报
回复
2 我认为那个不是Track出来的menu。还能拖item呢!自己做吧!
ndy_w 2011-07-12
  • 打赏
  • 举报
回复
1 http://www.vckbase.com/english/code/listview/attach_system_image_list.shtml.htm

15,979

社区成员

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

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