I have derived a class from CComboBox.I want to change background color of selected/hovered string in CComboBox to Red.
Below is code of .h and .cpp files of derived class.
Code://MyCCombo.h #include "Stdafx.h" class MyCCombo : public CComboBox { public: MyCCombo(); ~MyCCombo(); protected: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); DECLARE_MESSAGE_MAP() };Now in MyCdialog(derived from Cdialog).h ,i include the #MyCComboBox.h and declared the variable of type MyCComboBox m_box; and used m_box in MyCdialog.cpp through DDX mappingCode://MyCCombo.cpp void MyCCombo::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(RGB(33,33,33)); dc.SetBkColor(RGB(255,0,0)); dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(255,0,0)); } else { dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor); } dc.Detach(); }
But result is not reflected..




Reply With Quote
