0

Есть ли какое-либо сообщение для уведомлений об элементах панели управления WinAPI, которые мы можем использовать, чтобы узнать, когда текущий элемент изменен, перемещая указатель мыши над раскрывающимся списком?Получите уведомление CBN_SELCHANGE, когда элемент комбинированного поля изменен при наведении мыши

Мое предположение, что уведомление CBN_SELCHANGE должно работать и для мыши, но, к сожалению, оно отправляется только тогда, когда мы меняем выбор с помощью клавиатуры или нажимаем элемент мышью.

+1

'CBN_SELCHANGE' опубликован только в том случае, если выбор действительно изменился. Перемещение мыши над раскрывающимся списком просто изменяет переходное состояние, чтобы отображать элементы в списке. Зачем вам нужно знать об этой детали реализации? (Вы можете подклассифицировать стандартный элемент управления со списком и самостоятельно обрабатывать сообщения мыши, если вы действительно этого хотите.). – IInspectable

+0

@Inspectable, в проекте, над которым я работаю, наши комбинированные блоки реализуют инкрементный поиск. И нам нужно отменить поиск, когда выбор изменяется, когда указатель перемещается по выпадающему списку. В настоящее время у нас есть процедура, которая обрабатывает WM_MOUSEMOVE и использует CB_GETTOPINDEX, чтобы найти индекс элемента под указателем мыши. Но, видимо, должен быть более простой способ, чем это делает сам блок управления со списком. – TecMan

+0

Вы собираетесь заново изобрести [Автозаполнение] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb776884.aspx)? Если да, рассмотрите возможность использования системы. – IInspectable

ответ

2

Прослушать WM_DRAWITEM в вашем WndProc и использовать DRAWITEMSTRUCT для определения выбора.

+0

Интересная идея. В общем случае это сработает, но нам нужно это только для события mouse-move (см. Также мой комментарий к комментарию IInspectable). WM_DRAWITEM происходит каждый раз, когда соответствующие элементы должны быть перерисованы, но нам не нужна эта логика для некоторых команд клавиатуры. Я сомневаюсь, что реализация этого подхода принесет пользу по сравнению с нашей нынешней техникой, основанной на WM_MOUSEMOVE/CB_GETTOPINDEX. – TecMan

+0

@TecMan - Вы можете добавить эту информацию к своему вопросу. Вопрос подразумевает, что вы в настоящее время используете 'CBN_SELCHANGE', что, по-видимому, не так. – theB

Смежные вопросы