VS这样的菜单是如何做的

huanglin03 2015-04-08 08:38:13


另外问个问题:
如果想自己从CWND写菜单------弹出式菜单部分,应该用屏幕DC是吧,
另外:菜单的自绘问题虽然网上遍地都是,但那是继承CMenu然后自绘的,做不到像上面VS那样的,而且使用系统菜单最大的局限就是菜单栏必定要占一整行,即使没有把那一整行用,右边空着,也不让你去用,想要用还得另外处理非客户区的自绘,所以综合起来考虑还是想自己拿DC来做算了,问题就两个:是屏幕DC吗?弹出式菜单是窗口吗?否则的话菜单怎么可能跑到主窗口外部的?看下图


说那是不是窗口,我用SPY++没有办法检测到,但我用QQ的截图可以捕获到,但还是不确定,请大虾赐教!!
...全文
843 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yun__ 2015-06-02
  • 打赏
  • 举报
回复
我只笑笑不说话.那么牛逼的楼主还来论坛干啥,来炫自己技术的么
gergul 2015-05-29
  • 打赏
  • 举报
回复
引用 15 楼 Sandrer 的回复:
[quote=引用 14 楼 bug1190 的回复:] [quote=引用 13 楼 Sandrer 的回复:] 搜索 MF_OWNERDRAW 多的是代码给你参考
你也别回了,你跟楼上的一样垃圾,你都没看看我要问的是什么[/quote] 年轻人别动不动发飙, 不懂就乱飙那是很不礼貌的 以为自己什么都懂, 别人给的意见不去考虑测试是否有效就先否定 去测试了达不到别人的效果就说别人的东西是乱说, 而不去继续去探讨如何达到想要的效果 菜单栏你可以自己用toolbar自己做 不想用toolbar的可以自己继承个cwnd来做, 拦截相应鼠标消息和键盘消息就可以做到类似菜单栏的样子 剩余的空白部分你可以自己控制用途 至于菜单, 别瞎折腾了, 就按我说的方法自绘可以帮你省下很多时间 你认为我说的不正确那是因为你自己没有去好好的研究, 起码我自己就做出了所需的菜单栏+自绘菜单 别人给了你答案你自己连试都没试就去否认, 你这么厉害还来这里发问干什么, 不懂来发问还自认为自己很懂的样子, 回自己家闭门造车算了 我记得你上一个乱发飙的帖子, 是认为所有看到的"个体"的东西都是窗口, 你倒好, 教会你之后来这里"表现"来了 现在明确告诉你, 菜单就是一个窗口 用你自己的智商来研究下面的效果吧 [/quote] 对于楼主这样的人,我知道也不会告诉他的,一个没有礼貌的家伙。
psbeond 2015-05-28
  • 打赏
  • 举报
回复
1. CMenu出来的菜单,也肯定是窗口,有窗口句柄的HWND,并且可以通过某种方法拿到句柄,进而进一步的操作,比如你可以为CMenu弹出来的菜单中,创建一个子按钮都是可以的。Spy++是无法捕获到CMenu这类弹出式窗口的,因为一旦它们失去焦点,就销毁或隐藏了。如果你需要捕获菜单窗口,可以向我索要我们公司的一个Spy软件, QQ:1584793892。 2. 你贴的这个菜单,不是CMenu,而是微软另外写的一套。微软的菜单有好多套,它用的这一套,也没有开源,所以你也用不了。但微软提供了一套你可以使用的菜单,用的是窗口实现的。以前版本的VS不带,从vs2008 sp1后,这套菜单就有了。你装了vs2008 sp1后,可以直接创建你需要的这种界面。
向立天 2015-05-11
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
Sandrer 2015-04-11
  • 打赏
  • 举报
回复
引用 14 楼 bug1190 的回复:
[quote=引用 13 楼 Sandrer 的回复:]
搜索 MF_OWNERDRAW 多的是代码给你参考

你也别回了,你跟楼上的一样垃圾,你都没看看我要问的是什么[/quote]

年轻人别动不动发飙, 不懂就乱飙那是很不礼貌的
以为自己什么都懂, 别人给的意见不去考虑测试是否有效就先否定
去测试了达不到别人的效果就说别人的东西是乱说, 而不去继续去探讨如何达到想要的效果

菜单栏你可以自己用toolbar自己做
不想用toolbar的可以自己继承个cwnd来做, 拦截相应鼠标消息和键盘消息就可以做到类似菜单栏的样子
剩余的空白部分你可以自己控制用途
至于菜单, 别瞎折腾了, 就按我说的方法自绘可以帮你省下很多时间

