如何捕获按键? 一对话框,我需要捕获其中的OnKeyUp,如果对话框上什么控件都没有的话,这是没有问题的但是如果对话框上有控件,对话框就有可能收不到OnKeyUp,网上找了一下,好象vb里面有个叫KeyPreview的属性,但是vc没有这东西,不知道怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在对话框的PreTranslateMessage中处理键盘消息。 BOOL CT3Dlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYUP) { //按键值放在pMsg->wParam中,以下以检测用户是否按下Tab键为例 //把光标移到下面一行的"VK_TAB"处,按下F12键就可以知道其它键的值了 if(pMsg->wParam == VK_TAB) AfxMessageBox("你按下了Tab键"); } return CDialog::PreTranslateMessage(pMsg); } 忘了说了,添加对话框的PreTranslateMessage处理函数的方法是: 在你的工程中按Ctrl+W键,在MFC ClassWizard中Object IDs栏中选择C****Dlg(****为你的工程名),然后再右侧的Messages中找到PreTranslateMessage项,双击它,再在下面的Member functions中再次双击PreTranslateMessage项,接下来就可以按上面的代码自己处理PreTranslateMessage函数了。 在PreTranslateMessage中捕获WM_KEYUP消息即可 那就把WM_KEYUP换成WM_KEYDOWN就行了:BOOL CDddDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN) { if(pMsg->wParam == VK_TAB) { //在这里加上你的处理代码 } } return CDialog::PreTranslateMessage(pMsg);} VC6 UDP编程聊天室BUG,求大神解? 如何在CRichEditCtrl中使用CFindReplaceDialog实现查找替换? 有关win32程序和mfc程序不了解的地方 读TXT文件的问题! 我做SCANNER时,出现下面的问题,请问怎么解决? 各位老大帮忙给看看呗 借火星光辉祝福大家中秋快乐 请问怎么在对话框里画一条带箭头的线?谢谢 句柄到底是个什么东东? 位图载入问题---如何使载入的位图完全显示在控件内? (内有部分代码) 一个有关列表框的Dir方法的问题? 如何实现类似VS 2003的自能感知?
{ if(pMsg->message == WM_KEYUP)
{
//按键值放在pMsg->wParam中,以下以检测用户是否按下Tab键为例
//把光标移到下面一行的"VK_TAB"处,按下F12键就可以知道其它键的值了
if(pMsg->wParam == VK_TAB)
AfxMessageBox("你按下了Tab键");
}
return CDialog::PreTranslateMessage(pMsg);
}
在你的工程中按Ctrl+W键,在MFC ClassWizard中Object IDs栏中选择C****Dlg(****为你的工程名),然后再右侧的Messages中找到PreTranslateMessage项,双击它,再在下面的Member functions中再次双击PreTranslateMessage项,接下来就可以按上面的代码自己处理PreTranslateMessage函数了。
BOOL CDddDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_TAB)
{
//在这里加上你的处理代码
}
} return CDialog::PreTranslateMessage(pMsg);
}