Раскрывающееся окно выпадающего списка может отображаться за пределами окна выпадающего списка, как? - PullRequest
3 голосов
/ 30 ноября 2010

в окнах, как сделать «дочернее» окно за пределами родительского окна, а родительское окно всегда в активном состоянии (GetActiveWindow () возвращает родителя), как выпадающее окно выпадающего списка.

1 Ответ

1 голос
/ 03 декабря 2010

Я думаю, что это основные моменты при попытке сделать это:

  • Всплывающее окно - это окно верхнего уровня, у которого тот же родительский элемент, что и у элемента управления.(т.е. всплывающее окно не является дочерним элементом элемента управления. Это вовсе не дочернее окно; это окно верхнего уровня, но оно не имеет толстой границы окна и т. д., поэтому оно не выглядит как обычный верхнийокно уровня.) Именно поэтому оно может выходить за пределы элемента управления.

  • Когда создается всплывающее окно, оно отображается с помощью ShowWindow (hWndPopup, SW_SHOWNA), поэтому оно не принимаетфокус ввода.Это предотвращает отключение родительского окна.

  • Когда всплывающее окно создано, вы захватываете мышь с помощью SetCapture.Затем вы отслеживаете, где находится мышь, и выделяете элементы во всплывающем окне, когда мышь перекрывает их.При нажатии кнопки мыши вы воздействуете на все, что находится под мышью (или отменяете всплывающее окно, если мышь не находится над ним вообще).Не забудьте ответить на WM_CAPTURECHANGED, если что-то еще захватывает мышь.И не забудьте ReleaseCapture, когда вы закончите.

  • Всплывающее окно должно обрабатывать WM_MOUSEACTIVATE путем возврата MA_NOACTIVATEANDEAT.

...