2 hustis1403 HUSTIS1403 于 2016.02.22 22:15 提问

WINDOWS程序设计 ScrollWindow为什么一个地方update而另一个地方没有
case WM_VSCROLL:
    si.cbSize = sizeof(si);
    si.fMask = SIF_ALL;
    GetScrollInfo(hwnd, SB_VERT, &si);

    iVertPos = si.nPos;
    switch (LOWORD(wParam))
    {
    case SB_TOP:
        si.nPos = si.nMin;
        break;
    case SB_BOTTOM:
        si.nPos = si.nMax;
        break;
    case SB_LINEUP:
        si.nPos -= 1;
        break;
    case SB_LINEDOWN:
        si.nPos += 1;
        break;
    case SB_PAGEUP:
        si.nPos -= cyClient / cyChar;
        break;
    case SB_PAGEDOWN:
        si.nPos += cyClient / cyChar;
        break;
    case SB_THUMBTRACK:
        si.nPos = si.nTrackPos;
        break;
    default:break;
    }

    si.fMask = SIF_POS;
    SetScrollInfo(hwnd, SB_VERT, &si, TRUE);

    if (si.nPos != iVertPos)
    {
        ScrollWindow(hwnd, 0, cyChar*(iVertPos - si.nPos), NULL, NULL);
        UpdateWindow(hwnd);//为什么这儿用了update后面没有用  这儿删除 效果上感觉没有变化。
    }
    return 0;

case WM_HSCROLL:
    si.cbSize = sizeof(si);
    si.fMask = SIF_ALL;
    GetScrollInfo(hwnd, SB_HORZ, &si);

    iHorzPos = si.nPos;

    switch (LOWORD(wParam))
    {
    case SB_TOP:
        si.nPos = si.nMin;
        break;
    case SB_BOTTOM:
        si.nPos = si.nMax;
        break;
    case SB_LINELEFT:
        si.nPos -= 1;
        break;
    case SB_LINERIGHT:
        si.nPos += 1;
        break;
    case SB_PAGELEFT:
        si.nPos -= cxClient / cxChar;
        break;
    case SB_PAGERIGHT:
        si.nPos += cxClient / cxChar;
        break;
    case SB_THUMBPOSITION:
        si.nPos = si.nTrackPos;
        break;
    default:
        break;
    }

    si.fMask = SIF_POS;
    SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);
    GetScrollInfo(hwnd, SB_HORZ, &si);

    if (si.nPos != iHorzPos)
    {
        ScrollWindow(hwnd, cxChar*(iHorzPos - si.nPos), 0, NULL, NULL);//此处有疑问 为什么不需要update而前面需要。
    }
    return 0;

2个回答

caozhy
caozhy   Ds   Rxr 2016.02.22 22:18
已采纳

估计是作者忘记删除上面的了。这两个代码,一个是垂直滚动,一个是水平滚动,仅仅这点差异。

caozhy
caozhy   Ds   Rxr 2016.02.22 22:17

其实不需要,因为滚动窗体本身会触发wm_paint,不需要UpdateWindow

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MVC 用户只能登陆一次 另一个地方登陆强制下线
#region seesion,保证同一次会话的SessionID不变         protected void Session_Start(object sender, EventArgs e)          { }         protected void Session_End(object sender, EventArgs e)         {
元素拖拽到另一个地方
很多时候,发现页面弹出的显示框能够挪动,如何实现呢? 其实就是事件监听罢了。 思路:1,因为可以拖动,所以该元素的定位是绝对定位而不是相对定位; 2,当鼠标按下时才可以拖动,需要鼠标点击动作,onmousedown; 3,鼠标移动时元素跟随鼠标移动,onmousemove; 4,鼠标抬起时元素不在可以拖动;onmouseup; 5,鼠标移动的横纵长度可用鼠标移动中得到坐标减去该元素的l
终于找到一个写日记的地方了
 早就想写写日记了,可是字写的太难看,又有点懒,就一直拖着没写。今天终于找到一个地方记下我的心情,而且又不用担心字难看,真是太好了。心情很好哦!希望每天都有时间来记下我的点点滴滴!更希望有一天他能看到我的点点滴滴!老天,保佑我吧,我会努力的!一定! 
什么是聚集索引和非聚集索引? 分布介绍一下
 (1)非聚集索引非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。典型的桌面数据库使用的是非聚集索引。在这类索引中,索引键值是有序的,而每个索引节点所指向的数据行是无序的。一个SQL
被ScrollWindow折腾出来的——关于区域、重画、无效、WM_PANIT等
 =========================ScrollWindow原型========================BOOL ScrollWindow(             HWND hWnd,    int XAmount,    int YAmount,    const RECT *lpRect,    const RECT *lpClipRect);参数: xAmoun
java web实现同一账号同一时间只能在一个地方登录
网上看了很多方法,个人也看了,自己也总结了几个比较常用的:           前提都是用session监听器,对session的创建与销毁进行监听       一、在用户登录时保存该用户的状态有这几种保存方式:          1、保存到内存中(application ,servletcontext ,个人也是推荐这种方式)          2、保存状态到数据库,至于具体的怎么保存你
年终总结——一个阶段的结束,另一个阶段的开始
随着秋收的季节,我也应该跳上收获的列车来一一细数自己这一年里散落的珍珠,将他们一一排好,用时间的线轴将他们串成那一串美妙的珍珠。
实现类似QQ单一账户登录,在另一个地方登录后在原登录窗口提示下线
原文:http://www.cnblogs.com/shixudong/p/3342337.html 首先,使用框架做的最好,可以在框架页直接做一次就好了 再登陆成功后保存session的代码后添加以下代码: 注意:需要引入命名空间using System.Collections; SetApplication("Online", clientContext.UserI
Java 练习把一个文件从一个地方剪切到另一个地方
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;
vs调试时,没有断点在某处停下
问题描述: vs调试的