回 帖 发 新 帖 刷新版面

主题:我的水平滚动条为什么不能正常工作 为什么?

#include<windows.h>
#include"SYSMETS.H"
#include<string>
#pragma   comment(lib,   "winmm.lib")
using std::string;
LRESULT CALLBACK wndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdline,int ICmdShow){
    const TCHAR szAppName[]=TEXT("HelloWin");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndClass;
    wndClass.style=CS_HREDRAW|CS_VREDRAW;
    wndClass.lpfnWndProc=wndProc;
    wndClass.cbClsExtra=0;
    wndClass.cbWndExtra=0;
    wndClass.hInstance=hInstance;
    wndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndClass.lpszMenuName=NULL;
    wndClass.lpszClassName=szAppName;

    if(!RegisterClass(&wndClass)){
        MessageBox(NULL,TEXT("the window class can't be regist"),TEXT("HELLOWIN"),MB_ICONERROR);
        return 0;
    }
    
    hwnd=CreateWindow(szAppName,TEXT("我家养猪"),WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
    ShowWindow(hwnd,ICmdShow);
    UpdateWindow(hwnd);

    while(GetMessage(&msg,NULL,0,0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK wndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
    HDC hdc;
    PAINTSTRUCT ps;
    TCHAR lable[20];
    static int ixChar,iyChar,ixCaps,ixClient,iyClient,iVertPos,iHorzPos,iCountPigs,iPaintBeg,iPaintEnd;
    TEXTMETRIC tm;
    SCROLLINFO si;
    iCountPigs=100;
    
    switch(message){
        case WM_CREATE:
            PlaySound(TEXT("hellowin.wav"),NULL,SND_FILENAME|SND_ASYNC);
            hdc=GetDC(hwnd);
            GetTextMetrics(hdc,&tm);
            ixChar=tm.tmAveCharWidth;
            iyChar=tm.tmHeight+tm.tmExternalLeading;
            ixCaps=(tm.tmPitchAndFamily&1?3:2)*ixChar/2;
            ReleaseDC(hwnd,hdc);
            return 0;
        case WM_SIZE:
            ixClient=LOWORD(lParam);
            iyClient=HIWORD(lParam);
            si.cbSize=sizeof(si);
            si.fMask=SIF_RANGE|SIF_PAGE;
            si.nMin=0;
            si.nMax=iCountPigs;
            si.nPage=iyClient/iyChar;
            SetScrollInfo(hwnd,SB_VERT,&si,TRUE);
            si.cbSize=sizeof(si);
            si.fMask=SIF_RANGE|SIF_PAGE;
            si.nMin=0;
            si.nMax=1000;
            si.nPage=ixClient/ixCaps;
            SetScrollInfo(hwnd,SB_HORZ,&si,TRUE);
            return 0;
        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/iyChar);
            iPaintEnd = min(iCountPigs,iVertPos+ps.rcPaint.bottom/iyChar);
            for(int i=iPaintBeg;i<=iPaintEnd;i++){
                wsprintf(lable,"我家养了%i只猪",i);
                TextOut(hdc,0,iyChar*(i-iVertPos),lable,lstrlen(lable));
                TextOut(hdc,500,iyChar*(i-iVertPos),lable,lstrlen(lable));
                TextOut(hdc,1000,iyChar*(i-iVertPos),lable,lstrlen(lable));
            }
            EndPaint(hwnd,&ps);
            return 0;

        case WM_VSCROLL:
            si.cbSize=sizeof(si);
            si.fMask=SIF_ALL;
            GetScrollInfo(hwnd,SB_VERT,&si);
            iVertPos=si.nPos;
            switch(LOWORD(wParam)){
            case SB_LINEUP:
                si.nPos--;
                break;
            case SB_LINEDOWN:
                si.nPos++;
                break;
            case SB_PAGEUP:
                si.nPos-=si.nPage;
                break;
            case SB_PAGEDOWN:
                si.nPos+=si.nPage;
                break;
            case SB_THUMBTRACK:
                si.nPos=si.nTrackPos;
                break;
            default:
                break;
            }
            si.fMask=SIF_POS;
            SetScrollInfo(hwnd,SB_VERT,&si,TRUE);
            GetScrollInfo(hwnd,SB_VERT,&si);
            if(iVertPos!=si.nPos){
                ScrollWindow(hwnd,0,iyChar*(iVertPos-si.nPos),NULL,NULL);
                UpdateWindow(hwnd);
            }
            return 0;
        case WM_HSCROLL:
            si.cbSize=sizeof(si);
            si.fMask=SIF_ALL;
            GetScrollInfo(hwnd,SB_HORZ,&si);
            iVertPos=si.nPos;
            switch(LOWORD(wParam)){
            case SB_LINEUP:
                si.nPos--;
                break;
            case SB_LINEDOWN:
                si.nPos++;
                break;
            case SB_PAGEUP:
                si.nPos-=si.nPage;
                break;
            case SB_PAGEDOWN:
                si.nPos+=si.nPage;
                break;
            case SB_THUMBTRACK:
                si.nPos=si.nTrackPos;
                break;
            default:
                break;
            }
            si.fMask=SIF_POS;
            SetScrollInfo(hwnd,SB_HORZ,&si,TRUE);
            GetScrollInfo(hwnd,SB_HORZ,&si);
            if(iHorzPos!=si.nPos){
                ScrollWindow(hwnd,ixCaps*(iHorzPos-si.nPos),0,NULL,NULL);
                UpdateWindow(hwnd);
            }
            return 0;
        case  WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);
}

回复列表 (共2个回复)

沙发

原因是
for(int i=iPaintBeg;i<=iPaintEnd;i++){
                wsprintf(lable,"我家养了%i只猪",i);
                TextOut(hdc,0,iyChar*(i-iVertPos),lable,lstrlen(lable));
                TextOut(hdc,500,iyChar*(i-iVertPos),lable,lstrlen(lable));
                TextOut(hdc,1000,iyChar*(i-iVertPos),lable,lstrlen(lable));
            }
和 ScrollWindow(hwnd,ixCaps*(iHorzPos-si.nPos),0,NULL,NULL);
没有配对。。。

改成
            for(int i=iPaintBeg;i<=iPaintEnd;i++){
                wsprintf(lable,"我家养了%i只猪",i);
                TextOut(hdc,0-iHorzPos*ixCaps,iyChar*(i-iVertPos),lable,lstrlen(lable));
                TextOut(hdc,500-iHorzPos*ixCaps,iyChar*(i-iVertPos),lable,lstrlen(lable));
                TextOut(hdc,1000-iHorzPos*ixCaps,iyChar*(i-iVertPos),lable,lstrlen(lable));
            }
就好了

。。自问自答 见谅。。

板凳

寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
   我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料
网商咨询 摩客天宇QQ 909065437 

我来回复

您尚未登录,请登录后再回复。点此登录或注册