edit如何获取按键

zy2015036 2010-07-18 06:28:21
比如我在一个edit 按一下F1建,他就显示F1这个键,这是怎么实现的?
谢谢。
...全文
290 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
iqyely 2010-07-18
  • 打赏
  • 举报
回复
来学习下。
wltg2001 2010-07-18
  • 打赏
  • 举报
回复
这里面怎么写消息代码呢?
比如响应edit1 按哪个键就显示出哪个键。
我初学不好意思,麻烦各位了。
==============
有些键是可显示的,比如A,B之类的,有些键本身就不是可显示的,比如你所说的F1,对于可显字符不用处理,它自己会显示的,对于不可显的你只能自己做一个映射,比如虚拟码VK_F1则显示F1。
webcq1999 2010-07-18
  • 打赏
  • 举报
回复
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

//将 nChar 转换为可显示的字符如 A B C D 。。。 F1 F2。。。,然后使用 SetWindowText() 函数显示出来

CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
duke56 2010-07-18
  • 打赏
  • 举报
回复
热键控制不是2005才有吧

6.0也有地...^_^
  • 打赏
  • 举报
回复
用控件 HotKey

VC2005 就有。


向立天 2010-07-18
  • 打赏
  • 举报
回复
键码是预定义的

/*
* 0x07 : unassigned
*/

#define VK_BACK 0x08
#define VK_TAB 0x09

/*
* 0x0A - 0x0B : reserved
*/

#define VK_CLEAR 0x0C
#define VK_RETURN 0x0D

#define VK_SHIFT 0x10
#define VK_CONTROL 0x11
#define VK_MENU 0x12
#define VK_PAUSE 0x13
#define VK_CAPITAL 0x14

#define VK_KANA 0x15
#define VK_HANGEUL 0x15 /* old name - should be here for compatibility */
#define VK_HANGUL 0x15
#define VK_JUNJA 0x17
#define VK_FINAL 0x18
#define VK_HANJA 0x19
#define VK_KANJI 0x19

#define VK_ESCAPE 0x1B

#define VK_CONVERT 0x1C
#define VK_NONCONVERT 0x1D
#define VK_ACCEPT 0x1E
#define VK_MODECHANGE 0x1F

#define VK_SPACE 0x20
#define VK_PRIOR 0x21
#define VK_NEXT 0x22
#define VK_END 0x23
#define VK_HOME 0x24
#define VK_LEFT 0x25
#define VK_UP 0x26
#define VK_RIGHT 0x27
#define VK_DOWN 0x28
#define VK_SELECT 0x29
#define VK_PRINT 0x2A
#define VK_EXECUTE 0x2B
#define VK_SNAPSHOT 0x2C
#define VK_INSERT 0x2D
#define VK_DELETE 0x2E
#define VK_HELP 0x2F

/*
* 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_LWIN 0x5B
#define VK_RWIN 0x5C
#define VK_APPS 0x5D

/*
* 0x5E : reserved
*/

#define VK_SLEEP 0x5F

#define VK_NUMPAD0 0x60
#define VK_NUMPAD1 0x61
#define VK_NUMPAD2 0x62
#define VK_NUMPAD3 0x63
#define VK_NUMPAD4 0x64
#define VK_NUMPAD5 0x65
#define VK_NUMPAD6 0x66
#define VK_NUMPAD7 0x67
#define VK_NUMPAD8 0x68
#define VK_NUMPAD9 0x69
#define VK_MULTIPLY 0x6A
#define VK_ADD 0x6B
#define VK_SEPARATOR 0x6C
#define VK_SUBTRACT 0x6D
#define VK_DECIMAL 0x6E
#define VK_DIVIDE 0x6F
#define VK_F1 0x70
#define VK_F2 0x71
#define VK_F3 0x72
#define VK_F4 0x73
#define VK_F5 0x74
#define VK_F6 0x75
#define VK_F7 0x76
#define VK_F8 0x77
#define VK_F9 0x78
#define VK_F10 0x79
#define VK_F11 0x7A
#define VK_F12 0x7B
#define VK_F13 0x7C
#define VK_F14 0x7D
#define VK_F15 0x7E
#define VK_F16 0x7F
#define VK_F17 0x80
#define VK_F18 0x81
#define VK_F19 0x82
#define VK_F20 0x83
#define VK_F21 0x84
#define VK_F22 0x85
#define VK_F23 0x86
#define VK_F24 0x87

/*
* 0x88 - 0x8F : unassigned
*/

#define VK_NUMLOCK 0x90
#define VK_SCROLL 0x91
zy2015036 2010-07-18
  • 打赏
  • 举报
回复
帖子已经增加了60分。希望各位能帮帮我。
zy2015036 2010-07-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 claudebell 的回复:]
可以从CEdit派生一个子类,如CMyEdit,然后添加消息响应函数OnKeyDown,在这里进行按键的判断
在添加Edit控件时,控件的类为自己写的CMyEdit
[/Quote]
我用了这个方法。但是OnKeyDown怎么写呢
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
这里面怎么写消息代码呢?
比如响应edit1 按哪个键就显示出哪个键。
我初学不好意思,麻烦各位了。
向立天 2010-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zy2015036 的回复:]
回复楼上,那么如果键盘有100多个按键这么处理的话效率会不会很低。
还有没有别的方法。
[/Quote]
把你这些建的键码做一个映射就好了
比如F1是0x70然后你要显示的字符串就是
strKey[0x70]
类似这种
当然映射关系越科学数组越小
wltg2001 2010-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zy2015036 的回复:]
回复楼上,那么如果键盘有100多个按键这么处理的话效率会不会很低。
还有没有别的方法。
[/Quote]
如果你不是专门处理F1的话,那么从CEdit类中继承一个子类,处理WM_KEYDOWN消息,但是对于F1这样的非可显的键,你必须要将虚拟码转化为字符,这个是没有办法的。
0="0" 2010-07-18
  • 打赏
  • 举报
回复
OnKeyDown消息
zy2015036 2010-07-18
  • 打赏
  • 举报
回复
回复楼上,那么如果键盘有100多个按键这么处理的话效率会不会很低。
还有没有别的方法。
wltg2001 2010-07-18
  • 打赏
  • 举报
回复
方法很多,下面是一个例子:处理PreTranslateMessage
BOOL CqqqDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
HWND hwnd=((CEdit *)GetDlgItem(IDC_EDIT1))->m_hWnd;
CString work=_T("F1");
if(pMsg->message==WM_KEYDOWN && pMsg->hwnd==hwnd && pMsg->wParam==VK_F1)
SetDlgItemText(IDC_EDIT1,work);

return CDialog::PreTranslateMessage(pMsg);
}
hankcs 2010-07-18
  • 打赏
  • 举报
回复
同意楼上,还要编写由按键消息到按键名的转换代码
claudebell 2010-07-18
  • 打赏
  • 举报
回复
可以从CEdit派生一个子类,如CMyEdit,然后添加消息响应函数OnKeyDown,在这里进行按键的判断
在添加Edit控件时,控件的类为自己写的CMyEdit

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