2013-02-20 3 views
0

Я пытаюсь реализовать функцию масштабирования для своего приложения. Идея заключается в том, что я решил увеличить масштаб, график должен расширяться горизонтально в 2 раза больше, так что в окне будет отображаться только половина графика, и нужно будет прокрутить, чтобы увидеть другую половину, несмотря на размер окна ,C++ MFC scrollbar не может прокручивать

У меня есть переменная масштабирования для коэффициента масштабирования. Тогда в OnDraw (CDC & Pdc):

//...set pen and others... 
CRect rect; 
GetClientRect(rect); 
for (int x=0; x < zoomFactor*rect.Width(); x++) 
    //....draw the graph 

затем в onToolsZoomin():

void CMyGraphView::OnToolsZoomin() 
{ 
    zoom *= 2; 
    CRect rect; 
    GetClientRect(rect); 
    CSize sizeTotal; 
    sizeTotal.cx = zoom*rect.Width(); 
    sizeTotal.cy = 0; 
    SetScrollSizes(MM_TEXT, sizeTotal); 
    this->RedrawWindow(); 
} 

Когда я запускаю это, я могу иметь окно правильно нарисовать половину графика и скроллинга, которые указывают показана только половина графика. Но когда я пытаюсь прокрутить его, он возвращается к исходной позиции (внизу слева), а другая половина графика не будет отображаться.

+0

что это за приложение? Является ли это диалогом, или SDI/MDI. В последнем случае все, что вам нужно сделать, - это увеличить размер View, который вы используете, чтобы нарисовать график (используя MoveWindow()). Полосы прокрутки автоматически появятся на мэйнфрейме. – cha

+0

Я делаю MDI. Я попытался добавить MoveWindow (rect.left, rect.top, rect.Width(), rect.Height(), true); toToolsZoomin, но все еще не работает. (я также попытался передать 2 * rect.width() и rect.width()/2). Похоже, что исходный граф будет разделен на два, но оба они все еще видны в том же окне, если я вызываю его с помощью rect.width()/2. – LoveProgramming

ответ

0

Параметры в обеих функциях не совпадают. Это может быть первой причиной проблемы. Можете ли вы поместить код, который предположительно должен назвать OnToolsZoomin, пожалуйста? Обработано ли это через сообщение WM_VSCROLL или WM_HSCROLL? Является ли ваша функция OnToolsZoomin вообще? Правильно ли вы прокручиваете панель (диапазон прокрутки)?

+0

Параметр был опечаткой. Это одно и то же. извините за это :) OnToolsZoomin генерируется добавлением обработчика событий в MyGraph.rc-> Menu-> IDR_MyGraphTYPE. Я уверен, что это называется, потому что каждый раз, когда я нажимаю кнопку увеличения, я получаю половину исходного графика, а полоса прокрутки также уменьшается до половины. Просто, я не могу ее прокрутить. – LoveProgramming

Смежные вопросы