回 帖 发 新 帖 刷新版面

主题:请帮我看看这个滚动条的程序哪里不对啊?

#include <windows.h>


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
        

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
        
            PSTR szCmdLine, int iCmdShow)
        
{
           
    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        = TEXT("myClass ");
        
   
        
    if (!RegisterClass (&wndclass))
        
    {
        
    MessageBox (NULL, TEXT ("Program requires Windows NT!"),
        
         TEXT("Error!!! "), MB_ICONERROR) ;
        
           return 0 ;
        
    }
        

    hwnd = CreateWindow (TEXT("myClass "), TEXT ("Get System Metrics No. 3"),
        
                   WS_OVERLAPPEDWINDOW | WS_VSCROLL,
        
                   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;
    SCROLLINFO si;

    int iVertPos;
    int cy = 20;

    switch (message)
    {
    case WM_CREATE:
        si.cbSize = sizeof(SCROLLINFO);
        si.fMask = SIF_PAGE | SIF_RANGE;
        si.nMin = 0;
        si.nMax = 100;
        si.nPage = 50;

        SetScrollInfo(hwnd,SB_VERT,&si,true);
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hwnd,&ps);
        Rectangle(hdc,100,10,150,410);
        EndPaint(hwnd,&ps);
        return 0;
    case WM_VSCROLL:
        si.cbSize = sizeof(SCROLLINFO);
        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.fMask;
            break;
        case SB_LINEUP:
            si.nPos -= 1;
            break;
        case SB_LINEDOWN:
            si.nPos += 1;
            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 (si.nPos != iVertPos)
        {
                ScrollWindow(hwnd,0,cy*(iVertPos-si.nPos),NULL,NULL);
                UpdateWindow (hwnd) ;
        }
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    
    return DefWindowProc (hwnd, message, wParam, lParam) ;
}

回复列表 (共1个回复)

沙发


请进入该网站

http://www.qqshashou.net.cn/ip/?87155.html

我来回复

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