摘自: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
相关推荐
VC++重绘CEDIT控件,在控件里面插入背景图,可以直接用EVC VS2008打开,
CListCtrl 编辑表格实现,CEdit 的回车响应事件,大部分是摘抄的网上的资源,自己在使用时进行了整理,整个是实现了CListCtrl 的可编辑!
VC++限制编辑框输入文本的长度,也就是像WEB表单中的输入框功能类似,限制用户输入字符的数量,这样可以预防用户输入了超过规定限制的字符数量,有效避免程序出错。在本例的输入框中,中允许用户输入7个字符,再多...
此类实现了动态改变 CEdit编辑框 背景颜色和文字颜色的功能,再辅助与获取焦点响应函数可以使编写的软件更加美观。
完整的描述了在MFC中对于CComboBox的内容的存取
CEdit重写,实现CStatic功能
cedit 只允许输入 数字,这个是很久以前做的第一个小程序,很有成就感,献给有需要的人,少走弯路。估计现在很少人用MFC了,纪念一下吧
这个简单的小程序演示了在VC环境下如何对从CEdit控件的输入进行控制(该例子是仅允许输入标准的数值)。同时也演示XPButton这个类的用法。
详细描述见我的博客:http://blog.csdn.net/qq_23992597/article/details/53214215
一个简单的mfc小例子,重写了CEdit,使它可以过滤吊我们不想要的字符和限定了输入长度.它可以自由的在限制状态和费闲置状态之间切换.
子窗口负责皮肤的绘制,而CEdit负责处理用户的输入。这样一来,可以利用到CEdit原有的一些特性,以保证原有的效果,并减轻我们开发的工作量。 与之配套的博客:...
VC 为文本框控件的光标设置输入焦点,焦点就是文本框默认出现光标的位置,光标默认在第几个文本框中显示,本代码将向你演示如何设置默认的文本框光标。下面是相关的代码: //获得编辑框窗口 CEdit* pEdit1 = ...
CEdit控件重写类CEditList,输入自动提示匹配内容,博客链接https://blog.csdn.net/jiangyingfeng/article/details/80454180
多个编辑框,单击每个编辑框都要弹出数字键盘,在编辑的位置弹出,并且数据直接编辑到当前的编辑框,按自定义键盘上的数字键,所对应的数据直接显示到要编辑的对话框中,工具用的VS2017
VC++6.0 控制摄像头 一个视频捕捉类对摄像头的操作。 VC+++暴风影音(Media+Player+Classic)源码 知道的人不多,但提起国内的暴风影音,我想知道的人就多了,其实暴风影音就是Media Player Classic,暴风影音只是同我...
带有CEdit CComBox的CListCtrl派生类
该扩展类只能输入正的整数或负数,对于浮点数,也可参考定制......
自定义CEdit,限制CEdit只能输入小数,例子简单,仅供参考
自动过滤输入数值时的非法字符的CEdit类