VisualC面向对象与可视化程序设计.pptx
《VisualC面向对象与可视化程序设计.pptx》由会员分享,可在线阅读,更多相关《VisualC面向对象与可视化程序设计.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、符号常量名称等价的键盘键或鼠标按钮符号常量名称等价的键盘键或鼠标按钮VK_LBUTTON鼠标左按钮VK_BACK退格键VK_RBUTTON鼠标右按钮VK_TAB制表键VK_MBUTTON鼠标中按钮VK_RETURN回车键VK_SHIFTShift键VK_CONTROLCtrl键VK_MENUAlt键VK_PAUSEPause键VK_CAPITALCapsLock键VK_ESCAPEEsc键VK_PRIORPageUp键VK_NEXTPageDown键VK_ENDEnd键VK_HOMEHome键VK_LEFT左键头键VK_RIGHT右箭头键VK_UP上箭头键VK_DOWN下箭头键VK_0VK_9
2、09键VK_AVK_ZAZ键虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,用以标识哪一个键被按下或释放,最常用的虚拟码已经在Windows.h中定义。常用的虚拟码第1页/共36页操作系统在接收到键盘输入后把消息发送给具有“输入焦点(input focus)的窗口应用程序一般有几个窗口,但当按下某一个键时,只有一个窗口能接收到该键盘消息,接收这个键盘消息的窗口称为有“输入焦点”的窗口有“输入焦点”的窗口应是活动窗口或者活动窗口的子窗口窗口正在接收输入焦点窗口函数通过捕获WM_SETFOCUS和WM_KILLFOCUS消息确定当前窗口是否具有输入焦点。窗口失去输入焦点
3、第2页/共36页一个按键的组合产生了一个可以显示的字符时,就产生了一个字符消息字符消息键盘消息按键消息系统按键消息按下或松开一个键时非系统按键消息就产生了一按键消息Alt键与相关输入键的组合产生的消息,这些键一般由Windows系统内部直接处理,应用程序不处理若应用程序处理了这些系统键消息,还要调用DefWindowsProc()函数,以便不影响系统对它们的处理不使用Alt键组合的的按键消息第3页/共36页消息类型含义WM_KEYDOWN非系统按下了非系统键消息WM_KEYUP非系统松开了非系统键消息WM_SYSKEYDOWN系统按下了系统键消息WM_SYSKEYUP系统松开了系统键消息wPa
4、ramlParam按键消息的两个变量32位的变量重复计数位(015位)OEM扫描码(1623位)扩展键标志(24位)保留位(2528位)关联码(29位)键的先前状态(位30)转换状态(31位)包含了识别按下的键的虚键码第4页/共36页消息类型含义WM_CHAR非系统非系统字符WM_DEADCHAR非系统非系统死字符WM_SYSCHAR系统系统字符WM_SYSDEADCHAR系统系统死字符非系统WM_KEYDOWN和WM_KEYUP的按键消息只能产生非系统消息在WinMain函数的消息循环中包含了TranslateMessage函数,其功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字
5、符映射成ASCII码后才能产生WM_CHAR消息。WM_SYSKEYDOWN和WM_SYSKEYUP按键消息只能产生系统消息系统字符消息第5页/共36页【例6-1】设计一个窗口,在该窗口中练习键盘的响应,要求如下:(1)(2)(3)(4)(5)单击键盘上的向上箭头时,窗口中显示“You had hitted the up key”单击键时,窗口中显示“You had hitted the SHIFT key”单击键时,窗口中显示“You had hitted the CTRLkey”单击键时,窗口中显示“You had hitted the CTRLAkey”单击键时,窗口中显示“You ha
6、d hitted the SHIFT B key”第6页/共36页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 cSh
7、ift=You had hitted the SHIFT key;static char cCtrl_A=You had hitted the CTRLAkey;static char cShift_B=You had hitted the SHIFT B key;/下面定义并初始化按键标志变量static BOOLnUpKeyDown=FALSE,nShiftKeyDown=FALSE,nCtrlKeyDown=FALSE,nCtrlAKeyDown=FALSE,nShiftBKeyDown=FALSE;第7页/共36页switch(iMessage)case WM_KEYDOWN:swit
8、ch(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;第8页/共36页case WM_CHAR:if(wParam=(65&VK_CONTROL)if(nCtrlKeyD
9、own=TRUE)nCtrlAKeyDown=TRUE;else if(wParam=98|wParam=66)if(nShiftKeyDown=TRUE)nShiftBKeyDown=TRUE;nCtrlKeyDown=FALSE;/当按下b键时/检查Shift键是否处于按下状态。/当Shift键按下时,变量置为真nShiftKeyDown=FALSE;break;case WM_PAINT:/处理绘图消息.hDC=BeginPaint(hWnd,&ps);hBrush=(HBRUSH)GetStockObject(WHITE_BRUSH);/创建 白画刷。hPen=(HPEN)GetSto
10、ckObject(WHITE_PEN);/创建白画笔。SelectObject(hDC,hPen);/选入白画刷SelectObject(hDC,hBrush);/选入白画笔SetTextColor(hDC,RGB(255,0,0);/设置字体颜色为红色。第9页/共36页/输出信息。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(h
11、DC,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;第10页/共36页else if(nShiftBKeyDown=TRUE)Rectangle(hDC,0,0,300,200);TextOut(
12、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_DESTRO
13、Y:PostQuitMessage(0);return 0;default:return(DefWindowProc(hWnd,iMessage,wParam,lParam);return 0;第11页/共36页一个有关键盘操作的示例程序”的字符串程序中缓冲区大小只设30个字符,当缓冲区满时若再输入任何字符,就出现(1)号错误提示用户按下左箭头键直至光标到达本行起始位置时,就无法再往左移动,则出现(2)号错误信息若此时您按下Esc键,就出现(3)号错误提示信息若当前光标位置处于本行的起始位置,此时按下回退键(BackSpace),则出现编号为(4)的错误提示信息若字符缓冲区中已没有任何字符,此
14、时按下了Delete键,则出现(5)号错误提示信息【例6-2本例演示键盘输入时所产生的消息序列并在窗口的客户区显示对应的字符6.2 键盘操作应用举例用户窗口区输入“这是第12页/共36页#include#include#includevoid WINAPI CaretPos(int *xCaret,int *yCaret);long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANC
15、E hInstance,int nCmdShow);HWND hWndMain;long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)#define BufSize 30 /设置存放字符的缓冲区大小static char cCharBufBufSize;/设置静态字符数组,/存放输入的字符,字符个数不能超出缓冲区大小static int nNumChar=0;/现有字符个数static int nArrayPos=0;/字符的位置static int nLnHeight;static int nCharWidth
16、;static int xCaret,yCaret;int x;HDC hDC;TEXTMETRIC tm;PAINTSTRUCT PtStr;/定义指向包含绘图信息的结构体变量第13页/共36页switch(iMessage)/处理消息case WM_CHAR:/遇到非系统字符所作的处理if(wParam=VK_BACK)/处理遇到回退键的消息if(nArrayPos=0)/若已在一行文字的开始处,则提示不能回退MessageBox(hWnd,“当前位置是文本的起始位置,不能回退,NULL,MB_OK);elsenArrayPos=nArrayPos-1;/按一次回退键就回退一字符位置Car
17、etPos(&xCaret,&yCaret);nNumChar=nNumChar-1;/对现有字符总数进行计数InvalidateRect(hWnd,NULL,TRUE);/刷新并发送WM_PAINT消息break;if(wParam=VK_ESCAPE)/处理按下Escape键消息 MessageBox(hWnd,“您现在不能按ESC键,请继续其它操作,NULL,MB_OK);break;第14页/共36页if(nNumChar=BufSize)/如写入的字符数超过缓冲区大小,则报警 MessageBox(hWnd,“缓冲区已满,不能再输入字符了n若需要删除字符,请用BackSpace键,N
18、ULL,MB_OK);break;for(x=nNumChar;xnArrayPos;x=x-1)cCharBufx=cCharBufx-1;cCharBufnArrayPos=(unsigned char)wParam;nArrayPos=nArrayPos+1;nNumChar=nNumChar+1;CaretPos(&xCaret,&yCaret);InvalidateRect(hWnd,NULL,TRUE);break;case WM_CREATE:/处理窗口创建消息 hDC=GetDC(hWnd);GetTextMetrics(hDC,&tm);/获取字体信息nLnHeight=tm
19、.tmHeight+tm.tmExternalLeading;nCharWidth=tm.tmAveCharWidth;yCaret=nLnHeight;ReleaseDC(hWnd,hDC);break;第15页/共36页case WM_SETFOCUS:/处理活动焦点消息 CreateCaret(hWnd,0,0,nLnHeight);CaretPos(&xCaret,&yCaret);ShowCaret(hWnd);/在活动焦点的窗口中显示插字符break;case WM_KILLFOCUS:DestroyCaret();break;case WM_KEYDOWN:switch(wPar
20、am)case VK_END:nArrayPos=nNumChar;/处理失去焦点消息/处理按下键消息/处理按下键为End时的消息/输入位置从本行的末尾开始CaretPos(&xCaret,&yCaret);break;/处理按下键为Home时的消息/输入位置为本行的起始位置case VK_HOME:nArrayPos=0;CaretPos(&xCaret,&yCaret);break;第16页/共36页case VK_DELETE:/处理按下键为Delete时的消息if(nArrayPos=nNumChar)/输入位置处于本行的末尾MessageBox(hWnd,缓冲区已空,没有字符可供删除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VisualC 面向 对象 可视化 程序设计
限制150内