Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Отрисовка gdi со скроллированием


Автор: M_A_Y_ 26.3.2008, 10:20
Всем привет.
У меня есть некий объект (в данном случае N-арное дерево) которое надо нарисовать в диалоговом окне (средствами GDI). Если дерево слишком большое то определенная часть его обрезается и добавляются полосы прокрутки. Внимание вопрос. мне получается надо добавить некий контрол в котором я потом буду рисовать это рас, тоесть будут отсекаться не нужные части.  Как реализовать скролл? Заранее всем спасибо.

Автор: korian 26.3.2008, 10:25
если совсем не мучаться - CTreeCtrl/CTreeView
а если надо помучаться, то CScrollView

Автор: M_A_Y_ 26.3.2008, 11:34
А можно поподробней? тоесть я завожу контрол CTreeCtrl наследую его например от CWnd и уже в нем рисую, а в далоге обработчики скроллеров, и сообщение контролу на перерисовку, так?

Автор: Andrey44 26.3.2008, 11:52
Зачем тебе заводить контрол, да еще и наследовать от кого-то?
Если тебе средствами GDI, то просто надо как-то рекурсивно рисовать линии, 
как в дереве.
И смотреть по координатам, если выходим за пределы окна показываем CScrollView.

Автор: M_A_Y_ 26.3.2008, 12:05
У меня диалог (CDialog)! как предлагаешь "показываем CScrollView"? в том-то и дело что мне в диалоге надо выделить часть, в которой будет рисоватсья дерево

Автор: Andrey44 26.3.2008, 12:17
Хорошо, нарисовать на своем диалоге дерево сможешь?
А потом разберемся со скролом smile 

Автор: M_A_Y_ 26.3.2008, 13:14
ну дерево на диалоге я уже нарисовал. тупо сверху, рисуется на OnPaint()

Автор: Andrey44 26.3.2008, 13:50
Теперь кидай на свой диалог CScrollBar  smile 

Автор: M_A_Y_ 26.3.2008, 16:53
Как? я завел два скролла  вертикальный и горизонтаьлный

Автор: Andrey44 27.3.2008, 09:51
Теперь делай проверку если координаты рисунка выходят за пределы окна показывай или один или другой скролл

Автор: M_A_Y_ 27.3.2008, 16:38
Проверка есть, Как сделать обработчик сообщенйи WM_HSCROLL, WM_HSCROLL?

Автор: M_A_Y_ 27.3.2008, 17:30
Все, получилось. 

Код

ON_MESSAGE( WM_HSCROLL, OnScroll )

// и функция
LRESULT CDialogClass::OnScroll(WPARAM wParam, LPARAM lParam)
{
// ...
}


Дальше уже разберусь. Спасибо.

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