【问题标题】:Menu Format is different in Windows 7 vs Windows XP for a Winforms appWinforms 应用程序的 Windows 7 与 Windows XP 中的菜单格式不同
【发布时间】:2011-01-09 11:13:50
【问题描述】:

我有一个 Winforms 应用程序,它最初是在 vs 2005 中创建并转换为 vs 2008 年。在 Windows 7 中运行此应用程序时,菜单看起来不像 Windows 7 中的标准菜单(即,菜单项与其他应用程序的格式不同)。这适用于应用程序菜单栏上显示的菜单以及右键单击上下文菜单。仅供参考,我正在使用 System.Windows.Forms.MenuStrip 和 System.Windows.Forms.ContextMenuStrip 控件。

有谁知道为什么菜单没有以默认的 Windows 7 外观呈现?

【问题讨论】:

    标签: winforms visual-studio-2008 windows-7 menu


    【解决方案1】:

    MenuStrip 使用自定义渲染器,它不会让 Windows 来绘制菜单。您可以将 RenderMode 属性更改为 System 但这无济于事,它是系统绘制菜单的 Win7 之前的版本。如果您希望 Windows 呈现菜单,那么您将不得不回退到 .NET 1.1 MainMenu 组件。另一种方法是将Renderer属性分配给自己的自定义渲染器,不太实用。

    这也是 WPF 的一个问题,更糟糕的是因为它自己呈现所有控件。我们正在快速接近一个阶段,即程序的外观由 UI 类库而非操作系统决定。

    【讨论】:

      【解决方案2】:

      如果您的菜单中有任何 OWNERDRAW 项目,Windows 7 将恢复为向后兼容的绘图模式以避免破坏您的代码。您是否覆盖了任何项目的绘图?

      【讨论】:

      • 约翰,不,我没有在菜单中使用 OWNERDRAW。我尝试了不同的 RenderMode 属性值,虽然它确实改变了菜单,但它们仍然不像 Windows 7 的默认值。
      • 听起来您正在触发兼容性黑客攻击。您是否进行任何非客户端消息处理?
      • 约翰,没有。一切基本上都是“开箱即用”的功能。不过,我确实注意到,我的菜单看起来像 SQL Server Management Studio for SQL Server 2008 中的菜单,而且看起来也与标准的 Windows 7 菜单不同。
      • 尝试使用 spy++ 将您的窗口的窗口样式(和扩展样式)与具有 windows 7 外观的窗口进行比较。如果不这样做,我没有想法。对不起..
      • 感谢您的帮助,约翰。使用 spy++ 进行调查是个好主意。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2011-03-21
      • 2013-03-09
      • 2012-11-05
      相关资源
      最近更新 更多