TabControl中的StaticText背景...应该处理哪些事件?

时间:2012-08-09 12:59:04

标签: c++ user-interface windows-7 tabcontrol wtl

我正在重写旧应用程序以在Windows 7中获得现代外观。通过显式代码(没有特殊的布局管理器)创建和移动GUI元素。由于某些历史原因,GUI事件未按标准方式处理。他们被重定向。跟踪它们相当困难,特别是当我不知道应该关注什么时。

以下是应抛光的窗口示例。它不是一个对话框。它是顶部经典,相当大的窗户。但是,它应该模仿对话框的外观。该窗口使用WTL::CTabControlT<CControl>,其中CControl是我的类,基于ATL :: CWindow - 请先看图片:

The window with the TabControls

从图片中看不到人,但红色箭头的末端显示静态文本的灰色背景。但是,标签本身的背景是白色的。

  1. 什么事件导致静态文本的灰色背景?是WM_CTLCOLORSTATIC。或者,问题出在哪里?标签的背景是白色还是灰色(标准行为)?
  2. 建议(由可视化界面的设计人员,用户体验)使标签中的列表框具有相同(白色)背景吗?
  3. 外部窗口通过ATL宏COLOR_3DFACE定义DECLARE_WND_CLASS_EX。什么事件负责在标签窗口周围绘制bacground?
  4. 感谢您的帮助,   彼得

1 个答案:

答案 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;