Я пытаюсь реализовать некоторые функции перетаскивания для системы материалов, разрабатываемой на моей работе. Часть этой системы включает в себя «Библиотеку материалов», которая действует как хранилище, разделенное на группы, сохраненных материалов на жестком диске пользователя.
В рамках некоторой обработки пользовательского интерфейса я надеялся реализовать функцию типа «подсветка». При перетаскивании окна, в которые вы можете легально перетащить материал, очень тонко изменят цвет, чтобы улучшить обратную связь с пользователем, что это допустимое действие.
Я изменяю планку с помощью «Базовых материалов» (просто CWnd с CStatic) с среднего серого фона, если он не выделен, на синий фон при наведении. Все это работает хорошо, сообщения OnDragEnter и OnDragExit кажутся надежными и устанавливают флаг, указывающий состояние выделения. Затем в OnCtrlColor я делаю это:
if (!m_bHighlighted) {
pDC->FillSolidRect(0, 0, m_SizeX, kGroupHeaderHeight, kBackgroundColour);
}
else {
pDC->FillSolidRect(0, 0, m_SizeX, kGroupHeaderHeight, kHighlightedBackgroundColour);
}
Однако, как вы можете видеть на скриншоте, картина "глюки" под перетаскиваемым объектом, оставляя оригинальный серый на месте. Это выглядит действительно некрасиво и в целом портит весь эффект.
Есть ли способ, которым я могу обойти это?