重载ListBox中的DrawItem,改变Item字,但一选中又变回原来的字体,怎么处理?高手们
重载ListBox中的DrawItem,改变Item字,但一选中又变回原来的字体,怎么办?高手们。
重载ListBox中的DrawItem,改变Item字,但一选中又变回原来的字体,怎么办?高手们。
------解决方案--------------------
你的DeleteObject(&pFont);调用应该会失败的,你之前没有SelectObject 旧的CFont对象。
CFont* pOldFont = (CFont*)dc.SelectObject(&pFont);
。。。
dc.SelectObject(pOldFont);
delete pFont;
pFont = NULL;
重载ListBox中的DrawItem,改变Item字,但一选中又变回原来的字体,怎么办?高手们。
void MyListBox::DrawItem (LPDRAWITEMSTRUCT lpdis)
{
CDC dc;
dc.Attach (lpdis->hDC);
CRect rect = lpdis->rcItem;
int nIndex = lpdis->itemID;
CBrush* pBrush = new CBrush;
pBrush->CreateSolidBrush (::GetSysColor ((lpdis->itemState &
ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_WINDOW));
dc.FillRect (rect, pBrush);
delete pBrush;
if (lpdis->itemState & ODS_FOCUS)
dc.DrawFocusRect (rect);
/* dc.DrawIcon (rect.left + 4, rect.top + 2,
(HICON) GetItemData (nIndex));*/
if (nIndex != (UINT) -1)
{
CFont *pFont=new CFont;
pFont->CreateFont(40,16,0,0,100,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,_T("Arial"));
dc.SelectObject(&pFont);
SetBkMode(dc,TRANSPARENT);
LPCTSTR pstr=(LPCTSTR)lpdis->itemData;
CRect stringRect;
stringRect=rect;
stringRect.left+=4;
stringRect.top+=2;
dc.DrawText(pstr, stringRect,DT_CENTER);
dc.SelectObject(pFont);
DeleteObject(&pFont);
}
dc.Detach ();
}
------解决方案--------------------
你的DeleteObject(&pFont);调用应该会失败的,你之前没有SelectObject 旧的CFont对象。
CFont* pOldFont = (CFont*)dc.SelectObject(&pFont);
。。。
dc.SelectObject(pOldFont);
delete pFont;
pFont = NULL;