CScrollbar SetScrollInfo无效

时间:2014-08-18 12:15:01

标签: c++ mfc scrollbar

我遇到类似的问题:How do you use MFC CScrollbar controls?但我发现我的ON_WM_VSCROLL消息发送参数nPos始终等于0.我认为我应该设置滚动条{ {1}}方法或至少与SetScrollInfo一起使用,我尝试在View类函数的SetScrollRange中执行此操作(源自PreCreateWindow())。

然而,滚动条似乎无法从CFormView结构中获取数据。

以下是我的代码示例:

SCROLLINFO

VSCROLL消息处理程序:

  BOOL CInterfaceView::PreCreateWindow(CREATESTRUCT& cs)
   {
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs
    drawphoto=false;  //other unrelated variables;
    zoomfactor=1.0;

    info1.cbSize=sizeof(SCROLLINFO); //SCROLLINFO global variable
    info1.fMask=SIF_ALL;
    info1.nMin=0;
    info1.nMax=100;
    info1.nPage=2;
    info1.nPos=5;
    info1.nTrackPos=2;

    ScrollBar1.SetScrollInfo(&info1);   //the vertical ScrollBar
//  ScrollBar1.SetScrollRange(0,100);   //this has no effect either
    return CFormView::PreCreateWindow(cs);
}

所以我怀疑,我试图将滚动条设置在错误的位置,或者做错了什么?我感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

在创建窗口(及其滚动条)之前调用PreCreateWindow。在视图类中,您应该在OnInitialUpdate中进行初始化。这是在创建窗口之后但在窗口变为可见之前调用的。

答案 1 :(得分:0)

我认为设置滚动条PreCreateWindow()为时尚早,"正确"当你的CDocument派生类加载/修改了影响滚动条范围的数据时,就会出现这种情况。