VC应用程序中的键盘与鼠标
VC 模拟鼠标和键盘输入

VC 模拟鼠标和键盘输入 - 天下 - 博客频道 -模拟鼠标点击:1、这里是鼠标左键按下和松开两个事件的组合即一次单击:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )2、模拟鼠标右键单击事件:mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )3、两次连续的鼠标左键单击事件构成一次鼠标双击事件:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )4、使用绝对坐标MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点--直接设定绝对坐标并单击mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);其中X,Y分别是你要点击的点的横坐标和纵坐标模拟键盘输入:[cpp]void EnterString(const char* text) { bool bShift = false; size_t length = strlen(text);for(size_t index = 0;index < length;index++) { int val = text[index];if(val >= 97 && val <= 122) //小写a-z {val -= 32; bShift = false; } else if(val>= 65 && val <= 90) //大写A-Z { bShift = true;} else if(val >= 48 && val <= 57) //数字0-9 { bShift = false; } else //特殊符号{ switch(val) { case '`':val = 192; bShift = false;break; case '~': val = 192;bShift = true; break; case '!':val = '1'; //!和1在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '@': val = '2'; //@和2在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '#': val = '3'; bShift = true;break; case '$': val = '4';bShift = true; break; case '%':val = '5'; bShift = true;break; case '^': val = '6';bShift = true; break; case '&':val = '7'; bShift = true;break; case '*': val = '8';bShift = true; break; case '(':val = '9'; bShift = true;break; case ')': val = '0';bShift = true; break; case '-':val = 189; bShift = false;break; case '=': val = 187;bShift = false; break; case '_':val = 189; bShift = true;break; case '+': val = 187;bShift = true; break; case '[':val = 219; bShift = false;break; case '{': val = 219;bShift = true; break; case ']':val = 221; bShift = false;break; case '}': val = 221;bShift = true; break; case '\\':val = 220; bShift = false;break; case '|': val = 220;bShift = true; break; case ';':val = 186; bShift = false;break; case ':': val = 186;bShift = true; case '\'': val = 222; bShift = false; break; case'\"': val = 222; bShift = true;break; case ',': val = 188;bShift = false; break; case '<': val = 188; bShift = true;break; case '.': val = 190;bShift = false; break; case '>':val = 190; bShift = true;break; case '/': val = 191;bShift = false; break; case '?':val = 191; bShift = true;break; default: break;} } if(bShift)keybd_event(VK_SHIFT,0,0,0); keybd_event(val,0,0,0);keybd_event(val,0,KEYEVENTF_KEYUP,0); if(bShift)keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); } }但是要注意,如果用户默认是中文输入法,那我们得先想办法切换到英文输入法才行。
vc++鼠标消息处理和键盘消息处理-TicToc

实验项目二:基本交互设计实验学时:4实验类型:基础性实验目的:1.掌握菜单和工具栏的应用2.掌握鼠标与键盘及其消息处理3.掌握窗口绘图和文本输出实验内容与说明第三部分:鼠标消息处理和键盘消息处理本例将设计一个类似五子棋的应用程序TicTac,用户通过鼠标左键和右键模拟两个用户相互博弈,先形成直线的一方获得胜利。
第一步:新建工程新建一个SDI MFC AppWizard(exe)类型的工程,工程取名为TicTac。
注意路径可能与本地磁盘不同。
在MFC AppWizard的第一步,修改工程类型为Single document类型。
在MFC AppWizard的第四步,去掉Docking toobar(工具栏)、Initial status bar(状态栏)、Printing and print preview(打印及预览)、3D controls等控件的选择。
然后点击Finish按钮结束工程的创建。
上述步骤(去掉不必要的控件)主要是为棋盘的绘制产生更大、更醒目地显示空间。
第二步:定制客户区接着修改棋盘显示界面。
使得它具有固定的大小,且不能最大化,不能拖动边框以改变大小。
在工程的ClassView类视图中双击CMainFrame类的PreCreateWindow函数,该函数在创建主框架窗口时调用。
该函数的参数CREATESTRUCT定义窗口创建时的参数。
修改主框架窗口,主要是对该参数进行设置,如下是该函数的实现过程:cs.style设置窗口的样式,WS_CAPTION使得程序具有标题栏且允许显示程序标题、具有边界,具有最小化按钮(WS_MINIMIZEBOX)和系统菜单(WS_SYSMENU),但是去掉了拖动边框改变大小的能力(WS_THICKFRAME)和最大化的能力(WS_MAXIMIZEBOX)。
cs.lpszName设置窗口的名字,显示为应用程序的标题。
width表示棋盘大小,显示为一个5行5列的棋格,棋格之间的分隔线粗度为16个像素,距离左右边界各10个像素。
C#处理鼠标和键盘事件

在程序运行中,产生事件的主体有很多,其中尤其以键盘和鼠标为最多。
本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。
一.本文介绍的程序设计和运行的软件环境:(1).微软公司视窗2000服务器版(2) FrameWork SDK Beta 2二.C#中处理鼠标相关的事件:鼠标相关的事件大致有六种,分别是:"MouseHover"、"MouseLeave"、"MouseEnter"、"MouseMove"、"MouseDown"和"MouseUp"。
(1).如何在C#程序中定义这些事件:在C#中是通过不同的Delegate来描述上述事件,其中描述"MouseHover"、"MouseLeave"、"MouseEnter"事件的Delegate是"EventHandler",而描述后面的三个事件的Delegate是"MouseEventHandler"来描述。
这二个Delegate分别被封装在不同的命名空间,其中"EventHandler"被封装在"System"命名空间;"MouseEventHandler"被封装在"Syetem.Windows.Froms"命名空间中的。
在为"MouseHover"、"MouseLeave"、"MouseEnter"事件通过数据的类是"EventArgs",他也被封装在"System"命名空间中;而为后面的三个事件提供数据的类是"MouseEventArgs",他却被封装在"Syetem.Windows.Froms"命名空间。
VC++键盘与鼠标的消息处理(2)

教案2007 ~2008 学年第一学期主讲教师课程名称面向对象程序设计(VC++)课程类别专业基础课学时及学分80、4授课班级使用教材VC++的使用及面向对象软件工程实例分析系(院、部)教研室(实验室) 计算机应用教研室课时授课计划课次序号:一、课题:ch7 键盘与鼠标的消息处理(2)二、课型:讲授三、目的要求:1、熟悉键盘消息及常见的虚拟键码。
2、掌握键盘消息的处理方法。
四、重点、难点:重点:键盘消息处理技术。
难点:按键消息(WM_KEYDOWN)的处理技巧。
五、教学方法及手段:案例式教学:设计目标、关键技术、结合实例讲解语法、总结。
按照提出问题、解决问题的思路开展教学。
六、参考资料:《VC++的使用及面向对象软件工程实例分析》贺怀清编,电子工业出版社《C++面向对象程序设计》李涛编,高等教育出版社,第8章七、作业:实验题1,3八、授课记录:九、授课效果分析:十、教学进程(教学内容、教学环节及时间分配等)1、复习鼠标的消息处理:关键是确定使用哪个消息、如何编写消息处理函数。
2、导入课题利用键盘消息获取用户的输入信息,在消息处理函数中完成用户的功能需求。
3、教学内容一、键盘消息键盘消息分类:系统键消息和非系统键消息系统键:输入键与Alt键组合,一般有Windows内部处理。
非系统键:不与Alt键组合的输入键。
键盘消息:系统键消息:WM_SYSKEYDOWN WM_SYSKEYUP非系统键消息:WM_KEYDOWN WM_KEYUP WM_CHAR(可见字符的按键消息)说明:Windows总是把键盘消息发送给拥有输入焦点的窗口。
可以使用CWnd::SetFocus()函数设置某个窗口拥有输入焦点,用GetFocus()获取拥有输入焦点的窗口。
二、键盘消息的处理即键盘消息处理函数,所有键盘消息处理函数的参数相同,比如:void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)nChar表示被击键的字符,nRepCnt表示该键被击的重复次数,nFlags中包含键的扫描码和标志位。
vc_KB_mouse_ok

6.3 鼠标在应用程序中的应用
鼠标作为定位输入设备,通过鼠标单击、 鼠标作为定位输入设备,通过鼠标单击、双击和拖 动功能,用户可以很容易地操作基于Windows图形 动功能,用户可以很容易地操作基于 图形 界面的应用程序。 界面的应用程序。 Windows中通过光标来指示当前鼠标的位置,在 中通过光标来指示当前鼠标的位置, 中通过光标来指示当前鼠标的位置 系统中预定义了几种光标
6.4 鼠标应用程序实例 【例6-3】鼠标输入 】 示范程序, 示范程序,本例介 绍如何响应鼠标信 息、并改变光标形 状等用法, 状等用法,用户在 窗口的不同区域移 动鼠标时, 动鼠标时,光标将 显示如下图所标识 的不同箭头的形状
代表预定义光标的常量 IDC_ARROW IDC_CROSS IDC_IBEAM IDC_ICON IDC_SIZEALL IDC_SIZENESW IDC_SIZENS IDC_SIZENWSE ISC_SIZEWE IDC_UPARROW IDC_WAIT 箭头光标 十字光标 I形文本光标 形文本光标 空图标
菜单、 菜单、滚动条 工具条和标题条等处 用户区以 外的地方 产生的鼠 标事件 产生一 个非用 户区鼠 标消息 不由应用程序处 理而是送往函数 DefWindowProc
由于鼠标移动的随机性, 由于鼠标移动的随机性,如果要使某一个窗口能不 间断地捕获鼠标消息,就必须对鼠标加以捕获 捕获鼠标消息 间断地捕获鼠标消息,就必须对鼠标加以捕获
当前实例句柄
采用自定义光标时, 采用自定义光标时, 需在资源文件中定 义光标资源
当前光标
例如,下面的语句为窗口类 例如,下面的语句为窗口类wndclass WNDCLASS wndclass; ; … wndclass.hCursor=LoadCursor (hThislnst, IDC_WAIT); … 可在应用程序中调用LoadCursor函数改变光标形式 可在应用程序中调用 函数改变光标形式
VC6讲座_键盘与鼠标编程

VC6讲座(十八)处理键盘和鼠标事件上一讲中我们学习了在MFC程序中使用定时器的方法,并成功地为Schedule添加了报警功能,现在的Schedule已具备了我们在第四讲中提出的基本功能,但是它使用起来仍然不太方便,添加、编辑和删除事件条目的操作都只能通过选取菜单中相应的命令或工具栏上相应的按钮来进行,Schedule还不能接受通过键盘输入的命令,对鼠标的支持也不够强,因此在本讲中,我准备介绍一下处理键盘和鼠标事件的方法,为Schedule添加相应的消息处理函数,并设计一个弹出式菜单,让它作为Schedule的关联菜单。
添加处理键盘输入事件的函数按照Windows程序设计的基本要求,一个WIN32应用程序应该能够处理来自键盘的用户输入,这些键盘输入将以消息的形式被发送到应用程序的窗口处理函数中。
在设计MFC 程序时,我们不用直接编写窗口处理函数,但需要利用ClassWizard来添加相应的消息处理函数。
现在让我们调出ClassWizard,选中CScheduleView类,准备把处理键盘输入的函数放在视类中,不过此时可以发现在Messages列表框中列出了多种与键盘输入有关的消息,例如WM_CHAR、WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN和WM_SYSKEYUP等等,面对这么多的消息,我们应该处理哪一条呢?上述几种消息可以分成两类,一类被称为按键消息(Keystroke Messages),即当用户按下和松开某个键时拥有输入焦点的程序收到的消息,包括有WM_KEYDOWN、WM_KEYUP等四种,它们通常被用来处理键盘命令,另一类被称为字符消息(Character Messages),窗口处理函数在接收到第一类按键消息后,一般都要调用TranslateMessage()函数,该函数检查按键是否对应着一个ASCII字符,如果是的话,就额外放置一条字符消息(即WM_CHAR)到窗口的消息队列之中,字符消息通常被用来处理文字输入。
VC++键盘与鼠标的消息处理(2)

教案2007 ~2008 学年第一学期主讲教师课程名称面向对象程序设计(VC++)课程类别专业基础课学时及学分80、4授课班级使用教材VC++的使用及面向对象软件工程实例分析系(院、部)教研室(实验室) 计算机应用教研室课时授课计划课次序号:一、课题:ch7 键盘与鼠标的消息处理(2)二、课型:讲授三、目的要求:1、熟悉键盘消息及常见的虚拟键码。
2、掌握键盘消息的处理方法。
四、重点、难点:重点:键盘消息处理技术。
难点:按键消息(WM_KEYDOWN)的处理技巧。
五、教学方法及手段:案例式教学:设计目标、关键技术、结合实例讲解语法、总结。
按照提出问题、解决问题的思路开展教学。
六、参考资料:《VC++的使用及面向对象软件工程实例分析》贺怀清编,电子工业出版社《C++面向对象程序设计》李涛编,高等教育出版社,第8章七、作业:实验题1,3八、授课记录:九、授课效果分析:十、教学进程(教学内容、教学环节及时间分配等)1、复习鼠标的消息处理:关键是确定使用哪个消息、如何编写消息处理函数。
2、导入课题利用键盘消息获取用户的输入信息,在消息处理函数中完成用户的功能需求。
3、教学内容一、键盘消息键盘消息分类:系统键消息和非系统键消息系统键:输入键与Alt键组合,一般有Windows内部处理。
非系统键:不与Alt键组合的输入键。
键盘消息:系统键消息:WM_SYSKEYDOWN WM_SYSKEYUP非系统键消息:WM_KEYDOWN WM_KEYUP WM_CHAR(可见字符的按键消息)说明:Windows总是把键盘消息发送给拥有输入焦点的窗口。
可以使用CWnd::SetFocus()函数设置某个窗口拥有输入焦点,用GetFocus()获取拥有输入焦点的窗口。
二、键盘消息的处理即键盘消息处理函数,所有键盘消息处理函数的参数相同,比如:void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)nChar表示被击键的字符,nRepCnt表示该键被击的重复次数,nFlags中包含键的扫描码和标志位。
VC编程实现控制其他应用程序

