VC如何做这样一个热键,仅在我的程序处于激活状态时有效?具体请看 我要在我的程序启动后,当键盘输入为字母或者数字时就弹出一个对话框,而且只有当我程序是激活状态时响应,不像有的热键,程序在后台也能响应。我只想做成上面这样简单。有无这样的例子(VC++) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL CChatTemplet::PreTranslateMessage(MSG* pMsg) { if(GetForegroundWindow()==::FindWindow(NULL,"窗口名字"))//判断焦点在不在框内 { if(pMsg->message==WM_KEYDOWN) { if(pMsg->wParam==VK_F1) {// MessageBox("OK"); } } } return CDialog::PreTranslateMessage(pMsg);} 这个就更简单了,直接用PreTranslateMessage()捕获所有的按键就行了.BOOL CMydilog::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { MessageBox("这里加入你弹出对话框的代码"); }.. 对于楼主的要求,这样的程序如果没有焦点时,该代码是不会响应的,所以不用判断程序的焦点问题.也就是说,BOOL CMydilog::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { MessageBox("这里加入你弹出对话框的代码"); } return CDialog::PreTranslateMessage(pMsg);}只有当有焦点时才会响应,没有焦点是不会响应的 RegisterHotKey(m_hWnd,0Xa002,MOD_ALT,'A'); ::SetFocus(m_hWnd);************************************************************BOOL CDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if (pMsg->message==WM_HOTKEY && pMsg->wParam==0Xa002) { AfxMessageBox("My MessageBox!"); } return CDialog::PreTranslateMessage(pMsg);}LRESULT CDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class if(message == WM_CLOSE) { ::UnregisterHotKey(m_hWnd,0Xa002); } return CDialog::WindowProc(message, wParam, lParam);} 但是如果是一个多文档视图的程序呢?我这个PreTranslateMessage放在哪 如果是一个多文档视图的程序呢?我这个PreTranslateMessage放在哪A :可以自己在类向导的CMaimFrame里面添加PreTranslateMessage消息! 在CMaimFrame里添加PreTranslateMessage消息就可以了啊 关于FindConnectionPoint的疑问 OpenGL高手请进 关于控件中内容的拖放的问题 谁有相关wm encoder相关资料,收到给分! 请问可以具体设定DBGrid空件的各个单元的背景色吗?如我要设定第二行第三列的颜色为红色,字体为蓝色,可以吗?请教! 各位大侠救命win2000 server下为何得不到真正的IP 关于Crack方面的,请帮忙 数据类型的转换??????? vc中的消息机制问题 线程无法执行,是XP、08R2的问题还是MSVC的BUG? 函数指针的内存释放问题 堂堂一个卧虎苍龙得csdn,高手们都到那里去了??????????????????再发一铁,在线
{
if(GetForegroundWindow()==::FindWindow(NULL,"窗口名字"))//判断焦点在不在框内
{
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_F1)
{
// MessageBox("OK");
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
捕获所有的按键就行了.BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
MessageBox("这里加入你弹出对话框的代码");
}..
所以不用判断程序的焦点问题.也就是说,
BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
MessageBox("这里加入你弹出对话框的代码");
}
return CDialog::PreTranslateMessage(pMsg);
}
只有当有焦点时才会响应,没有焦点是不会响应的
::SetFocus(m_hWnd);
************************************************************
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message==WM_HOTKEY && pMsg->wParam==0Xa002)
{
AfxMessageBox("My MessageBox!");
}
return CDialog::PreTranslateMessage(pMsg);
}LRESULT CDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message == WM_CLOSE)
{
::UnregisterHotKey(m_hWnd,0Xa002);
}
return CDialog::WindowProc(message, wParam, lParam);
}