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));
}