2013-10-19 93 views
1

我使用VC++ CLR windows窗体创建一个图形用户界面,并希望做一个热键,我已经尽量减少系统盘恢复我的窗户。我发现RegisterHotKey是一种在系统中创建全局热键的方法,但我不明白如何在代码中使用它。C++ CLR窗口形成RegisterHotKey恢复最小化窗口

有什么想法?

+1

这听起来像你正在使用C++/CLI,而不是C++。如果是这样,你应该重申这个问题。 – IInspectable

回答

2

首先,你需要#包括Windows的头,把它放在stdafx.h中预编译的头文件,例如:

// stdafx.h : include file for standard system include files, 
// or project specific include files that are used frequently, but 
// are changed infrequently 
#pragma once 

#include <Windows.h> 
#pragma comment(lib, "user32.lib") 

在#pragma确保链接器将链接导入库user32.dll中,需要链接RegisterHotKey()。

接下来,Form类里面,你需要重写OnHandleCreated()方法。只要窗体的本地窗口被创建,它就会运行,这可能会发生多次。做出这个样子:

protected: 
    virtual void OnHandleCreated(EventArgs^ e) override { 
     __super::OnHandleCreated(e); 
     RegisterHotKey((HWND)this->Handle.ToPointer(), 1, 
      MOD_ALT | MOD_CONTROL, (UINT)Keys::F1); 
    } 

我硬编码的热键为Ctrl + Alt + F1,即更改为您要使用的一个。您可以添加更多热键,更改ID参数(第二个参数,我使用了1)。

然后,你需要检测WM_HOTKEY消息时,用户按下键,Windows将发送给您。通过最小化形式

protected: 
    virtual void WndProc(Message% m) override { 
     if (m.Msg == WM_HOTKEY && m.WParam.ToInt32() == 1) { 
      this->WindowState = FormWindowState::Normal; 
      this->BringToFront(); 
     } 
     __super::WndProc(m); 
    } 

测试此,按下Ctrl + Alt + F1,你会看到窗口得到恢复,并移回前景:需要覆盖表单的WndProc()方法,像这样。

0

感谢您的帮助汉斯,我试图与代码,但它并没有真正的工作像我想它。我的计划将被最小化到系统托盘与下面的代码

private: 
    System::Void MyForm::MyForm_Resize(System::Object^ sender, System::EventArgs^ e) { 
     if (WindowState == FormWindowState::Minimized) 
     { 
      Hide(); 
     } 
    } 

如果我注释掉它隐藏,因为它最小化的一部分,它的工作,虽然罚款。