我的程序是基于对话框的程序。有两个对话框窗口。一个是主对话框窗口。另一个是非模态对话框。
我给主对话框加了快捷键。
如下:///////////////////////////////////////
1.在CMyDlg的类声明中添加:
HACCEL m_hAccel;
2.在构造函数中添加;
m_hAccel = NULL;
3.在OnInitDialog()中添加:
m_hAccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_DLGACCEL));
4.重载PreTranslateMessage()函数,添加:
...
if(m_hAccel)
{
if(::TranslateAccelerator(GetSafeHwnd(), m_hAccel, pMsg))
return TRUE;
}
...
成功!
但后来发现一个问题。当视窗焦点位于非模态对话框时。主对话框窗口的快捷键就失效了!!!
我希望在非模态对话框拥有焦点时。主对话框窗口的快捷键仍然有效。请问怎么办??
我给主对话框加了快捷键。
如下:///////////////////////////////////////
1.在CMyDlg的类声明中添加:
HACCEL m_hAccel;
2.在构造函数中添加;
m_hAccel = NULL;
3.在OnInitDialog()中添加:
m_hAccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_DLGACCEL));
4.重载PreTranslateMessage()函数,添加:
...
if(m_hAccel)
{
if(::TranslateAccelerator(GetSafeHwnd(), m_hAccel, pMsg))
return TRUE;
}
...
成功!
但后来发现一个问题。当视窗焦点位于非模态对话框时。主对话框窗口的快捷键就失效了!!!
我希望在非模态对话框拥有焦点时。主对话框窗口的快捷键仍然有效。请问怎么办??
解决方案 »
- 在MFC SDI程序中,OnSize()问题
- 我在用ShockwaveFlash的时候出现控件未注册的提示
- 关于MFC ODBC访问数据库的问题
- 怎样使用VC访问unix下的sas数据仓库?
- 一个很菜鸟的问题.如何在编辑框中换行并且每换一行如出一个整数n.(int n=0,n<1000,n++)
- 怎么改变combo box里面的数据??
- wxy2ab(Paul)可以把那个播放视频的例子发给我嘛,很急
- 小女有个问题,用SDK怎么实现象VB中的TabScript的那个控件
- GetUrlCacheEntryInfo是否适用于获取ftp本地缓存
- BitBlt的参数SRCINVERT有什么用?
- CString怎么转换到const char*
- 这个问题我想VC版肯定有人能解决!
The RegisterHotKey function defines a system-wide hot key.
if(!RegisterHotKey(m_hWnd, showwinhotkey_, MOD_WIN, 'V'))
{
GlobalDeleteAtom(showwinhotkey_);
AfxMessageBox(_T("注册热键Win+V显示窗口失败!!"));
}
记得退出的时候释放资源,
if(showwinhotkey_)
{
UnregisterHotKey(m_hWnd, showwinhotkey_);
GlobalDeleteAtom(showwinhotkey_);
}
HWND hWnd, // 接收WM_HOTKEY的窗口句柄
int id, // hot key的ID号.
UINT fsModifiers, // 响应那个热键.
UINT vk // 与热键配合的键.
1.在MyDlg.h中:
afx_msg void OnHotKey(WPARAM wParam,LPARAM lParam);2.MyDlg.cpp中:
BEGIN_MESSAGE_MAP(CMyDlg, CDialog) 下面加入
ON_MESSAGE(WM_HOTKEY,OnHotKey) 3.oninitdialog 中:RegisterHotKey(GetSafeHwnd(),m_nHotKeyID,NULL,VK_F3);4.在取消按钮的事件函数中加入:BOOL m_iskeyUnregistered = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID);
ASSERT(m_iskeyUnregistered != FALSE);5.
void CMyDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("你按下了组合键:Alt+E");
return 0;
}