定制自绘画的ComboBox高度

今天写了一个自绘画的ComboBox,结果发现一个以前从来没有注意的问题,就是设定了OwnerDraw样式的ComboBox的高度被系统自动设定为比普通的ComboBox大那么几个像素,重载MesureItem方法,定制列表项目的高度也不解决问题,最后发现只要重载PreSubclassWindow方法,给ComboBox发一个CB_SETITEMHEIGHT的消息就可以了,代码示意如下

  1. void CCommCBX::PreSubclassWindow()
  2. { //Let the parent do its thing
  3. CComboBox::PreSubclassWindow();
  4. if (GetWindowLong(m_hWnd, GWL_STYLE) & CBS_HASSTRINGS)
  5. if (GetWindowLong(m_hWnd, GWL_STYLE) & CBS_OWNERDRAWVARIABLE)
  6. ::SendMessage(m_hWnd, CB_SETITEMHEIGHT, (WPARAM)-1, 12L);
  7. }