我遇到类似的问题: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);
}
所以我怀疑,我试图将滚动条设置在错误的位置,或者做错了什么?我感谢任何帮助。
答案 0 :(得分:2)
在创建窗口(及其滚动条)之前调用PreCreateWindow。在视图类中,您应该在OnInitialUpdate中进行初始化。这是在创建窗口之后但在窗口变为可见之前调用的。
答案 1 :(得分:0)
我认为设置滚动条PreCreateWindow()
为时尚早,"正确"当你的CDocument派生类加载/修改了影响滚动条范围的数据时,就会出现这种情况。