SillyMe 发表于 2017-10-16 02:57:55

SCROLLINFO 滚动的问题

垂直滑动块

通过 SCROLLINFO 来滚动

在 WM_CREATE 消息中获得
    1.字体宽度
    2.字体高度
        3.变宽字体宽度

在 WM_SZIE 消息中获得
        1.客户区宽度
        2.客户区高度
       
        3.设置 SCROLLINFO 结构 最大值 最小值 一页需要移动的记录(客服区高度/字体高度)
       
        4.使用 SetScrollInfo(hwn, SB_VERT, &si, TRUE);进行保存设置
       
在 WM_VSCROLL 消息中改变 滑块的位置

        1.获得当前滑块的位置
        2.对滑块事件做偏移处理
        3.保存滑块的位置
        4.对比滑块的位置是否改变
                1.滚动窗口 ScrollWindow(hwnd, 0, (改变前的位置 - 改变后的位置)*字体高度, NULL, NULL);
                2.更新窗口 UpdateWindow(hwnd);
               
在 WM_PAINT 消息 中处理
       
        0.获得设备环境句柄hdc 及 填充 PAINTSTRUCT 结构
       
        1.获得当前滑块的位置
       
        2.计算出失效区域的信息
                1. 失效区域开始 = max(0, 滑块的位置 + 失效区域的顶部/字体高度)
                                保证 开始索引 最小 为 0
                               
                2.失效区域开始 = min(MUNLINES - 1, 滑块的位置 + 失效区域的底部/字体高度)
                                保证 开始索引 最大 为 MUNLINES - 1
                               
        从上面我们获得了 需要重新 绘制 的索引
       
        然后开始 绘制
       
                TextOut(hdc, X轴距, Y轴距, 需要重绘的信息, 重绘信息的数量)
               
                        X 轴 是 关于 水平 滑动条的 我们这里 无视
               
                        *重点 Y 轴距
                                怎么确定需要重绘的区域
                          视频里是 (i-yPos)*yChar;
                                看不明白???? 哪位大佬帮讲讲 谢谢了!!!!
       

BngThea 发表于 2017-10-27 16:24:36

(i-yPos)*yChar
首先,yChar 表示的是每行的高度
为什么是 i - yPos ?
i 表示的是文本的第 i 行
yPos此时表示垂直滚动条的位置
因为是往上滚动时应该为负数,此时行数变为:i +(- yPos)
往下滚动时应该为正数,此时行数变为: i - (+ yPos)
很明显,两种情况都可以写作 i - yPos
页: [1]
查看完整版本: SCROLLINFO 滚动的问题