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

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

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

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


person Alf Zimmerman    schedule 03.10.2008    source источник
comment
Разве ты уже не спрашивал об этом? Может быть, удалить один из вопросов?   -  person Aardvark    schedule 03.10.2008
comment
Спасибо за ваш ответ Ардвар. Кроме того, я попытался закрыть предыдущий вопрос, но я не думаю, что мне еще разрешено это делать.   -  person Alf Zimmerman    schedule 03.10.2008


Ответы (2)


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

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

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

person Aardvark    schedule 03.10.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)));
person Alf Zimmerman    schedule 03.10.2008