[WTL] CCheckListBox

Немного рекламы

Файлы

Скачать

Используемые библиотеки

WTL

Скриншоты

Описание

Суть этого компонента видно на картинке (это пример из реальной программы, которая использует этот контрол). Думаю, что описывать тут особо нечего - это довольно простой контрол. Все его описание приведено в заголовочном файле в виде подробных комментариев.

Немного рекламы


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

}


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 621