티스토리 뷰

Visual Studio 2012


대화상자와 트레이아이콘을 활용해보자.

대화상자를 닫았을 때, 종료가 아닌 트레이아이콘으로 숨겨질 수 있게 하는 것이 목표


Code Project의 Danial Zilcsak의 도움을 받았다.

참조

https://www.codeproject.com/Articles/810/System-Tray-Icons-Minimize-Your-Application-to-the


CDialog를 상속받은 CTrayDialog 클래스를 만들어서 구성하고,

새 프로젝트의 기본클래스를 CTrayDialog로 변환하여 사용 할 것이다.


아래 소스를 다운 받는다. (참조의 홈페이지에서도 받을 수 있다)

TrayDialog.zip


압축을 풀고 새로 만든 프로젝트 안에 복사 후, 소스와 헤더를 추가 한다.

(예제는 TrayTest란 프로젝트 이름으로 진행한다.)


1. 기본 클래스 변환하기


보통 MFC 대화상자 기반 프로젝트를 만들면 기본 클래스는 CDialog나 CDialogEX가 될 것이다.

이를 CTrayDialog로 변환하는 작업을 진행한다.


1) TrayTestDlg.h 에 CTrayDialog 헤더 포함하기

// TrayTestDlg.h : 헤더 파일
//

#pragma once
#include "TrayDialog.h"

헤더 한개만 추가해도 된다.


2) TrayTestDlg.cpp와 TrayTestDlg.h에 있는 기본클래스 변경


기본 클래스는 보통 아래와 같이 표시되어 있다.

class CTrayTestDlg : public CDialogEx


TrayTestDlg.cpp와 TrayTestDlg.h에 있는 저 CDialogEx를 CTrayDialog로 변경한다. (단축키 Ctrl+H)


2. 초기화 루틴


OnInitDialog()에 다음과 같은 소스를 추가한다.


TrayTestDlg.cpp

BOOL CTrayTestDlg::OnInitDialog()
{
	CTrayDialog::OnInitDialog();
	// ...
	TraySetIcon(IDR_MAINFRAME);
	TraySetToolTip("ToolTip for Tray Icon");
	TraySetMenu(IDR_MENU1);

	return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}


TraySetIcon(): IDR_MAINFRAME을 트레이의 아이콘으로 지정한다.

TraySetToolTip(): 트레이 아이콘의 툴팁을 지정한다.

TraySetMenu(): 트레이 아이콘 우클릭 시 팝업 메뉴를 지정한다.

여기선 메뉴 리소스를 하나 추가(IDR_MENU1)하여 지정하였다.



이렇게 하고 실행하면 문제 없이 실행이 잘 될것이다.

대화상자에서 최소화나 종료버튼을 누르면 대화상자가 사라지고 트레이 아이콘이 보이며

트레이아이콘을 더블클릭하면 다시 대화상자가 표시된다.


TrayDialog 클래스에 대한 내용은 나중에 따로 올리겠음..




댓글