? 编写程序: 设计一个窗口, 当单击鼠标左键时, 窗口中显示"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); 即成功解决了问题; |
Windows应用程序对键盘与鼠标的响应
时间: 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)来标识的:要对某个窗口进行操作,就必须要得