我们正在使用 C++ 和 Win32 编写 Windows 桌面应用程序。我们的对话框具有“Windows XP 风格”的丑陋外观:静态文本的背景是灰色的。如果对话框背景也是灰色,这不是问题,但在背景为白色的选项卡控件内,文本的灰色背景非常明显。
过去我们自己绘制了很多控件,但现在我们尝试尽可能使用标准的外观,并尽可能避免覆盖标准行为。
我们使用的是 Win32 API,它有点过时了,但我认为即使使用 ATL 也会出现问题。我们正在创建一个对话框模板。文本位于“静态”控件中(0x0082)。我们为样式设置的唯一标志是“SS_LEFT”。文本控件位于选项卡控件内:“SysTabControl32”,仅设置一个标志:WS_CLIPSIBLINGS。我尝试过 SS_WHITERECT 和 WS_EX_TRANSPARENT 等设置,但无济于事。
所有这些都是通过标准 Windows 对话框消息处理程序绘制的。我的主要问题是“我们做错了什么?”而不是“我该如何解决这个问题?”,尽管如果没有人可以帮助我解决第一个问题,我会选择后者。
有任何想法吗?
要访问 MS 针对此问题的解决方案,需要在选项卡控件中实现页面的常用方法:-
不要在选项卡区域中创建单独的控件,而是为每个页面创建一个无模式子对话框并在其上放置控件。创建以主对话框(而不是选项卡)作为其父级的页面对话框,并且当用户在选项卡之间切换时,只需显示和隐藏相关页面对话框即可。
In the WM_INITDIALOG
每个页面的处理程序,调用 uxtheme APIEnableThemeDialogTexture http://msdn.microsoft.com/en-us/library/bb773320(VS.85).aspx
随着ETDT_ENABLETAB
标记这会自动更改对话框及其所有子控件的背景颜色,以便在选项卡上正确绘制。
如果你已经覆盖了WM_ERASEBKGND
or WM_CTLCOLOR*
在您的 DialogProc 页面中,您将需要恢复到默认处理(返回 FALSE),因为这些方法是对话框代码将完成其繁重工作的地方。样式位应该简单地设置,就好像子页面对话框页面将在普通的 Windows 9X 选项卡式对话框上创建一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)