CCheckListBox-Comments
Users 16.03.2012 - 12:18
Исправление небольшой ошибки с флагом LBS_MULTICOLUMN
enum {
LEFTBORDERCHECK = 2, // Отступ от флажка слева SIZEBORDERCHECK = 18, // Размер
};
Проблемный код:
RECT FrameRect = pDIS->rcItem; FrameRect.left += LEFTBORDERCHECK; FrameRect.right = 18;
Должно быть:
RECT FrameRect = pDIS->rcItem; FrameRect.left += LEFTBORDERCHECK; FrameRect.right = FrameRect.left + SIZEBORDERCHECK;
Users 16.03.2012 - 13:44
Еще одно изменение
void CCheckListBox::OnLButtonDown (UINT key, CPoint point) {
BOOL out = FALSE; unsigned int CurrItem = ItemFromPoint(point, out); unsigned int Size = GetCount(); if(CurrItem >= 0 && CurrItem < Size) { RECT ItemRect; GetItemRect(CurrItem, &ItemRect); int Offset = ItemRect.left + LEFTBORDERCHECK; if ( (point.x >= Offset) && (point.x <= (Offset + SIZEBORDERCHECK)) ) { ATLASSERT (m_Flags.size() == Size); m_Flags[CurrItem] = !m_Flags[CurrItem]; InvalidateRect (&ItemRect); ::SendMessage(GetParent(), m_CheckMessage, WPARAM(CurrItem), LPARAM(m_Flags[CurrItem])); } } DefWindowProc(WM_LBUTTONDOWN, key, MAKELPARAM(point.x, point.y));
}