0

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

这是应该抛光的窗户的例子。它不是一个对话框。它是经典的、相当大的窗户,位于顶部。但是,它应该模仿对话框的外观。窗口使用WTL::CTabControlT<CControl>whereCControl是我基于 ATL::CWindow 的类——先看图片:

带有 TabControls 的窗口

从图片中看不太清楚,但红色箭头的末端显示了静态文本的灰色背景。但是,选项卡本身的背景是白色的。

  1. 什么事件导致静态文本的灰色背景?是不是WM_CTLCOLORSTATIC。或者,问题出在哪里?选项卡的背景是白色还是灰色(标准行为)?
  2. 是否建议(由视觉界面的设计者、用户体验)让选项卡中的列表框也具有相同的(白色)背景?
  3. 外部窗口已COLOR_3DFACE通过 ATL 宏定义DECLARE_WND_CLASS_EX。什么事件负责在选项卡窗口周围绘制免费?

谢谢你的帮助,彼得

4

1 回答 1

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;
}

WM_CTLCOLORSTATIC同样,通过在ProcessWindowMessageTabControl 窗口中以这种方式处理,白色选项卡上的静态文本的灰色背景变白:

else if (uMsg == WM_CTLCOLORSTATIC)
    return TRUE;
于 2012-08-28T07:07:26.600 回答