2013-02-20 88 views
0

我想实现一个放大功能,我的应用程序。 这个想法是当我选择放大时,图形应该水平放大2倍,以便只有一半的图形将显示在窗口中,并且需要滚动以查看另一半,尽管窗口的大小。C++ MFC滚动条不能滚动

我有一个变焦因子缩放变量。然后在的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。在后一种情况下,您需要做的只是扩大您用于绘制图形的视图的大小(使用MoveWindow())。滚动条将自动出现在大型机上。 – cha 2013-02-20 06:14:24

+0

我正在做MDI。我试图添加MoveWindow(rect.left,rect.top,rect.Width(),rect.Height(),true);到onToolsZoomin,但仍然无法正常工作。 (我也试过传递2 * rect.width()和rect.width()/ 2)。它看起来像原始图将被拆分为两个,但如果我用rect.width()/ 2调用它,它们在同一个窗口中仍然可见。 – LoveProgramming 2013-02-20 15:24:56

回答

0

这两个函数中的参数都不一样。这可能是问题的第一个原因。 你可以把这个代码打给OnToolsZoomin吗?它是通过WM_VSCROLL还是WM_HSCROLL消息处理的? 你的函数OnToolsZoomin是否被调用? 您的滚动条是否已正确初始化(滚动范围)?

+0

该参数是一个错字。他们是一样的东西。对此感到抱歉:) OnToolsZoomin是通过在MyGraph.rc-> Menu-> IDR_MyGraphTYPE中添加事件处理程序生成的。我确定它被调用,因为每次我点击放大,我得到原始图的一半,滚动条也缩小到一半。只是我无法滚动它。 – LoveProgramming 2013-02-20 15:08:09