`

VC++6.0 CEdit 响应键盘输入事件

    博客分类:
  • VC++
阅读更多

 

摘自:http://blog.csdn.net/howard_liu1314/article/details/8222357

项目中要对对话框的键盘按键做出相应,实现逻辑如下:

VS2005开发MFC的wince项目;在对话框中‘重写’ PreTranslateMessage方法;

1.头文件中添加:virtual BOOL PreTranslateMessage(MSG* pMsg);

2.cpp文件的实现代码:

 

BOOL CSystemSetupDlg::PreTranslateMessage(MSG* pMsg) 
{
 if(pMsg->message==WM_KEYDOWN) 
 { 
  UINT iKey=(UINT)pMsg->wParam;
  switch(iKey)

  {
  case VK_F1:

//可以用GetKeyState()检测按键状态
   if(GetKeyState(VK_CONTROL)<0)
   {

    //CTRL+F1的处理逻辑

   }

  break;
  case VK_F2:
   if(GetKeyState(VK_CONTROL)<0)
   {

    //CTRL+F2的处理逻辑
   }

   break;
  }
 }

 return CDialog::PreTranslateMessage(pMsg);
}

这样对话框就能相应键盘按键消息了。

3.CEDIT控件只允许输入数字

 

BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)

{

    // TODO:Add your specialized code here and/or call the base class

    CEdit*pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);

   ASSERT(pEdit &&pEdit->GetSafeHwnd());

  //可以使用pEdit->m_hwnd替代GetSafeHwnd

   if((WM_KEYDOWN == pMsg->message)&&(pEdit->GetSafeHwnd() ==pMsg->hwnd))

    {

       if((pMsg->wParam >= _T('0')&& pMsg->wParam<= _T('9'))

           || ((pMsg->wParam >= VK_NUMPAD0)&& (pMsg->wParam<= VK_NUMPAD9))

            || (_T('*') == pMsg->wParam) || (_T('#') ==pMsg->wParam)

            || (VK_LEFT == pMsg->wParam) || (VK_RIGHT ==pMsg->wParam)

            || (VK_UP == pMsg->wParam) || (VK_DOWN ==pMsg->wParam)

            || (VK_DELETE == pMsg->wParam) || (VK_BACK ==pMsg->wParam))

       {

           return CDialog::PreTranslateMessage(pMsg);

       }

       else

       {

           return TRUE;

       }

    }

    returnCDialog::PreTranslateMessage(pMsg);

}
4.控件知识

键代码:
0~9,A~Z 为ASCII码,(去除ASCII码前的0),如A为65,不是065;
VK值列表   
VK_CANCEL                   Ctrl+Break   
VK_TAB                      Tab   
VK_RETURN                   Enter     
VK_SHIFT                    Shift   
VK_CONTROL                  Ctrl   
VK_MENU                     Alt   
VK_LBUTTON                  01 鼠标左键   
VK_RBUTTON                  02 鼠标右键   
VK_CANCEL                   03 用于执行Ctrl+C或Ctrl+Break   
VK_MBUTTON                  04 鼠标中键   
VK_BACK                     08 Backspace键   
VK_TAB                      09 Tab键   
VK_CLEAR                    0C Clear键   
VK_RETURN                   0D Enter键   
VK_SHIFT                    10 Shift键   
VK_CONTROL                  11 Ctrl键   
VK_MENU                     12 Arl键   
VK_PAUSE                    13 Pause键   
VK_CAPITAL                  14 Capslock键   
VK_ESCAPE                   1B Ese键   
VK_SPACE                    20 SpaceBar键   
VK_PRIOR                    21 PgUp键   
VK_NEXT                     22 PgDn键   
VK_END                      23 End键   
VK_HOME                     24 Home键   
VK_LEFT                     25 Left   Arrow键   
VK_UP                       26 Up   Arrow键   
VK_RIGHT                    27 Right   Arrow键   
VK_DOWN                     28 Down   Arrow键   
VK_SELECT                   29 Select键   
VK_EXECUTE                  2B Execute键   
VK_SNAPSHOT                 2C PrintScreen键   
VK_INSERT                   2D               Ins键   
VK_DELECT                   2E Del键   
VK_HELP                     2F Help键   
VK_0                        30 0键   
.........
VK_9                        39 9键   
VK_A                        41 A键   
… … …   
VK_Z                        5A Z键   
VK_NUMAPD0                  60 数字板0键   
… … …   
VK_NUMAPD9                  69 数字板9键   
VK_MULTIPY                  6A 乘号键   
VK_ADD                      6B 加号键   
VK_SEPARATOR                6C Separator键   
VK_SUBSTRACT                6D 减号键   
VK_DECIMAL                  6E 小数点键   
VK_DIVIDE                   6F 除号键   
VK_F1                       70 F1键   
… … …   
VK_F24                      87 F24键   
VK_NUMLOCK                  90 NumLock键   
VK_SCROLL                   91 ScrollLock键   
 
VK_ESCAPE                  Esc   
VK_SPACE                   Space   
VK_PRIOR                   Page Up   
VK_NEXT                    Page Down   
VK_END                     End   
VK_HOME                    Home   
VK_LEFT                    向左方向键   
VK_UP   
VK_RIGHT   
VK_DOWN   
VK_DELETE                  Delete   
VK_INSERT                  Inser   
VK_NUMPAD0~VK_NUMPAD9      小键盘上的0-9键   
VK_F1-VK_f12                F1-F12键 
 
------------------------------------------------------------
个人补充:
1、VK_0 ~VK_9  VK_A~VK_Z  VK_a~VK_z  是没有被定义的,但是可以自己写一个.h文件将这些值定义进去。例如:
#ifndef __MY_VK_H__
#define __MY_VK_H__
//WinUser.h文件中提到了字符0-9,A-Z的取值范围, 
//却没有对它们进行定义,所以我们只好自己来定义了 
//定义其实挺简单的,定义的数值为相应的字符的ASCII码的16进制数据 
//原文信息如下: 
//*     VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39) 
//*    0x40 : unassigned 
//*    VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) 
//定义数据字符0~9 
#define   VK_0         0x30  
#define   VK_1         0x31  
#define   VK_2         0x32  
#define   VK_3         0x33  
#define   VK_4         0x34  
#define   VK_5         0x35  
#define   VK_6         0x36  
#define   VK_7         0x37  
#define   VK_8         0x38  
#define   VK_9         0x39 
//定义数据字符A~Z 
#define   VK_A  0x41  
#define   VK_B  0x42  
#define   VK_C  0x43  
#define   VK_D  0x44  
#define   VK_E  0x45  
#define   VK_F  0x46  
#define   VK_G  0x47  
#define   VK_H  0x48  
#define   VK_I  0x49  
#define   VK_J  0x4A  
#define   VK_K  0x4B  
#define   VK_L  0x4C  
#define   VK_M  0x4D  
#define   VK_N  0x4E  
#define   VK_O  0x4F  
#define   VK_P  0x50  
#define   VK_Q  0x51  
#define   VK_R  0x52  
#define   VK_S  0x53  
#define   VK_T  0x54  
#define   VK_U  0x55  
#define   VK_V  0x56  
#define   VK_W  0x57  
#define   VK_X  0x58  
#define   VK_Y  0x59  
#define   VK_Z  0x5A  
//定义数据字符a~z 
#define   VK_a  0x61  
#define   VK_b  0x62  
#define   VK_c  0x63  
#define   VK_d  0x64  
#define   VK_e  0x65  
#define   VK_f  0x66  
#define   VK_g  0x67  
#define   VK_h  0x68  
#define   VK_i  0x69  
#define   VK_j  0x6A  
#define   VK_k  0x6B  
#define   VK_l  0x6C  
#define   VK_m  0x6D  
#define   VK_n  0x6E  
#define   VK_o  0x6F  
#define   VK_p  0x70  
#define   VK_q  0x71  
#define   VK_r  0x72  
#define   VK_s  0x73  
#define   VK_t  0x74  
#define   VK_u  0x75  
#define   VK_v  0x76  
#define   VK_w  0x77  
#define   VK_x  0x78  
#define   VK_y  0x79  
#define   VK_z  0x7A  
#endif
 
分享到:
评论

相关推荐

    vc++6.0记事本画笔程序

    开发者需要理解如何在消息处理函数中响应鼠标和键盘事件,以实现画笔的移动和绘制。 在PantoDrw程序中,用户可能会看到这样的功能:点击或拖动鼠标时,程序会在记事本区域内留下线条,模拟画笔的效果。此外,可能还...

    用vc++ 6.0开发的调色板游戏

    3. **事件处理**:在VC++ 6.0中,MFC通过消息映射机制处理用户的输入事件,如鼠标点击或键盘按键。我们需要定义消息响应函数,例如ON_BN_CLICKED消息处理按钮点击事件,ON_WM_PAINT消息处理窗口重绘事件。 4. **...

    VC6.0编写的计算器程序

    3. 输入和运算管理:在一个CEdit控件中获取用户输入,通过OnChar()或OnEditChange()响应键盘输入。运算过程可能通过一个中间变量保存当前的计算结果,每次点击运算符后更新表达式。 4. 错误检测和处理:在执行计算前...

    VC 实例教程

    4. **事件处理**:响应用户的鼠标点击、键盘输入等事件。 ### 五、MFC(Microsoft Foundation Classes) MFC是微软提供的C++类库,简化了Windows编程。了解MFC的框架结构: 1. **CWinApp**:应用程序类,负责初始化...

    MFC实现的贪吃蛇

    在这个游戏中,它负责设置游戏界面,响应用户的输入,并更新游戏状态。 2. **SnakeGameCDQ.cpp**:这是游戏逻辑的核心,包含了蛇的移动、食物生成、碰撞检测等核心算法。通过定时器事件,定期调用游戏循环,实现蛇...

    软键盘设计工程源码+可执行文件+说明文档

    3. Windows编程:掌握Windows消息机制,如何响应用户的输入事件。 4. 源码阅读与调试:通过阅读和分析源代码,提高代码理解和问题解决能力。 5. 虚拟键盘实现:学习如何模拟键盘输入,实现自定义的字符映射和输入...

    简易计算器VC++源代码

    4. **事件驱动编程**:计算器的运作基于事件驱动机制,即用户的每个操作(如点击按钮)都会触发相应的事件,程序通过响应这些事件来进行计算。例如,当用户点击数字按钮时,事件处理器会更新显示的数值;当点击...

    vc实现指法练习软件源码

    2. **事件驱动编程**:指法练习软件需要响应用户的键盘输入,这就涉及到Windows的消息机制。当用户按下键盘时,系统会产生相应的键盘消息,如`WM_KEYDOWN`,应用程序需要在消息循环中捕获并处理这些消息。 3. **多...

    Handle_ClildWind_handle平台_aheadwuv_MFC句柄_

    在VC++6.0环境下,开发者需要熟悉MFC的类库结构,包括`CWnd`、`CDialog`、`CButton`、`CEdit`等,这些类都提供了与Windows窗口交互的方法。在开发过程中,通常会创建一个继承自`CDialog`的类,然后在其中重载`...

    MFC 贪吃蛇

    【MFC 贪吃蛇】是一款经典的计算机游戏,利用Microsoft Foundation Classes (MFC) 库在VC++6.0开发环境中实现。MFC 是微软为Windows操作系统提供的一套C++类库,它封装了Windows API,使得开发者可以更加方便地进行...

    VC6.0做的俄罗斯方块,源代码有兴趣的可以看下

    例如,可以定义WM_KEYDOWN消息来响应用户的键盘输入,控制方块的移动和旋转;通过定时器(CTimer)来实现方块的自动下落。 源代码中的关键部分可能包括以下几个方面: 1. 方块的定义:每个方块由多个小方格组成,...

    VC6.0仿真windows记事本程序

    3. 界面响应:响应用户的鼠标和键盘事件,更新界面状态。 4. 菜单和快捷键:设置菜单项,关联快捷键,实现功能调用。 5. 错误处理:在遇到无法打开或保存文件、内存不足等情况时,给出适当的错误提示。 总的来说,...

    软键盘(VC6实现+对话框demo)

    3. **直接绑定到对话框控件**:用户可以将软键盘直接与对话框上的编辑框等控件关联,无需编写额外的代码来处理键盘的位置和事件响应。 4. **不需通过代码指定CRect位置**:这意味着软键盘的位置在设计时就已经确定,...

    vc6下 完整的文本编辑器源码

    6. **事件处理**:文本编辑器需要响应用户的键盘和鼠标输入,这涉及到Windows消息循环和消息处理。例如,处理WM_KEYDOWN消息进行文本输入,或者处理WM_LBUTTONDOWN消息进行光标移动。 7. **字体和样式设置**:编辑...

    VC++实例

    - 在 MFC 中,可以通过 WM_KEYDOWN 消息来检测键盘输入,并映射到相应的命令。 - 可以使用 CCommandMap 类来管理快捷键。 #### 六、使用 Windows 标准控件 **6.1 使用对话框编辑器和 ClassWizard** - **对话框...

Global site tag (gtag.js) - Google Analytics