2012-08-09 44 views
0

我正在使用舊的應用程序來獲取Windows 7中的現代。GUI元素是通過顯式代碼(無特殊佈局管理器)創建和移動的。由於一些歷史原因,GUI事件沒有以標準方式處理。他們被重定向。跟蹤他們是相當困難的,特別是當我不知道我應該關注什麼時。TabControl中的StaticText背景...應處理哪些事件?

這裏是應該拋光的窗口的例子。這不是對話。這是一個古典的,可觀的窗口放在頂部。但是,它應該模仿對話框的外觀。該窗口使用其中CControl是我班基礎上,ATL WTL::CTabControlT<CControl> :: CWindow的 - 看到的圖片第一:

The window with the TabControls

它的人不能很好地可見的圖片,但紅色箭頭的兩端顯示靜態文本的灰色背景。但是,標籤本身的背景是白色的。

  1. 什麼事件導致靜態文本的灰色背景?它是WM_CTLCOLORSTATIC。或者,問題在哪裏?預計選項卡的背景是白色還是灰色(標準行爲)?
  2. 是否建議(由視覺界面的設計者,用戶體驗)也使標籤中的列表框具有相同的(白色)背景?
  3. 外窗口有COLOR_3DFACE通過ATL宏DECLARE_WND_CLASS_EX定義。什麼事件負責在標籤窗口周圍繪製空白處?

感謝您的幫助, 切赫

回答

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窗口的ProcessWindowMessage中處理WM_CTLCOLORSTATIC,白色選項卡上的靜態文本的灰色背景變爲白色:

else if (uMsg == WM_CTLCOLORSTATIC) 
    return TRUE;