Windows API Scroll Window 函数

在一个程序里,同时有一个ScrollWindow:ScrollWindow(hwnd,0,cyChar*(iVertPos-si.nPos),NULL,NULL);//这... 在一个程序里,同时有一个ScrollWindow:
ScrollWindow (hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL) ;
//这里iVertPos是滚轮之前的坐标(改变之前)
和一个根据滚轮坐标显示文字的TextOut:
case WM_PAINT :

hdc = BeginPaint (hwnd, &ps) ;
si.cbSize = sizeof (si) ;
si.fMask = SIF_POS ;
GetScrollInfo (hwnd, SB_VERT, &si) ;
iVertPos = si.nPos ;
GetScrollInfo (hwnd, SB_HORZ, &si) ;
iHorzPos = si.nPos ;
iPaintBeg = max (0, iVertPos + ps.rcPaint.top / cyChar) ;
iPaintEnd = min (NUMLINES -1, iVertPos + ps.rcPaint.bottom / cyChar) ;
for (i = iPaintBeg ; i <= iPaintEnd ; i++)
{
x = cxChar * (i - iHorzPos) ;
y = cyChar * (i - iVertPos) ;
TextOut (hdc, x, y, sysmetrics[i].szLabel, lstrlen (sysmetrics[i].szLabel)) ;
}

这里sysmetrics是一个自定义的结构。
cyChar是字体高度
cxChar--字体宽度

那么ScrollWindow算不算多余啊,因为下面已经可以根据改变显示字体了。
那么Scrollwindow有什么作用呢?
还有就是它的一个参数应该可以是负的吧。
这里:
for (i = iPaintBeg ; i <= iPaintEnd ; i++)
{
x = cxChar * (i - iHorzPos) ;
y = cyChar * (i - iVertPos) ;
TextOut (hdc, x, y, sysmetrics[i].szLabel, lstrlen (sysmetrics[i].szLabel)) ;
}

中 x = cxChar * (i - iHorzPos) ;
应该是:x = cxChar * (1 - iHorzPos) ;
虽然和问题没太大关系,还是改一下好。
展开
 我来答
chzhn
2012-08-02 · TA获得超过5345个赞
知道大有可为答主
回答量:2951
采纳率:0%
帮助的人:1530万
展开全部
ScrollWindow这个函数主要是用于滚动条的自动滚动到一个位置,可能的用途是:阅读电子书的时候自动定位到上次关闭程序的位置。
追问
那就是说在这里是多余的喽。
追答
是的
苗驳源师大君4231
2013-03-08 · TA获得超过146个赞
知道答主
回答量:80
采纳率:0%
帮助的人:48万
展开全部
我也碰到和你一样的困惑~~但是我觉得在这里好像不是多余的,因为我用InvalidateRect(hwnd, NULL, TRUE);替换它之后,虽然也能实现同样的效果,但是会有屏幕闪烁,但是用ScrollWindow就不会有,原因我也正在探索中。。并且在这个例子中使用的是ScrollWindow+UpdateWindow,我反而觉得UpdateWindow没什么用,网上查询的结果好像是说可以加快绘制速度,原因呢偶也没看明白。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式