Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как создать Splitter


Автор: Belous 8.11.2015, 02:54
Проект создаю на C++, используя только чистый WinAPI без MFC и без ресурсов.
Как создать разделитель окна на две части. Предполагаю сделать окно шириной в два пикселя а затем прописать всю логику его событий. Или как-то нужно по-другому? Может у кого-нибудь есть ссылки на примеры?

Автор: GremlinProg 8.11.2015, 09:03
В принципе - можно. Стандартного такого компонента нет, так что да, придется самому описать всю логику через WinAPI, либо перейти на движок помощнее. А в чем на данном этапе проблемы?

Добавлено через 5 минут и 12 секунд
Первые же ссылки в гугле конечно дают много решений: http://stackoverflow.com/questions/5561236/win32-splitter-control
в том числе и на codeproject: http://www.codeproject.com/KB/splitter/

но я не заметил там чистых решений через WinAPI, так что, если есть вопросы или какой-то продуктивный ход решений, выкладывайте, есть проблемы - поможем (писать, конечно, ни кто за Вас не будет)

Добавлено через 8 минут и 15 секунд
Хотя, вот один из ответов ведет на WinAPI: http://old.sumitbirla.com/software/splitter.php
Я бы наверное попридирался, но важна в первую очередь задача, которую он решает.
Если этого достаточно - хорошо, нет - опишите проблемы.

Автор: spSerg 8.11.2015, 13:29
Окно создавать нужно не два пикселя, а на всю ширину двух обслуживаемых окон, которые буду изменять размер как дочерние. А самому рисовать только два пикселя, которые не будут закрываться дочерними. Получится структура:
MainWnd(Splitter(LeftWnd,Right))

Но все же лучше воспользоваться легковесной библиотекой. Например WTL, которая дает мощную, но легкую функциональную обертку над WinAPI, в отличие от монолитного MFC.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Kak-sozdat-Splitter-id563e8fceae2015fa3f8b4567#findElement_E7045_563f2409ae201581088b4964_0

Автор: Belous 10.11.2015, 22:37
Спасибо за ссылки и советы. Буду пробовать.

PS Хотел плюсики поставить но постов у меня мало.

Автор: Belous 7.9.2017, 12:38
Я так понял, что нужно отслеживать координаты курсора и по надобности менять изображение курсора. По другому не получается. Введение дополнительных окон и попытка переложить часть функционала на них - довольно бесполезное занятие. Описывая весь функционал в окне родителе - долго, кропотливо, на мой взгляд не правильно - но так задумано создателями WinAPI.

Автор: Belous 7.9.2017, 12:39
Спасибо

Автор: GremlinProg 8.9.2017, 13:21
Цитата(Belous @  7.9.2017,  14:38 Найти цитируемый пост)
Я так понял, что нужно отслеживать координаты курсора и по надобности менять изображение курсора

да, примерно так: за это отвечает уведомление https://msdn.microsoft.com/en-us/library/windows/desktop/ms648382(v=vs.85).aspx

Цитата

The DefWindowProc function passes the WM_SETCURSOR message to a parent window before processing. If the parent window returns TRUE, further processing is halted. Passing the message to a window's parent window gives the parent window control over the cursor's setting in a child window. The DefWindowProc function also uses this message to set the cursor to an arrow if it is not in the client area, or to the registered class cursor if it is in the client area. If the low-order word of the lParam parameter is HTERROR and the high-order word of lParam specifies that one of the mouse buttons is pressed, DefWindowProc calls the MessageBeep function.


В ответ на это сообщение можно вызвать https://msdn.microsoft.com/en-us/library/windows/desktop/ms648393(v=vs.85).aspx с нужным Вам курсором, если координаты переданные в этом сообщении принадлежат сплиттеру

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)