VS2012MFC基于单文档模式的自定义热键无法响应 vs2012mfc自定义热键不响应单文档模式 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没时间弄程序了你找这个人吧:http://my.csdn.net/dingxz105090 我这边写了一个测试程序是没有问题的,不知道你的程序怎么写的出了问题我建了一个单文档程序,在about对话框中添加热键,在其他程序界面按下热键,可以接受到class CAboutDlg : public CDialog{public: CAboutDlg();// 对话框数据 enum { IDD = IDD_ABOUTBOX };protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected: DECLARE_MESSAGE_MAP()public: //afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2); afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);//手动加入 virtual BOOL OnInitDialog();};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) ON_MESSAGE(WM_HOTKEY,OnHotKey)END_MESSAGE_MAP()// 用于运行对话框的应用程序命令void ChotkeyApp::OnAppAbout(){ CAboutDlg aboutDlg; aboutDlg.DoModal();}// ChotkeyApp 消息处理程序LONG CAboutDlg::OnHotKey( WPARAM wParam, LPARAM lParam) { UINT fuModifiers = ( UINT ) LOWORD(lParam); // key-modifier flags UINT uVirtKey = ( UINT ) HIWORD(lParam); // virtual-key code //判断响应了什么热键 if ( MOD_SHIFT == fuModifiers && 'D' == uVirtKey ) { AfxMessageBox(_T("你按下了组合键 shift + d" )); } return 0; }BOOL CAboutDlg::OnInitDialog(){ CDialog::OnInitDialog(); WORD virtualcode = MOD_SHIFT; WORD modifiers = 'D'; // TODO: 在此添加额外的初始化 if ( !RegisterHotKey(this->m_hWnd, 100612, virtualcode, modifiers) ) //函数请参考MSDN { MessageBox(_T("热键冲突")); } return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE} 你那个不响应可能是因为你的焦点不在OnHotKey所在的类所处理的界面中吧 lis2012,这几天我试了一下,还是不能响应热键,我可以把工程发你,帮我分析一下吗? 问个可能比较少见的问题 vc 2008开发outlook界面 我写一个MFC程序,能不能控制其他窗口的鼠标事件 C++删除BHO注册表中CLSID遇到的问题 txt文件(百万条记录) 老程序遇到新问题。 可以在派生自CPropertySheet的类上加工具拦吗? CreateProcess 能不能调用16位dos程序? 怎样在MFC程序中使用链表类CList 请大家对我的程序进行评价 GetProcAddress不能返回 CALLBACK 函数地址? 请教你一个问题, vs2005动态链接mfcdll,当我发布我的exe时,想在没有安装vc电脑里面运行,怎样把需要的dll打包过去呢?
你找这个人吧:http://my.csdn.net/dingxz105090
我建了一个单文档程序,在about对话框中添加热键,在其他程序界面按下热键,可以接受到class CAboutDlg : public CDialog
{
public:
CAboutDlg();// 对话框数据
enum { IDD = IDD_ABOUTBOX };protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:
DECLARE_MESSAGE_MAP()
public:
//afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2);
afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);//手动加入
virtual BOOL OnInitDialog();
};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()// 用于运行对话框的应用程序命令
void ChotkeyApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
// ChotkeyApp 消息处理程序
LONG CAboutDlg::OnHotKey( WPARAM wParam, LPARAM lParam)
{
UINT fuModifiers = ( UINT ) LOWORD(lParam); // key-modifier flags
UINT uVirtKey = ( UINT ) HIWORD(lParam); // virtual-key code //判断响应了什么热键
if ( MOD_SHIFT == fuModifiers && 'D' == uVirtKey )
{
AfxMessageBox(_T("你按下了组合键 shift + d" ));
}
return 0;
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
WORD virtualcode = MOD_SHIFT;
WORD modifiers = 'D';
// TODO: 在此添加额外的初始化
if ( !RegisterHotKey(this->m_hWnd, 100612, virtualcode, modifiers) ) //函数请参考MSDN
{
MessageBox(_T("热键冲突"));
}
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}