2013-10-19 1 views
1

VC++ CLR 창 형식을 사용하여 GUI를 만들고 단축키를 사용하여 최소화 한 시스템 트레이에서 내 창을 복원하려고합니다. 나는 RegisterHotKey이 시스템에서 글로벌 단축키를 만드는 방법이라는 것을 알았지 만, 내 코드에서 그것을 사용하는 방법을 이해하지 못한다.C++ CLR 창은 RegisterHotKey를 사용하여 최소화 된 창을 복원합니다.

의견이 있으십니까 ??

+1

C++이 아닌 C++/CLI를 사용하는 것처럼 들립니다. 그렇다면 질문을 다시 읽어야합니다. – IInspectable

답변

2

먼저 당신은 윈도우 헤더를 #include를 예를 들어, 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을 사용했습니다)를 변경하십시오.

그런 다음 사용자가 키를 누를 때 Windows에서 보낼 WM_HOTKEY 메시지를 검색해야합니다. Ctrl + Alt + F1을 눌러 양식을 최소화하여

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); 
    } 

시험이 당신은 창을 복원하고 다시 전경으로 이동하기가 나타납니다 : 즉,이 같은 형태의의 WndProc() 메소드를 오버라이드 (override)가 필요합니다.

0

도움을 주신 것에 감사드립니다. 한스, 코드를 사용해 보았지만 원하는대로 작동하지 않았습니다. 나는 그것을 최소화로 숨 깁니다 부분에서 주석 경우 내 프로그램이

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

아래의 코드로 시스템 트레이에 최소화 할 것, 그것을 잘 생각 밖으로했다.

관련 문제