
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) ;
虽然和问题没太大关系,还是改一下好。 展开
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) ;
虽然和问题没太大关系,还是改一下好。 展开
展开全部
ScrollWindow这个函数主要是用于滚动条的自动滚动到一个位置,可能的用途是:阅读电子书的时候自动定位到上次关闭程序的位置。
追问
那就是说在这里是多余的喽。
追答
是的
展开全部
我也碰到和你一样的困惑~~但是我觉得在这里好像不是多余的,因为我用InvalidateRect(hwnd, NULL, TRUE);替换它之后,虽然也能实现同样的效果,但是会有屏幕闪烁,但是用ScrollWindow就不会有,原因我也正在探索中。。并且在这个例子中使用的是ScrollWindow+UpdateWindow,我反而觉得UpdateWindow没什么用,网上查询的结果好像是说可以加快绘制速度,原因呢偶也没看明白。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询