你认为我说的不正确那是因为你自己没有去好好的研究, 起码我自己就做出了所需的菜单栏+自绘菜单
别人给了你答案你自己连试都没试就去否认, 你这么厉害还来这里发问干什么, 不懂来发问还自认为自己很懂的样子, 回自己家闭门造车算了

我记得你上一个乱发飙的帖子, 是认为所有看到的"个体"的东西都是窗口, 你倒好, 教会你之后来这里"表现"来了
现在明确告诉你, 菜单就是一个窗口

用你自己的智商来研究下面的效果吧
huanglin03 2015-04-08
  • 打赏
  • 举报
回复
引用 13 楼 Sandrer 的回复:
搜索 MF_OWNERDRAW 多的是代码给你参考
你也别回了,你跟楼上的一样垃圾,你都没看看我要问的是什么
BrillianceRen 2015-04-08
  • 打赏
  • 举报
回复
要求这么高, 自绘一个就是
huanglin03 2015-04-08
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
CMFCMenuBar ?
你别回了,越回越垃圾
huanglin03 2015-04-08
  • 打赏
  • 举报
回复
这是QQ截图自动识别到的,这能说明弹出式菜单是窗口做的不??
huanglin03 2015-04-08
  • 打赏
  • 举报
回复
[color=#FF0000]这是QQ截图自动识别到的,这能说明弹出式菜单是窗口做的不??[/color]
zgl7903 2015-04-08
  • 打赏
  • 举报
回复
huanglin03 2015-04-08
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
看看 CMFCPopupMenu Class 能不能满足需求 CMenu 是 从 CObject 继承下来的, 不是标准的CWnd
9级大神啊,能不能给力一点
huanglin03 2015-04-08
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
看看 CMFCPopupMenu Class 能不能满足需求 CMenu 是 从 CObject 继承下来的, 不是标准的CWnd
CMenu肯定不是窗口,这个确定!但我要的效果就是两点: 一、菜单栏不要占满整行 二、像VS那样,顶层菜单和弹出式菜单之间没有明显的那条分割线,这一点凡是标准的CMenu都不满足 而VS的弹出式菜单可能就是窗口了,还包括你说的 CMFCPopupMenu 就更是窗口了,继承关系图己经说的很明显了 你还没有回答我的问题,是什么DC画的?
zgl7903 2015-04-08
  • 打赏
  • 举报
回复
看看 CMFCPopupMenu Class 能不能满足需求 CMenu 是 从 CObject 继承下来的, 不是标准的CWnd
Sandrer 2015-04-08
  • 打赏
  • 举报
回复
搜索 MF_OWNERDRAW 多的是代码给你参考
zhouxiaofeng1021 2015-04-08
  • 打赏
  • 举报
回复
class CTMSSMenuBar : public CMFCMenuBar { virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL, int nIndex = -1, UINT uiID = (UINT) -1) { return TRUE; } virtual BOOL SaveState(LPCTSTR lpszProfileName = NULL, int nIndex = -1, UINT uiID = (UINT) -1) { return TRUE; } }; 在CMainFrame中: // 控件条嵌入成员 CTMSSMenuBar m_wndMainMenuBar; // 主菜单 // 创建菜单栏 if (!m_wndMainMenuBar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_AUTOSIZE, AFX_DEFAULT_TOOLBAR_STYLE | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY)) { TRACE0("未能创建菜单栏\n"); return -1; // 未能创建 } // 设置菜单栏样式 m_wndMainMenuBar.SetPaneStyle(m_wndMainMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY); DockPane(&m_wndMainMenuBar); m_wndMainMenuBar.InsertButton(CMFCToolBarMenuButton(0, customToolMenu, -1, strCustomMenuTitle, TRUE), 3); 我的项目中做得 你参考 这是菜单部分代码
赵4老师 2015-04-08
  • 打赏
  • 举报
回复
参考Codejock.Xtreme.Suite.Pro.ActiveX源代码?
huanglin03 2015-04-08
  • 打赏
  • 举报
回复
引用 9 楼 qq758610209 的回复:
就是一级一级的菜单啊,母菜单,子菜单,孙子菜单.........
qq758610209 2015-04-08
  • 打赏
  • 举报
回复
就是一级一级的菜单啊,母菜单,子菜单,孙子菜单.........

15,979

社区成员

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

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