#include<windows.h>#define NUM 6
LRESULT CALLBACK WindowProc(HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
static TCHAR appName[]=TEXT("sun");
WNDCLASS wndclass;
MSG msg;
HWND hwnd;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor = NULL ; 
wndclass.hIcon = NULL ; 
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WindowProc;
wndclass.lpszClassName = appName ; 
wndclass.lpszMenuName = NULL ; 
wndclass.style = CS_VREDRAW | CS_HREDRAW ; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("球队信息"),TEXT("通知"),MB_OK);
return -1;
}
hwnd = CreateWindow(appName,TEXT("足球"),WS_OVERLAPPED|WS_CAPTION|
                                             WS_SYSMENU|WS_MINIMIZEBOX|
                                             WS_VSCROLL|WS_HSCROLL,
0,0,400,200,NULL,NULL,hInstance,NULL);
UpdateWindow(hwnd);
    ShowWindow(hwnd,nCmdShow);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}LRESULT CALLBACK WindowProc(HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
)
{  
HDC hdc;
PAINTSTRUCT ps;
TEXTMETRIC tm;
static int cxChar, cyChar;
static int Spos;
int i;
switch(uMsg)
{
case WM_CREATE:
SetScrollRange(hwnd,SB_VERT,0,10,FALSE);
SetScrollPos(hwnd,SB_VERT,Spos,TRUE);
return 0;
case WM_PAINT:

hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;
case WM_VSCROLL:
switch(LOWORD(wParam));
{
case SB_LINEUP:
MessageBox(NULL,TEXT("球队信息"),TEXT("通知"),MB_OK);

break; default:
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
红色部分,当单击滚动条滚动的时候弹出信息,但为什么弹出了两次?

解决方案 »

  1.   


    在上面的代码中我添加对 Scrolls one page down的处理
    但当作这个动作的时候根本就不响应。在添加多少处理都是只执行第一个case后的
    不知道为什么?       case WM_VSCROLL:
                switch(LOWORD(wParam));
                {
                    case SB_LINEUP:
                        MessageBox(NULL,TEXT("球队信息"),TEXT("通知"),MB_OK);    
                    break;
    case SB_PAGEDOWN:
        MessageBox(NULL,TEXT("SB_PAGEDOWN"),TEXT("通知"),MB_OK);
    break;
                    default:
                    break;
                }
            return 0;
      

  2.   

    你以为按钮?本身对应的按下和弹起都会响应此消息,只不过是notify不同而已。
      

  3.   

    switch(LOWORD(wParam));
    多了个分号。另外 当产生 WM_VSCROLL 
    是对向上滚动判断,然后弹框。
     
      

  4.   

    case WM_VSCROLL:
    {
        switch(LOWORD(wParam));
        {
            case SB_LINEUP:
                MessageBox(NULL,TEXT("球队信息"),TEXT("通知"),MB_OK);   
                break;
                default:
                break;
        }
    }
    switch后多了个分号 成空switch了
    程序成这样了
    case WM_VSCROLL:
    switch(LOWORD(wParam));
    case SB_LINEUP:弹框;break;
    default break;滚动与结束滚动产生WM_VSCROLL  所以弹出两次去掉后面的; 则正常.
      

  5.   

    但是我也不知道为什么,我也做了很久了,不知道为什么滚动条控件不发WM_HSCROLL消息