Это на самом деле не отправляется сразу после создания, но можно получить в любое время после создания, если окно имеет область Non-Client определен. Окна имеют две основных регионов, Клиент и неклиент. Область «Неклиент» - это внешняя граница/край окна, а область клиента можно считать «телом» окна. Это область, где вы получите наибольшую активность, и обычно это предполагаемая область окна, где пользователь должен взаимодействовать. Конечно, иногда другие стороны будут создавать элементы управления, которые не имеют неклиентских областей, и при этом все еще отображают свои собственные границы и другие данные.
Для почти все элементы управления запасами (что-либо в общей библиотеке управления и других элементах управления на основе окон, опубликованных Microsoft), следующие области рассматриваются как неклиентские области.
- Титры Титр Детали
- Системное меню/Свернуть/Развернуть/Закрыть
- Границы
сообщения, которые начинаются с ЧПУ представляют собой события, которые произошли в Non-Client областях окна. Сообщения без префикса находятся в области «Клиент».
Во всяком случае, я полагаю, что у вас есть функция отслеживания событий мыши в определенном окне. Если необходимо отслеживать движение по неклиентским областям окна (например, для перетаскивания или наведения), вы должны добавить следующие сообщения для отслеживания мыши.
(позиция мыши изменилось в области не-клиента)
- WM_NCLBUTTONDBLCLK
- WM_NCLBUTTONDOWN
- WM_NCLBUTTONUP
(действия левой кнопки в области не-клиент)
- WM_NCMBUTTONDBLCLK
- WM_NCMBUTTONDOWN
- WM_NCMBUTTONUP
(действия-кнопка средней в области не-клиент)
- WM_NCRBUTTONDBLCLK
- WM_NCRBUTTONDOWN
- WM_NCRBUTTONUP
(действия правой кнопки в области не-клиент)
Кроме того, в зависимости от вашего приложения, следующие сообщения могут представлять интерес, а также.
(активация окна изменилась действия пользователя и область, не клиент должен быть обновлен)
(оконный менеджер хочет знать, не отслеживает ли область, не относящуюся к клиенту, активность мыши)
(область, не клиент должен быть перекрашен)
Полезный трюк для определения остроты степени в области Non-Client для перехвата сообщения WM_NCPAINT и просто покрасить не - цветная область по вашему выбору (красный/розовый или какой-либо другой цвет, который выделяется). Это полезно для отладки ситуаций, когда у вас несколько соседних друг с другом окон с неклиентскими областями, которые должны выглядеть бесшовными.
Наконец, вот ссылка, в которой есть демонстрационный исходный код, который стоит изучить, чтобы увидеть, как работают неклиентские области.
Customizing the Non-client Area from CodeProject (VB)
Благодарим Вас за ответ^_^ Но это не очень полезно для моего вопроса :( Моя проблема, я создаю окно, и я хочу, чтобы отслеживать WM_NCMOUSELEAVE по какой-то причине, поэтому я добавляю обработчик WM_NCMOUSELEAVE в WINPROC. Но я заметил, что до того, как я вызываю TrackMouseEvent() для отслеживания WM_NCMOUSELEAVE, но после создания окна, если я перемещаю курсор над неклиентской областью, WINPROC получит WM_NCMOUSELEAVE один раз и только один раз Я не знаю почему. Поэтому я отправляю вопрос. Я попытался вызвать TrackMouseEvent с TME_CANCEL, чтобы предотвратить это сообщение, но он не работает. Моя система WINXP с sp3. – cyberscorpio
Когда вы вызываете TrackMouseEvent()? Согласно Документации в MSDN, если мышь не находится в соответствующей области окна во время ее вызова, она выведет сообщение один раз, а затем выйдет. Попробуйте добавить обработчик WM_NCMOUSEMOVE к вашему WndProc и настроить свой вызов на TrackMouseEvent() там, если он еще не активен. После того, как вы получили уведомление WM_NCMOUSELEAVE, вы должны вызвать его снова в следующем сообщении WM_NCMOUSEMOVE. – meklarian
Вот ссылка для TrackMouseEvent(). http://msdn.microsoft.com/en-us/library/ms646265(VS.85).aspx – meklarian