Thursday, December 18, 2008

ComboBox with no borders

void CMyComboBox::OnPaint()

{

CPaintDC dc(this);

CRect rect;

GetClientRect(rect);

// draw borders

dc.Draw3dRect(rect,

::GetSysColor(COLOR_3DSHADOW),

::GetSysColor(COLOR_BTNHIGHLIGHT));

rect.DeflateRect(1,1);

dc.Draw3dRect(rect,

::GetSysColor(COLOR_3DDKSHADOW),

::GetSysColor(COLOR_BTNFACE));

rect.DeflateRect(1,1);

if( (GetStyle() & 0x0000000f) > CBS_SIMPLE)

{

CRect rectBtn=rect;

rectBtn.left = rectBtn.right - ::GetSystemMetrics(SM_CXHTHUMB);

BOOL bPressed=FALSE;

if(GetKeyState(VK_LBUTTON) <>

{

CPoint point;

::GetCursorPos(&point);

ScreenToClient(&point);

if(rectBtn.PtInRect(point))

{

bPressed=TRUE;

}

}

// draw button

UINT uState = DFCS_SCROLLDOWN;

uState |= (bPressed ? DFCS_FLAT | DFCS_PUSHED : 0);

dc.DrawFrameControl(rectBtn, DFC_SCROLL, uState );

rect.right=rectBtn.left;

}

if((GetStyle()&0x0000000f)==CBS_DROPDOWNLIST)

{

CString sText;

GetWindowText(sText);

if(sText.IsEmpty())

{

dc.FillSolidRect(rect, ::GetSysColor(COLOR_WINDOW));

}

}

else

{

// draw border around edit control

dc.Draw3dRect(rect,

::GetSysColor(COLOR_BTNHIGHLIGHT),

::GetSysColor(COLOR_BTNHIGHLIGHT));

}

}

No comments: