Re: Draw a themed combo box.
I would think you would just write the control out all in gray to dim it.
However, how do you do a multi-select combo box? What would you put into
the edit control? Wouldn't a list box be a better idea?
Tom
"Chimanrao" <chimanrao@gmail.com> wrote in message
news:1157971730.734411.269710@b28g2000cwb.googlegroups.com...
hi
I am trying to make a combo box like control completely on my own by
directly derving from CWnd.
I have a control derived from CWnd. The OnPaint handler's code is given
at the end of the post.
What i am doing is that in the OnPaint I am drawing a edit control and
then drawing a scroll button on the right hand side. In enabled state
the control looks just fine but in disabled state, it does not look
like the MFC themed combo box.
Can someone help me get the disabled look?
code snippet:
CPaintDC dc(this);
CRect totalRect;
GetClientRect(totalRect);
// dropdown button rect
CRect arrow = totalRect;
arrow.left = arrow.right - ::GetSystemMetrics(SM_CXHSCROLL);
arrow.DeflateRect(1,1);
BOOL bEnabled = this->IsWindowEnabled();
HTHEME hTheme = OpenThemeData(this->m_hWnd,L"ComboBox");
if (hTheme)
{
dc.FillSolidRect(totalRect, ::GetSysColor(COLOR_WINDOW));
// draw the border around the edit control
HTHEME hEdit = OpenThemeData(this->m_hWnd, L"Edit");
DrawThemeParentBackground(this->m_hWnd,dc.m_hDC,totalRect);
if (bEnabled)
DrawThemeBackground(hEdit,dc.m_hDC,EP_EDITTEXT,ETS_NORMAL,totalRect,NULL);
else
{
DrawThemeBackground(hEdit,dc.m_hDC,EP_EDITTEXT,ETS_DISABLED,totalRect,NULL);
}
CloseThemeData(hEdit);
if (bEnabled)
DrawThemeBackground(hTheme,dc.m_hDC,CP_DROPDOWNBUTTON,CBXS_NORMAL,arrow,NULL);
else
DrawThemeBackground(hTheme,dc.m_hDC,CP_DROPDOWNBUTTON,CBXS_DISABLED,arrow,NULL);
CloseThemeData(hTheme);
}
else
{
// draw the edit box
if (bEnabled)
dc.FillSolidRect(totalRect, ::GetSysColor(COLOR_WINDOW));
else
dc.FillSolidRect(totalRect,::GetSysColor(COLOR_BTNFACE));
// draw the border around the edit control
dc.Draw3dRect(totalRect,::GetSysColor(COLOR_3DDKSHADOW),
::GetSysColor(COLOR_3DLIGHT));
// draw the dropdown arrow.
dc.DrawFrameControl(arrow,DFC_SCROLL,DFCS_SCROLLCOMBOBOX);
}
}
What I am trying to create is a multi select combo box.
Regards
Chiman