Создание линейки в MFC - PullRequest
       13

Создание линейки в MFC

1 голос
/ 03 октября 2008

Как лучше всего создавать вертикальные и горизонтальные линейки в приложении SDI? Вы бы сделали это частью кадра или вида? Получите его из CControlBar, или есть лучший метод?

Вертикальная линейка также должна быть пристыкована к панели, а не к раме.

Чтобы немного яснее понять, что мне нужно, представьте вертикальную линейку в редакторе диалоговых окон в Visual Studio (только MFC). Он перемещается всякий раз, когда изменяется размер дерева.

Ответы [ 2 ]

1 голос
/ 03 октября 2008

Я бы не использовал панели управления. У меня нет веской причины, иначе (IMOHO) трудно заставить делать то, что вы хотите - если то, что вы хотите, если что-то другое, чем панель инструментов стыковки.

Я бы просто нарисовал их прямо в окне просмотра, используя вызовы GDI.

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

0 голосов
/ 04 октября 2008

В итоге я вывел линейку из CWnd, как вы предложили, и пропустил маршрут панели управления. Этот код работает в любом случае:

m_wndSplitter.CreateStatic(this, 1, 3);

m_wndLeftPane.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 0));
m_ruler.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1));

m_wndSplitter.CreateView(0, 2, pContext->m_pNewViewClass, CSize(300, 0), pContext);
SetActiveView((CScrollView*)m_wndSplitter.GetDlgItem(m_wndSplitter.IdFromRowCol(0, 2)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...