摘自: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.控件知识
#define __MY_VK_H__
//却没有对它们进行定义,所以我们只好自己来定义了
//定义其实挺简单的,定义的数值为相应的字符的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)
#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
#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
#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
相关推荐
开发者需要理解如何在消息处理函数中响应鼠标和键盘事件,以实现画笔的移动和绘制。 在PantoDrw程序中,用户可能会看到这样的功能:点击或拖动鼠标时,程序会在记事本区域内留下线条,模拟画笔的效果。此外,可能还...
3. **事件处理**:在VC++ 6.0中,MFC通过消息映射机制处理用户的输入事件,如鼠标点击或键盘按键。我们需要定义消息响应函数,例如ON_BN_CLICKED消息处理按钮点击事件,ON_WM_PAINT消息处理窗口重绘事件。 4. **...
3. 输入和运算管理:在一个CEdit控件中获取用户输入,通过OnChar()或OnEditChange()响应键盘输入。运算过程可能通过一个中间变量保存当前的计算结果,每次点击运算符后更新表达式。 4. 错误检测和处理:在执行计算前...
4. **事件处理**:响应用户的鼠标点击、键盘输入等事件。 ### 五、MFC(Microsoft Foundation Classes) MFC是微软提供的C++类库,简化了Windows编程。了解MFC的框架结构: 1. **CWinApp**:应用程序类,负责初始化...
在这个游戏中,它负责设置游戏界面,响应用户的输入,并更新游戏状态。 2. **SnakeGameCDQ.cpp**:这是游戏逻辑的核心,包含了蛇的移动、食物生成、碰撞检测等核心算法。通过定时器事件,定期调用游戏循环,实现蛇...
3. Windows编程:掌握Windows消息机制,如何响应用户的输入事件。 4. 源码阅读与调试:通过阅读和分析源代码,提高代码理解和问题解决能力。 5. 虚拟键盘实现:学习如何模拟键盘输入,实现自定义的字符映射和输入...
4. **事件驱动编程**:计算器的运作基于事件驱动机制,即用户的每个操作(如点击按钮)都会触发相应的事件,程序通过响应这些事件来进行计算。例如,当用户点击数字按钮时,事件处理器会更新显示的数值;当点击...
2. **事件驱动编程**:指法练习软件需要响应用户的键盘输入,这就涉及到Windows的消息机制。当用户按下键盘时,系统会产生相应的键盘消息,如`WM_KEYDOWN`,应用程序需要在消息循环中捕获并处理这些消息。 3. **多...
在VC++6.0环境下,开发者需要熟悉MFC的类库结构,包括`CWnd`、`CDialog`、`CButton`、`CEdit`等,这些类都提供了与Windows窗口交互的方法。在开发过程中,通常会创建一个继承自`CDialog`的类,然后在其中重载`...
【MFC 贪吃蛇】是一款经典的计算机游戏,利用Microsoft Foundation Classes (MFC) 库在VC++6.0开发环境中实现。MFC 是微软为Windows操作系统提供的一套C++类库,它封装了Windows API,使得开发者可以更加方便地进行...
例如,可以定义WM_KEYDOWN消息来响应用户的键盘输入,控制方块的移动和旋转;通过定时器(CTimer)来实现方块的自动下落。 源代码中的关键部分可能包括以下几个方面: 1. 方块的定义:每个方块由多个小方格组成,...
3. 界面响应:响应用户的鼠标和键盘事件,更新界面状态。 4. 菜单和快捷键:设置菜单项,关联快捷键,实现功能调用。 5. 错误处理:在遇到无法打开或保存文件、内存不足等情况时,给出适当的错误提示。 总的来说,...
3. **直接绑定到对话框控件**:用户可以将软键盘直接与对话框上的编辑框等控件关联,无需编写额外的代码来处理键盘的位置和事件响应。 4. **不需通过代码指定CRect位置**:这意味着软键盘的位置在设计时就已经确定,...
6. **事件处理**:文本编辑器需要响应用户的键盘和鼠标输入,这涉及到Windows消息循环和消息处理。例如,处理WM_KEYDOWN消息进行文本输入,或者处理WM_LBUTTONDOWN消息进行光标移动。 7. **字体和样式设置**:编辑...
- 在 MFC 中,可以通过 WM_KEYDOWN 消息来检测键盘输入,并映射到相应的命令。 - 可以使用 CCommandMap 类来管理快捷键。 #### 六、使用 Windows 标准控件 **6.1 使用对话框编辑器和 ClassWizard** - **对话框...