是否可以更改MFC MDI应用程序中主要顶级菜单的位置?

时间:2010-09-13 19:59:59

标签: mfc menu mdi menubar

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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