Tim*_*per 4 c++ user-interface winapi xp-theme
我们正在使用C++和Win32编写Windows桌面应用程序.我们的对话框外观丑陋,带有"Windows XP风格":静态文本的背景为灰色.对话框背景也是灰色的,这不是问题,但在选项卡控件中,背景为白色,文本的灰色背景非常明显.
在过去,我们已经做了很多自己的控件绘制,但是现在我们尽可能地使用标准的look'n'feel,并尽可能避免重写标准行为.
我们正在使用Win32 API,它有点过时,但我认为即使使用ATL也会出现问题.我们正在创建一个DIALOGTEMPLATE.该文本处于"静态"控制(0x0082).我们为样式设置的唯一标志是"SS_LEFT".文本控件位于选项卡控件内:"SysTabControl32"只有一个标志:WS_CLIPSIBLINGS设置在其上.我已经尝试过SS_WHITERECT和WS_EX_TRANSPARENT等设置,但无济于事.
所有这些都是使用标准的Windows对话框消息处理程序绘制的.我的主要问题是"我们做错了什么?" 而不是"我怎么能解决它?",虽然如果没有人可以帮我解决第一个问题,我会接受后者.
有任何想法吗?
在选项卡控件中实现页面的常用方法是访问MS解决此问题的方法: -
不是在选项卡区域中创建单独的控件,而是为每个页面创建一个无模式子对话框并对其进行控制.使用主对话框(而不是选项卡)创建页面对话框作为其父对象,并且当用户在选项卡之间切换时,只需显示和隐藏相关页面对话框.
在WM_INITDIALOG每个页面的处理程序中,调用uxtheme APIEnableThemeDialogTexture
使用该ETDT_ENABLETAB标志,这会自动更改对话框及其所有子控件的背景颜色,以便在选项卡上进行适当的绘制.
如果您已覆盖WM_ERASEBKGND或WM_CTLCOLOR*在您的页面DialogProc中,您将需要恢复到默认处理(返回FALSE),因为这些方法是对话框代码将要繁重的工作.应该简单地设置样式位,就好像将在普通的Windows 9X选项卡式对话框上创建子页面对话框页面一样.