注册 登录
编程论坛 VC++/MFC

如何实现快捷键调出后台运行的窗口

windyfzz 发布于 2010-09-11 20:15, 2574 次点击
做了一个定时器,点击"后台运行"时程序后台运行。(我的实现是当点击"后台运行"调用ShowWindow(SW_HIDE)函数。)

我想当我按Q或q键时再次调出程序,于是我在对话框类中添加了一个WM_CHAR消息
void CShuntdownTimerDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: Add your message handler code here and/or call default
    if (113 == nChar || 81 == nChar)  //q或Q的ASCII码
只有本站会员才能查看附件,请 登录

    {  
        ShowWindow(SW_SHOWNORMAL);
      
    }
    //CDialog::OnChar(nChar, nRepCnt, nFlags);
}
编译运行成功,但当窗口后台运行时按q或Q键时窗口却没有显示出来。为什么?
4 回复
#2
ybjx19872010-09-11 20:34
当你的程序隐藏后就不能直接接收WM_CHAR消息了,你可以建立一个全局钩子来实现对WM_KEYUP或WM_KEYDOWN的响应。你也可以用GetAsyncKeyState(int vKey)来判断某个键是否按下,vKey是键盘的虚键代码,每个键的虚键代码可以在网上查到,你可以在OnTimer()进行判断。
#3
windyfzz2010-09-12 21:35
回复 2楼 ybjx1987
谢谢,改好了!

这是新的程序,增加了一些功能。(附源代码,因为刚学MFC,代码难免不甚完美,真诚的希望大家给改进下!)

Shift+Ctrl键调出后台程序。

只有本站会员才能查看附件,请 登录

#4
ycc8920092010-09-28 12:24
我给一点建议吧。ShowWindow函数我觉得不是很好用的。你可以用SetwindowPos函数把窗口大小都设为0
,这个函数执行后是可以接受到wm消息的。当你想再次显现窗口的时候就再次调用SetwindowPos设为原来窗口的大小。
这个函数很有用的。这样就不用hook那么麻烦了。个人见解。
#5
mjx912820412011-07-26 01:58
学习,学习!谢谢楼主的分享~!
1