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的下拉箭头上贴图,但需要消息实现原来的下拉箭头的功能(如:点击出现下拉列表框的功能)
如何写这些消息?
{
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的下拉箭头上贴图,但需要消息实现原来的下拉箭头的功能(如:点击出现下拉列表框的功能)
如何写这些消息?
郁闷。
帮帮忙!!!
{
ModifyStyle(SS_TYPEMASK,BS_OWNERDRAW);
CComboBox::PreSubclassWindow();
}void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{}
但是要绘制箭头,只重载DrawItem()好像是不行的,还需要重载OnPaint(),在OnPaint()里面绘制整个画面,这样就可以绘制自己的箭头了。
DrawItem()是用来绘制其中的选项的。