【发布时间】:2013-02-05 00:34:54
【问题描述】:
我正在尝试为我的应用实现放大功能。 这个想法是当我选择放大时,图形应该水平扩展 2 倍大,这样只有一半的图形会显示在窗口中,尽管窗口大小,但需要滚动才能看到另一半。
我有一个缩放系数的缩放变量。然后在 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();
}
当我运行它时,我可以让窗口正确地绘制图形的一半,并指示只显示图形的一半的滚动条。但是当我尝试滚动它时,它会回到原来的位置(左下角)并且图表的另一半不会显示出来。
【问题讨论】:
-
这是一个什么样的应用程序?它是基于对话框还是 SDI/MDI。在后一种情况下,您需要做的就是扩大用于绘制图形的视图的大小(使用 MoveWindow())。滚动条会自动出现在主机上。
-
我在做 MDI。我试图添加 MoveWindow(rect.left, rect.top,rect.Width(), rect.Height(),true);到 onToolsZoomin,但仍然无法正常工作。 (我也尝试通过 2*rect.width() 和 rect.width()/2)。看起来原始图形将被拆分为两个,但如果我用 rect.width()/2 调用它,它们仍然在同一个窗口中可见。
标签: visual-c++ mfc