是否可以更改 MFC MDI 应用程序中主***菜单的位置?
Posted
技术标签:
【中文标题】是否可以更改 MFC MDI 应用程序中主***菜单的位置?【英文标题】:Is it possible to change the location of the main top-level menu in an MFC MDI app? 【发布时间】:2010-09-13 19:59:59 【问题描述】:我有一个带有自定义框架(即标题/标题栏、边框)的应用。我通过删除 WS_CAPTION 样式自定义框架,并覆盖 OnNcCalcSize 为标题保留自定义大小的区域,应用程序在 OnNcPaint 中绘制该区域。
一个副作用是菜单栏不再显示,这没关系,因为我想自定义主菜单的外观和位置。不幸的是,我不知道该怎么做。我希望“文件”菜单比标准菜单栏离左边缘更远。
可接受的替代方法是完全删除菜单,并使用 OnNcHitTest、OnNcPaint 和 OnNcMouseMove 来管理***菜单的手动编码替换。
【问题讨论】:
【参考方案1】:我从未见过修改标准菜单外观的方法。您可以删除它(从您的 InitInstance 中删除创建代码),然后编写替换代码。不过,我不会在 OnNcXXX 中这样做,而是制作一个您位于顶部的新自定义控件。或者您可以查看 MFC Next 主题菜单并编写自定义 UI 渲染器。覆盖剩下的几个函数并设置菜单的对齐方式可能就足够了。
【讨论】:
【参考方案2】:这是一个 MFC MDI 应用程序 - InitInstance 不是创建菜单的位置。我试图摆脱菜单(并且暂时成功),但 MFC 框架似乎正在“把它放回去”——我认为 MDI 模型有子窗口修改菜单,但这样做的代码似乎埋在框架中的某个地方(否则我无法准确找到它在应用程序代码中发生的位置,但我怀疑它发生在 MFC 框架代码中)。如果我知道在哪里,我也许可以覆盖这些方法并进行控制……我想。
编写自定义控件与处理 OnNcMouseMove 和 OnNcLeftButtonDown 的原因是什么,例如?我不希望在任何其他应用程序中都需要该功能(新应用程序可能会用 C# 编码),所以我正在寻找易于实现,而不是代码重用。
【讨论】:
以上是关于是否可以更改 MFC MDI 应用程序中主***菜单的位置?的主要内容,如果未能解决你的问题,请参考以下文章