Windows应用程序对键盘与鼠标的响应


?

编写程序: 设计一个窗口, 当单击鼠标左键时, 窗口中显示"LEFT BUTTON"; 当单击鼠标右键时, 窗口中显示"RIGHT BUTTON"; 当单击向上箭头键时, 窗口中显示"UP Key"; 当单击Ctrl键时, 窗口中显示"CTRL Key"; 当单击 Ctrl+A 键时, 窗口中显示"CTRL+A Key":

程序主要代码如下:

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

{

????int wmId, wmEvent;

????PAINTSTRUCT ps;

????HDC hDC;

????//TCHAR szHello[MAX_LOADSTRING];

????//LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

????static char cLEFT[]="LEFT BUTTON";

????static char cRIGHT[]="RIGHT BUTTON";

????static char cUp[]="UP key";

????static char cCTRL[]="CTRL key";

????static char cCTRLA[]="CTRL+A key";

????static BOOL nUpKeyDown=FALSE, nCtrlKeyDown=FALSE, nCtrlAKeyDown=FALSE,nLeftDown=FALSE,nRightDown=FALSE;

????int xOrg,yOrg;

????switch (message)

????{

????????case WM_KEYDOWN:

????????{

????????????switch(wParam)

????????????{

????????????case VK_UP:

????????????????nUpKeyDown=TRUE;

????????????????break;

????????????case VK_CONTROL:

????????????????nCtrlKeyDown=TRUE;

????????????????break;

????????????

????????????default:

????????????????break;

????????????}

????????}

????????????break;

?

????????case WM_KEYUP:

????????????InvalidateRect(hWnd,NULL,TRUE);????//刷新用户区。

????????????break;

????????case WM_CHAR:

????????????{

????????????????????if(wParam==(65&VK_CONTROL))????

????????????????????{

????????????????????????if(nCtrlKeyDown == TRUE)

????????????????????????{

????????????????????????????nCtrlAKeyDown = TRUE;

????????????????????????????nCtrlKeyDown = FALSE;

????????????????????????}

????????????????????}

????????????????????

????????????????}

????????????????break;

????????case WM_LBUTTONDOWN:

????????????nLeftDown=TRUE;

????????????InvalidateRect(hWnd,NULL,TRUE);????//刷新用户区。

????????????break;

????????case WM_RBUTTONDOWN:

????????????nRightDown=TRUE;

????????????InvalidateRect(hWnd,NULL,TRUE);????//刷新用户区。

????????????break;

?

????????case WM_COMMAND:

????????????wmId = LOWORD(wParam);

????????????wmEvent = HIWORD(wParam);

????????????// Parse the menu selections:

????????????switch (wmId)

????????????{

????????????????case IDM_ABOUT:

???????????????? DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);

???????????????? break;

????????????????case IDM_EXIT:

???????????????? DestroyWindow(hWnd);

???????????????? break;

????????????????default:

???????????????? return DefWindowProc(hWnd, message, wParam, lParam);

????????????}

????????????break;

????????case WM_PAINT:

????????????hDC = BeginPaint(hWnd, &ps);

????????????// TODO: Add any drawing code here...

????????????RECT rt;

????????????GetClientRect(hWnd, &rt);

????????????xOrg=(rt.left+rt.right)/2;

????????????yOrg=(rt.top +rt.bottom)/2;

????????????if(nUpKeyDown == TRUE)

????????????{

????????????????TextOut(hDC,xOrg,yOrg,cUp,strlen(cUp));

????????????????nUpKeyDown = FALSE;


(续前表)

}

????????????else if(nCtrlAKeyDown == TRUE)

????????????{

????????????????TextOut(hDC,xOrg,yOrg,cCTRLA,strlen(cCTRLA));

????????????????nCtrlAKeyDown = FALSE;

????????????????nCtrlKeyDown = FALSE;

????????????}

????????????else if(nCtrlKeyDown == TRUE&&nCtrlAKeyDown == FALSE)

????????????{

????????????????TextOut(hDC,xOrg,yOrg,cCTRL,strlen(cCTRL));

????????????????nCtrlKeyDown = FALSE;

????????????}

????????????else if(nLeftDown == TRUE)

????????????{

????????????????TextOut(hDC,xOrg,yOrg,cLEFT,strlen(cLEFT));

????????????????nLeftDown = FALSE;

????????????}

????????????else if(nRightDown == TRUE)

????????????{

????????????????TextOut(hDC,xOrg,yOrg,cRIGHT,strlen(cRIGHT));

????????????????nRightDown = FALSE;

????????????}

????
?

????????????//DrawText(hdc, lpString, _tcsclen(lpString), &rt, DT_CENTER);

????????????EndPaint(hWnd, &ps);

????????????break;

????????case WM_DESTROY:

????????????PostQuitMessage(0);

????????????break;

????????default:

????????????return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

?

编译并调试程序


程序运行结果运行结果如下图:

单击鼠标左键

单击鼠标右键

单击向上箭头

单击Ctrl键

单击Ctrl+A

刚开始刷新客户区时使用

InvalidateRect(hWnd,NULL,FALSE);

结果导致背景客户区背景不更新,输出的文本重叠,了解了InvalidateRect()的使用方式后,将语句改为

InvalidateRect(hWnd,NULL,TRUE);

即成功解决了问题;

时间: 2024-10-02 08:26:59

Windows应用程序对键盘与鼠标的响应的相关文章

利用钩子函数来捕捉键盘响应的windows应用程序

一:引言: 你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数.因此本文将对钩子函数的相关知识进行阐述.当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述.(本文的程序为vc6.

【windows】使用键盘代替鼠标的快捷键

键盘代替鼠标右键 使用上述键可以代替右键 原文地址:https://www.cnblogs.com/OliverQin/p/9223542.html

基本的Windows应用程序 窗体创建

基本的Windows应用程序 转载:http://shiba.hpe.sh.cn/jiaoyanzu/WULI/Article1506 下面是一个完全可以运行的Windows程序,代码很简单,读者通过代码中的注释了解它们的含义.我们将在下一节详细讲解些代码.做为一个练习,我们建议读者在你的开发工具中创建一个工程,手工输入些代码,然后编译运行这个程序.注意,如果你使用的是Visual C++,那么在选择工程类型时必须是“Win32 application project”,而不能是“Win32 c

winform中键盘和鼠标事件的捕捉和重写(转)

在 编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作.比如编写一个处理图片的应用程序时, 希望无论当前哪个控件获得焦点,当用户按上.下.左.右键时,图片控件的滚动条都会上下左右移动,当用户拨动鼠标滚轮时图片总能发大或缩小.如果对每个控 件的键盘或鼠标事件都进行设置,必然会造成很多的重复工作.本文我将介绍如何在winform下对某一个键盘输入或者鼠标事件进行相同的操作. 1.键盘事件的捕捉和重写 首先是键盘操作,为了实现上述功能,现在介绍

MFC中热键&模拟键盘&模拟鼠标的使用

1. 热键的使用 热键不用了的话一定要卸载,否则下次启动时会被占用. 函数原型 注册函数 BOOL RegisterHotKey( HWND hWnd, // handle to window int id, // hot key identifier UINT fsModifiers, // key-modifier options UINT vk // virtual-key code ); hWnd------窗口句柄: id------热键的标识:(如果是exe 这个标识的范围就在0-4

1-1 Windows应用程序的特点

主要内容:介绍Windows应用程序的特点,并附加了消息和事件的一些区别 //以后该分类中字体均采用 隶书 4(14pt) 1. 面向对象 <1>针对Windows应用本身,如记事本界面, 不像传统的控制台,而是针对窗口.菜单等对象进行操作(窗口就是一个对象) <2>对象通俗的讲就是Windows应用程序界面上的各种规范的部件 比如窗口.菜单.按钮.对话框.程序模块等 <3>编写Windows程序想当一部分工作是在创建对象和为对象属性赋值 <4>对象特征:具

Windows程序基础——Windows应用程序的基本概念

Windows是一种应用于微型计算机的操作系统,它为应用程序提供了一个多任务运行平台,它为应用程序提供了一致性的图形化窗口和菜单. Windows应用程序都具有图形界面并由事件来驱动其运行. 图形用户界面(GUI)--与键盘和鼠标相配合 区别:普通C语言程序:主函数(系统加载)及主函数调用的函数:Windows程序主函数(系统加载)及事件处理函数(系统调用): 一个Windows应用程序是由Windows系统和程序主函数及与其相关的事件消息处理函数组成的. Windows操作系统与Windows

《Windows程序设计》读书笔七 鼠标

第七章 鼠标 7.1 鼠标的基础知识 fMouse = GetSystemMetrics(SM_MOUSEPRESENT); //判断是否使用鼠标 cButtons = GetSystemMetrics(SM_CMOUSEBUTTONS); //判断安装鼠标的个数 GetSystemMetrics(SM_SWAPBUTTON); //判断鼠标按钮是否被切换 SystemParametersInfo获得鼠标相关的参数信息 7.1.1 一些基本术语 IDC_ARROW IDC_CROSS IDC_W

Windows应用程序运行机制(笔记)

Windows应用程序:以windows作为平台运行的应用程序. API函数 API函数:windows提供了大量可以在应用程序中调用的,用C语言编写的函数. Windows API 函数的功能如下: 1.窗口管理函数:实现窗口的创建.移动和修改等功能. 2.图形设备函数:实现图形的绘制及操作功能,这类型函数的集合又叫做图形设备接口. 3.系统服务函数:实现与操作系统有关的一些功能. 窗口与句柄 在Windows应用程序中,窗口是通过窗口句柄(HWND)来标识的:要对某个窗口进行操作,就必须要得