【问题标题】:Is it possible to change the location of the main top-level menu in an MFC MDI app?是否可以更改 MFC MDI 应用程序中主顶级菜单的位置?
【发布时间】:2010-09-13 19:59:59
【问题描述】:

我有一个带有自定义框架(即标题/标题栏、边框)的应用。我通过删除 WS_CAPTION 样式自定义框架,并覆盖 OnNcCalcSize 为标题保留自定义大小的区域,应用程序在 OnNcPaint 中绘制该区域。

一个副作用是菜单栏不再显示,这没关系,因为我想自定义主菜单的外观和位置。不幸的是,我不知道该怎么做。我希望“文件”菜单比标准菜单栏离左边缘更远。

可接受的替代方法是完全删除菜单,并使用 OnNcHitTest、OnNcPaint 和 OnNcMouseMove 来管理顶级菜单的手动编码替换。

【问题讨论】:

    标签: mfc menu mdi menubar


    【解决方案1】:

    我从未见过修改标准菜单外观的方法。您可以删除它(从您的 InitInstance 中删除创建代码),然后编写替换代码。不过,我不会在 OnNcXXX 中这样做,而是制作一个您位于顶部的新自定义控件。或者您可以查看 MFC Next 主题菜单并编写自定义 UI 渲染器。覆盖剩下的几个函数并设置菜单的对齐方式可能就足够了。

    【讨论】:

      【解决方案2】:

      这是一个 MFC MDI 应用程序 - InitInstance 不是创建菜单的位置。我试图摆脱菜单(并且暂时成功),但 MFC 框架似乎正在“把它放回去”——我认为 MDI 模型有子窗口修改菜单,但这样做的代码似乎埋在框架中的某个地方(否则我无法准确找到它在应用程序代码中发生的位置,但我怀疑它发生在 MFC 框架代码中)。如果我知道在哪里,我也许可以覆盖这些方法并进行控制……我想。

      编写自定义控件与处理 OnNcMouseMove 和 OnNcLeftButtonDown 的原因是什么,例如?我不希望在任何其他应用程序中都需要该功能(新应用程序可能会用 C# 编码),所以我正在寻找易于实现,而不是代码重用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多