【问题标题】:C++ MFC scrollbar cannot scrollC++ MFC滚动条不能滚动
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 参数是一个错字。他们是一样的东西。对此感到抱歉:) OnToolsZoomin 是通过在 MyGraph.rc->Menu->IDR_MyGraphTYPE 中添加事件处理程序生成的。我确定它被调用是因为每次单击放大时,我都会得到原始图形的一半,滚动条也缩小到一半。只是我无法滚动它。
猜你喜欢
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多