我正在重写旧应用程序以在Windows 7中获得现代外观。通过显式代码(没有特殊的布局管理器)创建和移动GUI元素。由于某些历史原因,GUI事件未按标准方式处理。他们被重定向。跟踪它们相当困难,特别是当我不知道应该关注什么时。
以下是应抛光的窗口示例。它不是一个对话框。它是顶部经典,相当大的窗户。但是,它应该模仿对话框的外观。该窗口使用WTL::CTabControlT<CControl>
,其中CControl
是我的类,基于ATL :: CWindow - 请先看图片:
从图片中看不到人,但红色箭头的末端显示静态文本的灰色背景。但是,标签本身的背景是白色的。
WM_CTLCOLORSTATIC
。或者,问题出在哪里?标签的背景是白色还是灰色(标准行为)?COLOR_3DFACE
定义DECLARE_WND_CLASS_EX
。什么事件负责在标签窗口周围绘制bacground?感谢您的帮助, 彼得
答案 0 :(得分:0)
通过显式处理WM_ERASEBKGND
消息解决了选项卡周围缺少的灰色背景(重定向以某种方式阻止了默认处理):
if (uMsg == WM_ERASEBKGND)
{
WTL::CDCHandle dc(reinterpret_cast<HDC>(wParam));
RECT rc;
GetClientRect(&rc);
dc.FillRect(&rc, GetWndClassInfo().m_wc.hbrBackground);
return TRUE;
}
同样,通过以下方式处理TabControl窗口的WM_CTLCOLORSTATIC
中的ProcessWindowMessage
,白色标签上的静态文本的灰色背景变白了:
else if (uMsg == WM_CTLCOLORSTATIC)
return TRUE;