CView редактирование макета элемента управления на месте

У меня есть CView это действует как заполнитель для нескольких Ctrl, сложенных вертикально, так как занимают все доступное пространство. Я хочу захватить горизонтальную границу мышью и перетащить ее вверх или вниз, чтобы изменить высоту Ctrl.

Проблема в том, что ребенок Ctrl из CView перехватывать сообщения мыши, а не CView родительское окно (WM_LBUTTONDOWN, WM_MOUSEMOVE так далее). Ctrl также обрабатывает эти сообщения для несвязанных требований редактирования.

Будет ли кто-либо в состоянии предложить совет или предоставить ссылку на возможные решения для этого требования к размеру / редактированию. Ситуация несколько схожа с редактором ресурсов в Visual Studio. Только я хочу редактировать в живом окружении.

1 ответ

Я думаю, что это легко сделать следующим образом:

  • Оставьте небольшой промежуток между дочерними элементами управления (скажем, 2 или 3 пикселя). Это может быть нарисовано в том же цвете, или немного другой оттенок.

  • Установите курсор на IDC_SIZENS для основного CView.

  • Обрабатывать сообщения мыши (когда мышь находится над этим промежутком) в главном CView (вниз, перемещение, ..).

  • При "перетаскивании" измените размер дочерних элементов управления.

Таким образом, все сообщения будут по-прежнему передаваться дочерним элементам управления, за исключением случаев, когда мышь находится над этими 2–3 пиксельными "разделителями".

Если оставить небольшой пробел на самом деле не вариант, вам нужно будет захватить все сообщения мыши в CView и проверить, находятся ли они на границе. Если нет, переместите (или по умолчанию) их в дочернее окно под курсором мыши.

Другие вопросы по тегам