VC编程实现控制其他应用程序VC编程可以实现控制其他应用程序的功能,可以通过编写代码来实现对其他应用程序的自动化操作、窗口控制、数据交互等。
下面将介绍VC编程实现控制其他应用程序的一般步骤和方法。
首先,要控制其他应用程序,首先需要了解被控制应用程序的接口和功能。
可以使用Windows API、COM等方式获取被控制应用程序的相关信息,并定义好需要使用的函数和数据类型。
在VC编程中,可以使用MFC (Microsoft Foundation Class)库、Windows API等来实现对应的功能。
一般而言,控制其他应用程序的主要方法有以下几种:1. Shell执行:VC编程可以使用Shell命令来执行其他应用程序的命令行操作。
可以使用ShellExecute函数来调用其他应用程序并传递相关参数。
例如,可以使用ShellExecute(NULL, "open", "notepad.exe", "myfile.txt", NULL, SW_SHOW)来打开记事本,并打开指定的文件。
2. 窗口控制:控制其他应用程序的窗口可以使用Windows API函数,如FindWindow、GetWindow、SetWindowPos等函数来实现。
可以通过FindWindow函数来通过窗口标题或类名找到其他应用程序的窗口句柄,然后使用GetWindow函数获取窗口的信息,并通过SetWindowPos函数来调整窗口的位置、大小等。
3. 模拟按键和鼠标操作:VC编程可以使用Windows API函数来模拟按键和鼠标操作。
例如,可以使用keybd_event函数来模拟键盘按键操作,使用mouse_event函数来模拟鼠标点击和移动操作。
通过这些函数,可以实现在其他应用程序中输入文本、点击按钮等操作。
4. 进程控制:VC编程可以通过Windows API函数来控制其他应用程序的进程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符消息
系统 非系统
WM_KEYDOWN和 WM_KEYDOWN和WM_KEYUP 的按键消息只能产生非系统消息
消息 WM_CHAR WM_DEADCHAR WM_SYSCHAR WM_SYSDEADCHAR
类型 非系统 非系统 系统 系统
操作系统在接收到键盘输入后 把消息发送给具有“输入焦点( 把消息发送给具有“输入焦点(input focus)的窗口 ) 应用程序一般有几个窗 口,但当按下某一个键 时,只有一个窗口能接 收到该键盘消息, 收到该键盘消息,接收 这个键盘消息的窗口称 为有“输入焦点” 为有“输入焦点”的窗口
有“输入焦点” 输入焦点” 的窗口应是活 动窗口或者活 动窗口的子窗口
窗口函数通过捕获WM_SETFOCUS和WM_KILLFOCUS消息确 和 窗口函数通过捕获 消息确 定当前窗口是否具有输入焦点。 定当前窗口是否具有输入焦点。 窗口正在接 收输入焦点 窗口失去 输入焦点
一个按键的组合产生了 一个可以显示的字符时, 一个可以显示的字符时, 就产生了一个字符消息 字符消息 键盘消息 按键消息 系统按键消息 按下或松开一个键时 就产生了一按键消息 非系统按键消息
消息 W M _K EY D O W N W M _K EY U P W M _SY SK EY D O W N W M _SY SK EY U P
类型 非系统 非系统 系统 系统
含义 按下了非系统键消息 松开了非系统键消息 按下了系统键消息 松开了系统键消息
包含了识别按下 的键的虚键码 按键消息的 两个变量 wParam lParam 重复计数位( ~ 位 重复计数位(0~15位) OEM扫描码(16~23位) 扫描码( ~ 位 扫描码 扩展键标志( 位 扩展键标志(24位) 保留位( ~ 位 保留位(25~28位) 关联码( 位 关联码(29位) 键的先前状态( 键的先前状态(位30) ) 转换状态( 位 转换状态(31位)
//输出信息。 输出信息。 输出信息 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(nCtrlAKeyDown == TRUE) else if(nCtrlKeyDown == TRUE&&nCtrlAKeyDown == FALSE) { Rectangle(hDC,0,0,300,200); TextOut(hDC,0,60,cCtrl,strlen(cCtrl)); nCtrlKeyDown = FALSE; }
设备驱动程序 截取键的扫描码
翻译
由于键盘的输入
虚拟码 它含
产生一条 消息
扫描码、虚拟码以及其他与击键有关的消息 扫描码、虚拟码以及其他与击键有关的消息 消息
设备驱动程序
把消息放到系统的 消息队列中
窗口过程
Windows从系统消息队 从系统消息队 列中取出消息
取出键盘消息进行处理
发送到相应的线程消息队列中
case WM_CHAR: if(wParam==(65&VK_CONTROL)) { if(nCtrlKeyDown == TRUE) { nCtrlAKeyDown = TRUE; } else if(wParam==98||wParam==66) { if(nShiftKeyDown == TRUE) {nShiftBKeyDown = TRUE; nShiftKeyDown = FALSE;} } break;
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;
VC应用程序中的键盘与鼠标 应用程序中的键盘与鼠标
6.1 键盘在应用程序中的应用
键盘上的键
对应
一个唯一的标识值 扫描码 一个唯一的标识值(扫描码 标识值 扫描码) 按下或释放某键时
产 生
扫描码是依赖于具体设备的,为达到设备无关性的要求, 扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备 设备无关性的要求 无关的虚拟码 虚拟码是由Windows系统定义的与设备无关的键的标识 虚拟码, 无关的虚拟码,虚拟码是由 系统定义的与设备无关的键的标识
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); break;
32位的变量 位的变量
函数的消息循环中包含了TranslateMessage函数, 函数, 在WinMain函数的消息循环中包含了 函数的消息循环中包含了 函数 其功能是把按键消息转化为字符消息, 其功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键 盘字符映射成ASCII码后才能产生 码后才能产生WM_CHAR消息 盘字符映射成 码后才能产生 消息
虚拟码是一种与设备无关的键盘编码, 虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的 是一种与设备无关的键盘编码 wParam参数中,用以标识哪一个键被按下或释放,最常用的虚拟码 参数中, 参数中 用以标识哪一个键被按下或释放, 已经在Windows.h中定义, 中定义, 已经在 中定义
常用的虚拟码
VK _BAC K VK_TAB VK_R ETURN VK_C ON TROL VK_PAU SE VK_ESCAPE VK_NEXT VK _HO M E VK_RIGH T VK_DO W N VK_A~ VK_Z ~
退格键 制表键 回车键 C trl 键 Pause 键 Esc 键 Page Down 键 Home 键 右箭头键 下箭头键 A~ Z 键 ~
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; ; //删除画笔和画刷 删除画笔和画刷 DeleteObject(hPen); DeleteObject(hBrush); EndPaint(hWnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } return 0; }
符号常量名称 等价的键盘键或 鼠标按钮 符号常量名称 等价的键盘键或 鼠标按钮
VK_LBUTTON VK_RBUTTON VK_M BUTTO N VK_SHIFT VK_M ENU VK_CA PITAL VK_PR IOR VK_END VK_LEFT VK _U P VK_0~VK_9
鼠标左按钮 鼠标右按钮 鼠标中按钮 Shift 键 A lt 键 C aps Lock 键 Page U p 键 End 键 左键头键 上箭头键 0~ 9 键 ~