765 views
首页 > WTL, 技术心得 > ComboBox 的一个 BUG?

ComboBox 的一个 BUG?

2010年1月19日

使用 windows 的标准控件 combobox 的时候, 遭遇到可能是这个控件的 bug 的一个问题.

就是当我们往标准 ComboBox 控件里面添加完几行字符串后, 我们点下拉列表时, 出来的 listbox 的背景没有被正确绘制, 是黑的. 如下图:

经过 Google 没找到答案, 后来试着添加了 WM_CTLCOLORLISTBOX 消息处理例程, 问题解决了. 奇怪.

  1. #define COMBOBOX_STYLE (WS_VISIBLE | WS_CHILD | WS_TABSTOP | CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT)
  2.  
  3. typedef CWinTraits<COMBOBOX_STYLE, 0> CComboBoxWinTraits;
  4.  
  5. class CWndComboBox
  6.     : public CWindowImpl<CWndComboBox, CComboBox, CComboBoxWinTraits>
  7. {
  8. public:
  9.     DECLARE_WND_SUPERCLASS(_T("CWndComboBox"), CComboBox::GetWndClassName())
  10.  
  11.     BEGIN_MSG_MAP(CWndComboBox)
  12.         MESSAGE_HANDLER(WM_CTLCOLORLISTBOX, OnCtlColor)
  13.     END_MSG_MAP()
  14.  
  15.     HRESULT OnCtlColor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  16.     {
  17.         LRESULT lResult = 0;
  18.         lResult = (LRESULT) AtlGetStockBrush(WHITE_BRUSH);
  19.         bHandled = TRUE;    // !!!
  20.         // return a different brush if the default is not desired
  21.         return lResult;
  22.     }
  23. };

WTL, 技术心得 ,

  1. 目前还没有任何评论.
  1. 目前还没有任何 trackbacks 和 pingbacks.