0

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

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

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

4

2 回答 2

0

I've never seen a way to modify the looks of the standard menu. You can remove it (remove the creation code from your InitInstance) and then code a replacement. I wouldn't do that in OnNcXXX though, rather make a new custom control that you position at the top. Or you could have a look at the MFC Next themed menus and write a custom UI renderer. It may be enough to override a few functions left and ride to set the alignment of the menu.

于 2010-09-13T21:04:32.867 回答
0

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

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

于 2010-09-15T14:35:05.743 回答