Чтение онлайн

на главную - закладки

Жанры

Исчерпывающее руководство по написанию всплывающих подсказок

Джек Роджер

Шрифт:

 // Зарегистрировать класс окна, если он еще не зарегистрирован

 // другим экземпляром CTitleTip.

 if (m_pszWndClass == NULL) {

m_pszWndClass = AfxRegisterWndClass(CS_SAVEBITS | CS_HREDRAW | CS_VREDRAW);

 }

 m_nItemIndex = m_nNoIndex;

 m_pListBox = NULL;

}

CTitleTip::~CTitleTip { }

BOOL CTitleTip::Create(CListBox* pParentWnd) {

 ASSERT_VALID(pParentWnd);

 m_pListBox = pParentWnd;

 //
Не рисовать рамку для обычных элементов "список", так как

 // строки с пользовательской отрисовкой добавляют рамку автоматически.

 DWORD dwStyle = WS_POPUP;

 if (!IsListBoxOwnerDraw) {

dwStyle |= WS_BORDER;

 }

 return CreateEx(0, m_pszWndClass, NULL, dwStyle, 0, 0, 0, 0, pParentWnd->GetSafeHwnd, NULL, NULL);

}

BOOL CTitleTip::IsListBoxOwnerDraw {

 ASSERT_VALID(m_pListBox);

 DWORD dwStyle = m_pListBox->GetStyle;

 return (dwStyle & LBS_OWNERDRAWFIXED) || (dwStyle & LBS_OWNERDRAWVARIABLE);

}

void CTitleTip::Show(CRect DisplayRect, int nItemIndex) {

 ASSERT_VALID(m_pListBox);

 ASSERT(nItemIndex < m_pListBox->GetCount);

 ASSERT(nItemIndex >= 0);

 ASSERT(::IsWindow(m_hWnd));

 ASSERT(!DisplayRect.IsRectEmpty);

 // Пометить для обновления, если новая строка.

 if (m_nItemIndex != nItemIndex) {

m_nItemIndex = nItemIndex;

InvalidateRect(NULL);

 }

 // Установить позицию и видимость окна.

 CRect WindowRect;

 GetWindowRect(WindowRect);

 int nSWPFlags = SWP_SHOWWINDOW | SWP_NOACTIVATE;

 if (WindowRect == DisplayRect) {

nSWPFlags |= SWP_NOMOVE | SWP_NOSIZE;

 }

 VERIFY(SetWindowPos(&wndTopMost, DisplayRect.left, DisplayRect.top, DisplayRect.Width, DisplayRect.Height, nSWPFlags));

}

void CTitleTip::Hide {

 ASSERT(::IsWindow(m_hWnd));

 ShowWindow(SW_HIDE);

}

BEGIN_MESSAGE_MAP(CTitleTip, CWnd)

 //{{AFX_MSG_MAP(CTitleTip)

 ON_WM_PAINT

 //}}AFX_MSG_MAP

END_MESSAGE_MAP

/////////////////////////////////////////////////////////////////////////////

// CTitleTip message handlers

void CTitleTip::OnPaint {

 ASSERT(m_nItemIndex != m_nNoIndex);

 CPaintDC DC(this);

 int nSavedDC = DC.SaveDC;

 CRect ClientRect;

 GetClientRect(ClientRect);

 if (IsListBoxOwnerDraw) {

//
Доверим рисование элементу "список".

DRAWITEMSTRUCT DrawItemStruct;

DrawItemStruct.CtlType = ODT_LISTBOX;

DrawItemStruct.CtlID = m_pListBox->GetDlgCtrlID;

DrawItemStruct.itemID = m_nItemIndex;

DrawItemStruct.itemAction = ODA_DRAWENTIRE;

DrawItemStruct.hwndItem = m_pListBox->GetSafeHwnd;

DrawItemStruct.hDC = DC.GetSafeHdc;

DrawItemStruct.rcItem = ClientRect;

DrawItemStruct.itemData = m_pListBox->GetItemData(m_nItemIndex);

DrawItemStruct.itemState = (m_pListBox->GetSel(m_nItemIndex) > 0 ? ODS_SELECTED : 0);

if (m_pListBox->GetStyle & LBS_MULTIPLESEL) {

if (m_pListBox->GetCaretIndex == m_nItemIndex) {

DrawItemStruct.itemState |= ODS_FOCUS;

}

} else {

DrawItemStruct.itemState |= ODS_FOCUS;

}

m_pListBox->DrawItem(&DrawItemStruct);

 } else {

// Рисуем самостоятельно

CFont* pFont = m_pListBox->GetFont;

ASSERT_VALID(pFont);

DC.SelectObject(pFont);

COLORREF clrBackground = RGB(255, 255, 255);

if (m_pListBox->GetSel(m_nItemIndex) > 0) {

DC.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));

clrBackground = ::GetSysColor(COLOR_HIGHLIGHT);

}

// Рисуем фон

DC.FillSolidRect(ClientRect, clrBackground);

// Рисуем текст строки

Поделиться:
Популярные книги

Метатель. Книга 7

Тарасов Ник
7. Метатель
Фантастика:
боевая фантастика
попаданцы
постапокалипсис
рпг
фэнтези
фантастика: прочее
5.00
рейтинг книги
Метатель. Книга 7

Вернуть Боярство 3

Мамаев Максим
3. Пепел
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Вернуть Боярство 3

Сумеречный Стрелок 3

Карелин Сергей Витальевич
3. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 3

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Неправильный лекарь. Том 1

Измайлов Сергей
1. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неправильный лекарь. Том 1

Черный дембель. Часть 2

Федин Андрей Анатольевич
2. Черный дембель
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Черный дембель. Часть 2

Развод с генералом драконов

Солт Елена
Фантастика:
фэнтези
5.00
рейтинг книги
Развод с генералом драконов

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Возвышение Меркурия. Книга 15

Кронос Александр
15. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 15

Кодекс Охотника. Книга XXIII

Винокуров Юрий
23. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIII

Бастард Императора. Том 4

Орлов Андрей Юрьевич
4. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 4

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Своя правда

Шебалин Дмитрий Васильевич
2. Чужие интересы
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Своя правда