У меня проблема при изменении размера CControlBar, который содержит несколько кнопок CB.После некоторого изменения размера весь дисплей ломается и перестает правильно рисовать.Основываясь на том, что я могу найти об этих типах проблем, я думаю, что я пропускаю объекты GDI, когда кнопки перерисовываются.
Ниже приведен мой метод DrawItem.Я постоянно нахожу различные способы использования в Интернете, но проблема все еще возникает.
Пожалуйста, кто-нибудь может помочь мне точно определить, что мне нужно изменить и как.
void CNJABarFolderButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {
UINT uState=DFCS_BUTTONPUSH;
if( lpDrawItemStruct->itemState & ODS_SELECTED )
{
uState|=DFCS_PUSHED;
}
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.DrawFrameControl(&lpDrawItemStruct->rcItem,DFC_BUTTON,uState);
if( !IsWindowEnabled() )
{
dc.SetTextColor(::GetSysColor(COLOR_3DSHADOW));
}
CString csText;
GetWindowText(csText);
if (m_iDisplayType != 2 || !m_hIcon)
{
CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = m_iFontSize;
strcpy(lf.lfFaceName, "Tahoma Bold");
VERIFY(font.CreateFontIndirect(&lf));
CFont* def_font = dc.SelectObject(&font);
RECT buttonRect = lpDrawItemStruct->rcItem;
buttonRect.left += 10;
buttonRect.right += 10;
if (m_iDisplayType != 1 || !m_hIcon) //text & Icon
{
buttonRect.left += 30;
buttonRect.right += 30;
}
dc.DrawText(csText,&buttonRect,DT_LEFT|DT_SINGLELINE|DT_VCENTER);
dc.SelectObject(def_font);
font.DeleteObject();
}
if (m_hIcon && m_iDisplayType != 1)
{
CSize czText = dc.GetTextExtent(csText);
dc.DrawIcon(0,0,m_hIcon);
}
dc.Detach();
}