MFC CtreeCtrl CustomDraw CDIS_HOT изменить стиль шрифта не удалось
В customdraw MFC CTreeCtrl я хочу удалить подчеркнутый текст шрифта, когда элемент находится в горячем состоянии, поэтому код выглядит так:
void CTreeCtrlCS::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult)
{
...........................
...........................
CFont *pCurFont = NULL;
CFont *pNewFont = NULL;
LOGFONT logfont;
/* Draw Hot State */
if (itemState & CDIS_HOT) {
printf ("step A \n");
pCurFont = dc.GetCurrentFont ();
printf ("step B \n");
memset ((void *) &logfont,0,sizeof (logfont));
printf ("step C \n");
pCurFont->GetLogFont (&logfont);
printf ("step D \n");
logfont.lfUnderline = 0; /* remove the underline */
pCurFont->DeleteObject ();
printf ("step E \n");
pCurFont->CreateFontIndirect (&logfont);
printf ("step F \n");
dc.SelectObject (pCurFont);
printf ("step G \n");
} else {
;
}
printf ("end draw \n");
..................
}
когда на отладочной версии происходит сбой приложения и консоль показывает
Я не использовал многопоточность, это очень и очень странно. Желаемое шоу
StepA stepB ... конец розыгрыша
stepA stepB конец розыгрыша
Но ситуация наиболее вероятна, что дело CDIS_HOT повторно вошло... Я не понимаю, почему это случилось?
Кстати,как правильно удалить текст под строкой, когда элемент находится в горячем состоянии (CDIS_HOT) ?
любая помощь приветствуется.
1 ответ
CFont *pCurFont = NULL;
CFont *pNewFont = NULL;
CFont *pOldFont = NULL;
LOGFONT logfont;
CFont newfont ;
/* Draw Hot State */
if (itemState & CDIS_HOT) {
pCurFont = dc.GetCurrentFont ();
if (pCurFont) {
memset ((void *) &logfont,0,sizeof (logfont));
if (pCurFont->GetLogFont (&logfont)) {
logfont.lfUnderline = 0;
logfont.lfHeight = pRect->bottom - pRect->top - 3;
logfont.lfWeight = FW_BOLD;
newfont.CreateFontIndirect (&logfont);
pOldFont = dc.SelectObject (&newfont);
}
}
} else {
;
}
Сейчас все нормально...