如何在对话框中响应快捷键?

danial 2000-04-29 05:22:00
我要在基于对话框的程序中响应快捷键,比如按“CTRL+0”系统就调用相应的处理函数,请问该如何实现?
...全文
412 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt985 2001-06-01
  • 打赏
  • 举报
回复
71734关注!
guoxiao 2001-03-01
  • 打赏
  • 举报
回复
我使用的详细代码如下:
void NewDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(GetKeyState(VK_CONTROL))
{
if(nChar==0x58) //Ctrl+X
OnEditCut();
if(nChar==0x56) //Ctrl+V
OnEditPaste();
if(nChar==0x43) //Ctrl+C
OnEditCopy();
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
guoxiao 2001-03-01
  • 打赏
  • 举报
回复
hi,wild
hi,danial
我也遇到了同样的问题,也没有关于GetKeyState()的参考资料,请问它的返回值是什么?
在我使用的参考书上判断Ctrl键是否按下时使用了如下一句:
if(GetKeyState(VK_CONTROL)&0x8000)
{
if(nChar==.....)
............
}
我不太明白是什么意思,请赐教!
wild 2000-06-09
  • 打赏
  • 举报
回复
用GetKeyState()吧,可以检测所有键的状态
SHORT GetKeyState(
int nVirtKey // virtual-key code
);
If the high-order bit is 1, the key is down; otherwise, it is up.
If the low-order bit is 1, the key is toggled. A key, such as the caps lock key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.

另外,可以参考 GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey

详细情况查MSDN,注意这个函数区分左右Control,Alt,and Shift.

!!!
不妨这样做:
PreTranslate中捕获 0 键按下消息,这时使用GetKeyState(), 检测VK_RCTRL and VK_LCTRL,如下:
BOOL CMyDialog::PreTranslateMessage(MSG * pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN:
switch(pMsg->wParam)
{
case VK_0:
if(GetKeyState(Control keys) is down)
{
// Handle here
}
return TRUE; //end the message routing
default: break;
}
break;



// TO Handle more messages here.
// case WM_xxx: break;
default: break;
}
// default handle of Dialog
return CDialog::PreTranslateMessage(pMsg);
}
wild 2000-06-09
  • 打赏
  • 举报
回复
用GetKeyState()吧,可以检测所有键的状态
SHORT GetKeyState(
int nVirtKey // virtual-key code
);
If the high-order bit is 1, the key is down; otherwise, it is up.
If the low-order bit is 1, the key is toggled. A key, such as the caps lock key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.

另外,可以参考 GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey

详细情况查MSDN,注意这个函数区分左右Control,Alt,and Shift.

!!!
不妨这样做:
PreTranslate中捕获 0 键按下消息,这时使用GetKeyState(), 检测VK_RCTRL and VK_LCTRL,如下:
BOOL CMyDialog::PreTranslateMessage(MSG * pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN:
switch(pMsg->wParam)
{
case VK_0:
/*handle Ctrl-0*/ return TRUE; //end the message routing
default: break;
}
break;



// TO Handle more messages here.
// case WM_xxx: break;
default: break;
}
// default handle of Edit control
return CEdit::PreTranslateMessage(pMsg);
}
danial 2000-06-08
  • 打赏
  • 举报
回复
我现在要响应的快捷键是复合键,可在用PreTranslateMessage()捕获消息WM_KEYDOWN时,刚按下一个键(如Ctrl或0)就进入PreTranslateMessage()函数,请问我该如何同时检测到Ctrl和0键的按下呢?
danial 2000-05-18
  • 打赏
  • 举报
回复
VC好象不能识别CTRL_0宏吧?
wild 2000-05-11
  • 打赏
  • 举报
回复
BOOL CMyEditCtrl::PreTranslateMessage(MSG * pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN:
switch(pMsg->wParam)
{
case CTRL_0: /*handle Ctrl-0*/ return TRUE; //end the message routing
default: break;
}
break;



// TO Handle more messages here.
// case WM_xxx: break;
default: break;
}
// default handle of Edit control
return CEdit::PreTranslateMessage(pMsg);
}
danial 2000-05-10
  • 打赏
  • 举报
回复
谢谢wild提供的思路。能否给出PreTranslateMessage()实现的源代码以供参考?
wild 2000-04-29
  • 打赏
  • 举报
回复
方法有很多,提供几个思路:
可以重载PreTranslateMessage()捕获WM_KEYDOWN消息,并处理某一键值。
可以通过键盘HOOK.

16,466

社区成员

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

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

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