if(si.npos!=iHorzPos){
    Scrollwindow(hwnd,cxchar*(iHorzPos-si.nPos),0,NULL,NULL)
    //这里不明白为什么水平滚动的时候不需在下面写Updatewindow(hwnd);    //垂直滚动的处理时候却要加上重绘处理??? 不明白}
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*(1-iHorzPos);  //这里为什么要这里处理。希望大神这里讲明白些    y=cyChar*(i-iVertPos);  //还有这里也是 不明白里面是i不是1.
TextOut(hdc,x,y,
            sysmetrics[i].szLabel,
              lstrlen(sysmetrics[i].szLabel));
TextOut(hdc,x+22*cxCaps,y,
               sysmetrics[i[.szLabel,
                lstrlen(sysmetrics[i].szDesc));
    SetTextAlign(hdc,TA_RIGHT|TA_TOP);
TextOut(hdc,x+22*cxCaps+40*cxChar,y,szBuffer,
                wsprintf(szBuffer,TEXT("%5d"),
                GetSystemMetrics(sysmetrics[i].iIndex)));    SetTextAlign(hdc,TA_LEFT|TA_TOP);}
EndPaint(hwnd,&ps);
return 0;

解决方案 »

  1.   

        //这里不明白为什么水平滚动的时候不需在下面写Updatewindow(hwnd);    //垂直滚动的处理时候却要加上重绘处理??? 不明白水平滚动没触发Scrollwindow函数吧?垂直触发的吧?
      

  2.   

    for(i=iPaintBeg;i<=iPaintEnd;i++){
        x=cxChar*(1-iHorzPos);  //这里为什么要这里处理。希望大神这里讲明白些    y=cyChar*(i-iVertPos); 这里您知道嘛??