MFC 如何使窗口 置顶

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:31:52
问题如标题,我就是想在一个热键中的响应,设置热键响应,一按就使指定的窗口置顶,但是我设置了,没效,不知怎么回事。
void CTestzrDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if (wParam==1001)
{
::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

}

你要置顶的窗口肯定不是当前的活动窗口,键盘消息不会到不活动的窗口,非要这样,可以在你的程序中安装全局的键盘钩子,以捕获操作系统的所有键盘消息

你说的置顶是什么意思?是想把焦点转移到你这个程序上来是吗?setwindowpos是设置窗口位置的不是设置焦点的。设置焦点需要从user32里面导出一个函数叫SwitchToThisWindow
用法如下:
typedef void (WINAPI *LPSWITCHTOTHISWINDOW)(HWND, BOOL);
LPSWITCHTOTHISWINDOW lpfnSwitchToThisWindow;
lpfnSwitchToThisWindow= (LPSWITCHTOTHISWINDOW)GetProcAddress( GetModuleHandle(TEXT("user32")), TEXT("SwitchToThisWindow") );
lpfnSwitchToThisWindow(hwnd,FALSE);

窗体不再顶层是接收不到hotkey消息,必须安装全局键盘钩子。


本示例程序用到全局钩子函数,程序分两部分:可执行程序KeyHook和动态连接库LaunchDLL。
1、首先编制MFC扩展动态连接库LaunchDLL.dll:
(1)选择MFC AppWizard(DLL)创建项目LaunchDLL;在接下来的选项中选择Regular statically linked to MFC DLL(标准静态链接MFC DLL)。
(2)在LaunchDLL.h中添加宏定义和待导出函数的声明:
#define DllExport __declspec(dllexport)
……
DllExport void WINAPI InstallLaunchEv();