zoukankan      html  css  js  c++  java
  • 第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8

    基于键盘与鼠标应用的程序设计

    一、实验目的

    1.掌握键盘与鼠标在应用程序中的消息响应机制。

     

    二、实验内容及步骤

     实验任务

    1.熟悉键盘的消息响应;

    2.熟悉鼠标的消息响应;

     实验内容

       设计一个窗口,再该窗口中练习键盘的响应,要求如下:

    (1)单机键盘上的向上箭头时,窗口中显示“You had hitted the up key”;

    (2)单击Shift键时,窗口中显示“You had hitted the Shift key”;

    (3)单击Ctrl键时,窗口中显示“You had hitted the Ctrl key”;

    (4)单击Ctrl+A键时,窗口中显示“You had hitted the Ctrl A key”;

    (5)单击Shift+B键时,窗口中显示“You had hitted the Shift B key”;

    程序代码:

    #include<windows.h>
    #include<stdlib.h>
    #include<string.h>
    #include<stdio.h>
    long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
    BOOL InitWindowsClass(HINSTANCE hInstance);
    BOOL InitWindows(HINSTANCE hInstance,int nCmdShow); 
    HWND hWndMain;
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,
    
      int nCmdShow)
    {
    MSG Message;
    if(!InitWindowsClass(hInstance))    return FALSE;
     
    if(!InitWindows(hInstance,nCmdShow))  return FALSE;
    
    
    while(GetMessage(&Message,0,0,0))//消息循环
    {
               TranslateMessage(&Message);
               DispatchMessage(&Message);
    }
    return Message.wParam;
    }
    
    
    long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
    {
    HDC hDC;   //定义指向设备上下文的句柄
    PAINTSTRUCT ps; //定义指向包含绘图信息的结构体变量
        HPEN hPen;                             //定义画笔句柄
    HBRUSH hBrush;                          //定义画刷句柄
    
    //以下定义输出的字符串
    static char cUp[]="You had hitted the UP key";
    static char cCtrl[]="You had hitted the Ctrl key";
    static char cShift[]="You had hitted the SHIFT key";
    static char cCtrl_A[]="You had hitted the CTRL A key";
    static char cShift_B[]="You had hitted the SHIFT B key";
    
    //下面定义并初始化按键标志变量
    static BOOL nUpKeyDown=FALSE,
               nShiftKeyDown=FALSE,
               nCtrlKeyDown=FALSE,
               nCtrlAKeyDown=FALSE,
               nShiftBKeyDown=FALSE;
    switch(iMessage)
    {
    case WM_KEYDOWN:
               {
                        switch(wParam)
                        {
                        case VK_UP:               //当按上箭头键时,变量置为真
    
                     nUpKeyDown = TRUE;                   break;
                        case VK_SHIFT:                               //当按Shift键时,变量置为真
                                 nShiftKeyDown = TRUE;   break;
    
                        case VK_CONTROL:                    //当按Control键时,变量置为真
                                 nCtrlKeyDown = TRUE;     break;
                        default:                                    break;
                        }
               }
    
               break;
    case WM_KEYUP:
    InvalidateRect(hWnd,NULL,FALSE);      //人为    方框覆盖       // InvalidateRect(hWnd,NULL,1);刷新用户区
    // InvalidateRect(hWnd,NULL,0);不擦除背景  
    break;
    case WM_CHAR:
               if(wParam==(65&VK_CONTROL))     
               {
             if(nCtrlKeyDown == TRUE)
                        {
             nCtrlAKeyDown = TRUE;   
    nCtrlKeyDown = FALSE;
                }
               }
    
               else if(wParam==98||wParam==66)        //当按下b键时
               {
                  if(nShiftKeyDown == TRUE)                //检查Shift键是否处于按下状态。
                        {
                                 nShiftBKeyDown = TRUE;  //当Shift键按下时,变量置为真
                                 nShiftKeyDown = FALSE;
    
                        }
               
               break;
    case WM_PAINT:                                                      //处理绘图消息.
              hDC=BeginPaint(hWnd,&ps);
               hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH); //创建 白画刷。
               hPen = (HPEN)GetStockObject(WHITE_PEN);                 //创建白画笔。
               SelectObject(hDC,hPen);                                   //选入白画刷
               SelectObject(hDC,hBrush);                      //选入白画笔
               SetTextColor(hDC,RGB(255,0,0));                   //设置字体颜色为红色。
    
     
    
     
    
     
    
               //输出信息。     
    if(nUpKeyDown == TRUE)
               {
                   Rectangle(hDC,0,0,300,200);
                        TextOut(hDC,0,0,cUp,strlen(cUp));
                        nUpKeyDown = FALSE;
               }
    
    
               else if(nCtrlAKeyDown == TRUE)
             {
    
                        Rectangle(hDC,0,0,300,200);
                        TextOut(hDC,0,100,cCtrl_A,strlen(cCtrl_A))
                        nCtrlAKeyDown = FALSE;
                        nCtrlKeyDown = FALSE;
               }
    
    
               else if(nCtrlKeyDown == TRUE&&nCtrlAKeyDown == FALSE)
               {
                        Rectangle(hDC,0,0,300,200);
                        TextOut(hDC,0,60,cCtrl,strlen(cCtrl));
                        nCtrlKeyDown = FALSE;
              }
    
              else if(nShiftBKeyDown == TRUE
             {
                        Rectangle(hDC,0,0,300,200);
                        TextOut(hDC,0,0,cShift_B,strlen(cShift_B));
                        nShiftBKeyDown = FALSE;
                        nShiftKeyDown = FALSE;   }
    
               else if(nShiftBKeyDown == FALSE&&nShiftKeyDown == TRUE)
               {
                        Rectangle(hDC,0,0,300,200);
                       TextOut(hDC,0,0,cShift,strlen(cShift));
                        nShiftKeyDown = FALSE;  
    
               }
    
             else        //删除画笔和画刷
               {
                printf("Input Error !
    ");
                break;
    }
                       DeleteObject(hPen);
                        DeleteObject(hBrush);
                        EndPaint(hWnd,&ps);
                   break;
    
    case WM_DESTROY:
    
     
    
               PostQuitMessage(0);   
    
     
    
    return 0;
    
     
    
    default:      
    
     
    
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
    
     
    
    }
    
     
    
    return 0;
    
     
    
    }
    
     
    
    BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
    
     
    
    {
    
     
    
    HWND hWnd;
    
     
    
    hWnd=CreateWindow("6_3", 
    
     
    
                              "键盘实例程序",
    
     
    
                               WS_OVERLAPPEDWINDOW,
    
     
    
                               CW_USEDEFAULT,
    
     
    
                            0,
    
     
    
                               CW_USEDEFAULT,
    
     
    
                            0,
    
     
    
                            NULL,
    
     
    
                               NULL,
    
     
    
                               hInstance,
    
     
    
                               NULL);
    
     
    
    if(!hWnd)  
    
     
    
    return FALSE;
    
     
    
    hWndMain=hWnd;
    
     
    
    ShowWindow(hWnd,nCmdShow);        
    
     
    
    UpdateWindow(hWnd);
    
     
    
    return TRUE;
    
     
    
    }
    
     
    
    BOOL InitWindowsClass(HINSTANCE hInstance)  
    
     
    
    {        
    
     
    
    WNDCLASS WndClass;
    
     
    
        WndClass.cbClsExtra=0;
    
     
    
    WndClass.cbWndExtra=0;
    
     
    
        WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hIcon=LoadIcon(NULL,"END");
    
     
    
    WndClass.hInstance=hInstance;
    
     
    
    WndClass.lpfnWndProc=WndProc;
    
     
    
    WndClass.lpszClassName="6_3";
    
     
    
    WndClass.lpszMenuName=NULL;
    
     
    
    WndClass.style=CS_HREDRAW|CS_VREDRAW;
    
     
    
    return RegisterClass(&WndClass);
    
     
    
        WndClass.style=0;
    
     
    
    }
    
     
    

      

    程序运行结果

     

     

     

    三、实验结果

      通过本次试验我了解了基于键盘与鼠标应用的程序设计,熟悉了键盘的消息响应以及鼠标的消息响应,了解了关于窗口的相关操作。

  • 相关阅读:
    14)Java中Assert
    ajax异步请求
    前端学习数据库之子元素
    Javascript实现页面跳转的几种方式
    读书笔记:《HTML5开发手册》Web表单
    C#开发微信门户及应用(26)-公众号微信素材管理
    关于自定义滚动条原理
    jQuery点击图片弹出大图遮罩层
    CSS3新特性(阴影、动画、渐变、变形、伪元素等) CSS3与页面布局学习总结——CSS3新特性(阴影、动画、渐变、变形、伪元素等)
    jQuery点击图片弹出大图遮罩层
  • 原文地址:https://www.cnblogs.com/wangprince2017/p/9236043.html
Copyright © 2011-2022 走看看