win32: 查询滚动条相关信息的注意事项
今天打算判断一个窗口是否出现垂直滚动条,我的代码:
SCROLLINFO si; //滚动条信息结构体
si.cbSize = sizeof(SCROLLINFO); //必须
si.fMask = SIF_ALL;
GetScrollInfo(hwnd_frame_preview, SB_VERT, &si);
printf("si.nPage:%d\n", si.nPage);
printf("si.nPos:%d\n", si.nPos);
printf("si.nMin:%d\n", si.nMin);
printf("si.nMax:%d\n", si.nMax);
if(si.nPage > 0)
{
printf("有垂直滚动条\n");
}
else
{
printf("没有垂直滚动条\n");
}
但测试的时候发现,当没有显示滚动条的时候,si.nPage, si.nPos, si.nMin, si.nMax 返回的值都很奇怪,并不是我想像中的 0
输出结果:
si.nPage:2010220586
si.nPos:0
si.nMin:2010220634
si.nMax:2290948
si.nPage:2010220586
si.nPos:0
si.nMin:2010220634
si.nMax:2290948
从这样的输出结果看,如果使用 si.nPage 来判断有没有垂直滚动条已不准确了。
后来试了一下 GetScrollRange()
int nMin,nMax;
GetScrollRange(hwnd_frame_preview,SB_VERT,&nMin,&nMax);
printf("nMin:%d\n",nMin);
printf("nMax:%d\n",nMax);
输出结果:
nMin:0
nMax:0
看来,以后还是使用GetScrollRange()靠谱。
2013-08-29