CComboBox::DrawItem
소유자 그리기 콤보 상자 변경 내용을 시각적 측면이 때 프레임 워크에서 호출 됩니다.
virtual void DrawItem(
LPDRAWITEMSTRUCT lpDrawItemStruct
);
매개 변수
- lpDrawItemStruct
에 대 한 포인터는 DRAWITEMSTRUCT 필요한 드로잉 유형에 대 한 정보를 포함 하는 구조입니다.
설명
ItemAction 소속은 DRAWITEMSTRUCT 수행 되는 그리기 작업 구조를 정의 합니다. 참조 CWnd::OnDrawItem 이 구조를 설명 합니다.
기본적으로이 함수는 실행 되지 않습니다. 드로잉에 대 한 소유자 그리기를 구현 하려면이 멤버 함수를 재정의 합니다. CComboBox 개체입니다. 이 멤버 함수를 종료 하기 전에 응용 프로그램에서 디스플레이 컨텍스트를 제공에 대해 선택한 모든 그래픽 장치 인터페이스 (GDI) 개체를 복원 해야 lpDrawItemStruct.
예제
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example draws an item's text centered vertically and horizontally. The
// combo box control was created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Erase
// the rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction & ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER|DT_SINGLELINE|DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
요구 사항
헤더: afxwin.h