在基于对话框的程序里,如何定义快捷键Alt+s?
不是Ctrl或其他,而是Alt+s
我用了
BOOL CMYDlg::PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
if(GetKeyState(VK_MENU)&GetKeyState(0x53))
{
::AfxMessageBox("ww");
}
}
return CDialog::PreTranslateMessage(pMsg);
}
却不行,请高手指教!
问题点数:20、回复次数:3Top
1 楼xtuzi(小兔子)回复于 2003-11-02 23:35:37 得分 10
你可以用Accelerator,实现任何快捷键
CreateAccelerator.... //API,具体的忘了
TranslateAccelerator
如果仅仅是Alt + S。比如一个按纽Button,你只需要在caption里加上(&S)就可以了,跟菜单的方式一样。Top
2 楼everandforever(Forever)回复于 2003-11-03 00:08:31 得分 5
ALT 属于 WM_SYSKEYDOWN
case WM_SYSKEYDOWN:
if( Msg.wParam == 83 ) // 'S', 不必区分大小写
if( ((int)GetKeyState(VK_LMENU))&32768 //左 ALT
|| ((int)GetKeyState(VK_RMENU))&32768 ) //右 ALT
{
...
}
break;
Top
3 楼sxslyy(孤松傲雪)回复于 2003-11-03 10:31:54 得分 5
在Dlg的头文件中加入:
HACCEL m_hAccel;
在Dlg的构造函数中加载加速键:
m_hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));//加速键ID
重载PreTranslateMessage函数:
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(m_hAccel!=NULL)
if(::TranslateAccelerator(m_hWnd,m_hAccel,pMsg))
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
一切OK;Top




