BOOL CMyComboBox::CreateButton()
{
CRect btnRect;
GetClientRect(btnRect);
//Get the bitmap size and add border space
CBitmap bitmapDown;
CDC* pDC=GetDC();
CDC tempDC;
BITMAP bm; bitmapDown.LoadBitmap(CBU);
tempDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap=tempDC.SelectObject(&bitmapDown); bitmapDown.GetObject(sizeof(BITMAP),(LPSTR)&bm); tempDC.SelectObject(pOldBitmap);

int xBorder = GetSystemMetrics(SM_CXEDGE);
int yBorder = GetSystemMetrics(SM_CYEDGE); btnRect.left=btnRect.right-bm.bmWidth-xBorder*2;
btnRect.bottom=btnRect.top+bm.bmWidth+yBorder*2;
m_DropDownButton.CreateEx(WS_EX_CLIENTEDGE,//make 3d-border
  _T("BUTTON"),NULL,
  BS_PUSHBUTTON|WS_VISIBLE|WS_CHILD|BS_OWNERDRAW,
  btnRect,this,IDC_COMBO1); m_DropDownButton.LoadBitmaps(CBU,CBD);
return true;
}我已实现在下拉选择框combobox的下拉箭头上贴图,但需要消息实现原来的下拉箭头的功能(如:点击出现下拉列表框的功能)
如何写这些消息?

解决方案 »

  1.   

    处理WM_LBUTTONDOWN的消息。如果是在箭头图片矩形内,则绘制下拉选择框。
      

  2.   

    重新绘制listBox,那它的消息岂不是要重写,所以我想用原来的,就不用写消息了,我也想用draweItem,来画下拉箭头,不知道是否还要写下拉箭头的消息?
    郁闷。
    帮帮忙!!!
      

  3.   

    我已经设置自画属性,为什么它不进入DrawItem函数里?void CMyComboBox::PreSubclassWindow() 
    {
    ModifyStyle(SS_TYPEMASK,BS_OWNERDRAW);
    CComboBox::PreSubclassWindow();
    }void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {}
      

  4.   

    如果是重载CComboBox,就不用那么麻烦了。消息部分都有默认的处理,你只需要处理绘制的消息就行了。
    但是要绘制箭头,只重载DrawItem()好像是不行的,还需要重载OnPaint(),在OnPaint()里面绘制整个画面,这样就可以绘制自己的箭头了。
    DrawItem()是用来绘制其中的选项的。