工程中没有【魔神】事件,难道作者加了在工程中隐藏事件的传奇脚本命令令

78如何在MFC对话框与单文档(SDI)工程中获得与处理键盘消息
上亿文档资料,等你来发现
78如何在MFC对话框与单文档(SDI)工程中获得与处理键盘消息
如何在MFC对话框与单文档(SDI)工程中获得与;作者:孙文华时间:;VC中键盘事件处理主要是通过对相应的消息的响应,;从这些事件的名称我们可以看出WM_CHAR表示字;afx_msgvoidOnChar(UINTnC;afx_msgvoidOnKeyDown(UIN;afx_msgvoidOnKeyUp(UINTn;nChar代表虚拟键,n
 如何在MFC对话框与单文档(SDI)工程中获得与处理键盘消息作者:孙文华
时间:VC中键盘事件处理主要是通过对相应的消息的响应,这些事件有如:WM_CHAR、WM_KEYDOWN、WM_KEYUP等他们分别对应OnChar、OnKeyDown、OnKeyUp消息处理函数;当然在有些时候我们也可能需要用到对PreTranslateMessage函数的重载。从这些事件的名称我们可以看出WM_CHAR表示字符事件,WM_KEYDOWN表示键盘的键被按下时事件,而WM_KEYUP则表示键盘的键被放开时的事件;我们在键盘上按下某个键时系统先调用OnKeyDown函数接着调用OnChar函数最后调用OnKeyUp函数;这些消息函数的原形如下:afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);nChar代表虚拟键,nRepCnt代表重复次数;而对于nFlags则有点麻烦但大多数时候我们不管这个参数,nFlags的具体意义请参考MSDN相关文档。在大多数时候我们只要用到OnChar、OnKeyDown、OnKeyUp这些消息处理函数就够了,但有时候我们会发理这些函数并不会被调用(特别是对话框程序)这时我们就必需去重载PreTranslateMessage函数;些函数的使用也比较简单但在处理组合按键时我们必需用到相关的辅助API,这些API有GetKeyState、GetKeyboardState等;这些辅助API的功能是获取相应键的当前状态(具体说明请参见MSDN文档)。用VC6创建一个基于对话框的程序,结果发现对于不能直接响应键盘按键的消息。原来,在MFC中,对话框程序在完成程序的初始化后,就在程序主线程中,调用CWinThread::Run函数。在该函数中,首先调用API函数PeekMessage,而函数PeekMessage检查线程消息队列,如果消息存在,就将该消息放于指定的MSG结构中,以后的消息处理都将针对这一MSG结构对象。捕获消息后,该函数将捕获的消息进行预处理,然后再将消息传递给相应的窗口处理函数。键盘消息被拦截而得不到正常响应,其中的关键就是Run函数对消息的预处理。在Run函数中,调用了函数CWinThread::PumpMessage,就是利用这一函数,MFC实现了对消息的分流,使得消息沿着MFC对各种消息规定的路线流动,直到被正确响应。函数PumpMessage调用了函数CWinThread::PreTranslateMessage对消息进行处理,如果该函数不对消息进行处理,则调用API函数TranslateMessage函数将虚拟键消息转换为字符消息并调用DispatchMessage分发消息给窗口处理程序。在对话框中,程序用CWinThread::PreTranslateMessage函数处理了键盘消息,所以对话框程序是否要响应键盘消息,将完全由CWinThread::PreTranslateMessage函数来决定了。在CWnd及其派生类的成员函数PreTranslateMessage函数是一个虚函数,可以通过重载来改变其处理过程。在默认情况下,没有重载这一函数。例子1:在VC6中创建基于对话框的工程,在Class view中找到相应的对话框类单击右键,在右键菜单中选择Add Virtual Fuction...项,然后找到PreTranslateMessage虚函数进行加载。相应的代码中如下:BOOL CTestDlg::PreTranslateMessage(MSG* pMsg){ // TODO: Add your specialized code here and/or call the base class //判断是否是按键消息 if( pMsg-&message == WM_KEYDOWN ) {
MessageBox(&有键被按下&); //判断具体键 switch( pMsg-&wParam ) {
case VK_LEFT://按下左键
MessageBox(_T(&左&)); return TRUE;
case VK_RIGHT://按下右键
MessageBox(_T(&右&)); return TRUE; }} case VK_UP://按下上键
MessageBox(_T(&上&)); return TRUE;
case VK_DOWN://按下下键
MessageBox(_T(&下&)); return TRUE;
} return CDialog::PreTranslateMessage(pMsg); return TRUE;例子2:1. 在VC6中创建基于SDI的工程“Ch5Demo3”;2. 添加WM_CHAR消息映射和响应函数执行“view”――&“ClassWizard”菜单命令,打开“ MFC ClassWizard”对话框,添加WM_CHAR消息映射,ClassWizard自动为WM_CHAR添加了ON_WM_CHAR消息映射宏和OnChar()消息处理函数。3. 手工添加实现代码(1) 在视图类CCH5DEMO3VIEW的头文件“CCH5DEMO3VIEW.H”中,定义CPoint型变量,用于记录字符在视图窗口中的输出位置。代码如下:public:CPoint ptC(2) 在CCH5DEMO3VIEW类的构造函数中,初始化ptCharacter位置为(0,0)。代码如下:CCh5Demo1View::CCh5Demo1View(){ }(3) 在WM_CHAR消息响应函数OnChar()中,实现字符的现实以及换行。代码如下: // TODO: 在此处添加构造代码 ptCharacter.x = 0; ptCharacter.y = 0; void CCh5Demo1View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { }编译运行程序后,当用户通过键盘键入字符时,即会在视图窗口输出现实。如果按下了【enter】键,将换行输出。 附上: // TODO: 在此添加消息处理程序代码和/或调用默认值 if(nChar == 13) {
} CView::OnChar(nChar, nRepCnt, nFlags); CClientDC dc(this); dc.TextOut(ptCharacter.x,ptCharacter.y,(LPCTSTR)&nChar); CS textsize = dc.GetTextExtent((LPCTSTR)&nChar); ptCharacter.x = ptCharacter.x+textsize. ptCharacter.x = 0; ptCharacter.y = ptCharacter.y+25;nChar 代码与键盘中各键的对应关系如下(nChar为数字,可以通过((LPCTSTR)&nChar)强制转换,将nChar转换成字母):VK_0 到 VK_9
表示键盘上数字“ 0 ”到“ 9 ”键 (ASCII 码为 0x30 - 0x39) ;
VK_A 到 VK_Z
表示键盘上字母“ A ”到“ Z ”键 (ASCII 码为 0x41 - 0x5a) ;
表示数字键盘上的“ + ”键。VK_ALT
表示键盘上 “ ALT ”键。VK_BACK_QUOTE
表示键盘上 “ ` ”键。VK_BACK_SLASH
表示键盘上 “ \ ”键。VK_BACK_SPACE
表示键盘上 “ BACKSPACE “键。VK_CAPS_LOCK
表示键盘上 “ CAPS LOCK ”键。VK_CLOSE_BRACKET
表示键盘上 “ ] ”键。VK_COMMAN
表示键盘上 “ , ”键。VK_CONTROL
表示键盘上 “ CTRL ”键。VK_DECIMAL
表示数字键盘上 “ . ”键。VK_DELETE
表示键盘上 “ DELETE ”键。VK_DIVIDE
表示键盘上 “ / ”键。VK_DOWN
表示键盘上 “向下箭头”键。VK_END
表示键盘上 “ END ”键。VK_ENTER
表示键盘上 “ ENTER ”键。VK_EQUALS
表示键盘上 “=”键。VK_ESCAPE
表示键盘上 “ ESC ”键。VK_F1 到 VK_F12
表示键盘上 “ F1 ”到“ F12 ”键。VK_HOME
表示键盘上 “ HOME ”键。VK_INSERT
表示键盘上 “ INSTERT ”键。VK_LEFT
表示键盘上 “向左箭头”键。VK_MULTIPLY
表示键盘上 “ * ”键。VK_NUMPAD0 到 VK_NUMPAD9
表示数字键盘上 “ 0 ”到“ 9 ”键。
VK_OPEN_BRACKET
表示键盘上 “ [ ”键。VK_PAGE_DOWN
表示键盘上 “ PAGE DOWN ”键。VK_PAGE_UP
表示键盘上 “ PAGE UP ”键。包含各类专业文献、应用写作文书、文学作品欣赏、专业论文、行业资料、中学教育、生活休闲娱乐、78如何在MFC对话框与单文档(SDI)工程中获得与处理键盘消息等内容。 
  【】 
您可在本站搜索以下内容:
  MFC下 SDI 单文档 对话框 工具栏编程总结_IT/...消息 用于菜单的维护的一些函数如 SetCheck 等 1. ...
 MFC 单文档中处理键盘消息 单文档中处理键盘消息 VC...例子 1:对话框的工程 在 VC6 中创建基于对话框的...在 VC6 中创建基于 SDI 的工程“ChsDemo3” ; ...
  暂无评价|0人阅读|0次下载|举报文档 MFC对话框中对键盘消息的处理_IT/计算机_专业资料。MFC 对话框中对键盘消息的处理
1s:43:28| 分类: 编程 ...
 比如在用 VC++编辑工程源文件或编辑对 话框等资源时,选择菜单“View\Full ...由于视图类可以处理键盘输入的有关消息 (如 WM_KEYDOWN 表示用户按下 了某一...
  MFC编程基础对话框_工学_高等教育_教育专区。基于...(2) 单文档界面 SDI )( 应用程序: 这类程序一...连接变量,即为控件命名; (s)添加并且编写消息处理...
  MFC分析对话框的运行机制心得体会_计算机软件及应用...消息处理函数,通常的按钮 响应都是在 CPropertyPage ...2 文档、视图、框架之间的关联 MFC SDI/MDI 中的...
  MFC单文档(SDI)全屏程序... 2页 1下载券...这样编译的 EXE 文件将不会弹出对话框。 在研究 ...在 CMainFrame 中处理该菜单消息, 消息响应函数中...
  MFC下 SDI 单文档 对话框 ... 3页 免费 ...为 WM_DRAW 编写消息映射函数, 4.用键盘的按键...(TRUE); // TODO: 在此处添加消息处理程序代码 }...
 在基于单文档(SDI)程序中应用 MSCOMM 串口通讯控件(附源程序) ◆龚建伟技术主页◆ 龚建伟 MSCOMM 串口通讯控件在基于对话框的程序中很好使用(可以参考我写的“...
赞助商链接
别人正在看什么?
赞助商链接难道这就是:cf生化的灵异事件!? - 穿越火线视频 - 爱拍原创

我要回帖

更多关于 交易猫吧 的文章

 

随机推荐