C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[131] [팁] TaskTray에 Icon 등록하기
박지훈.임프 [cbuilder] 9827 읽음    2001-07-30 16:23
이 팁은 담비님(천리안 FREKBS)님이 1999년 04월 05일에 천리안 프로그래머포럼에 올리신 것입니다.
담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다.
좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다.

───────────────────────────────────────

안녕하세요! 담비입니다.

출처 : http://www.inprise.co.jp/tips/cbuilder/cb008/index.html

Borland C++ Builder 1.0에서, 타스크 트레이 아이콘을 상주시킨 프로그램의 작성법
을 소개한다.

1. TaskTray에 Icon등록하기

  1) C++ Builder를 기동하여 File : New Application을 선택한다.
  2) Main Form(디폴트로 Form1)의 소스의 선두에, 다음의 내용을 추가한다.

     #include <windows.h>

  3) Main Form의 OnCreate Event에 다음의 내용을 기술한다.
     void __fastcall TForm1::FormCreate(TObject *Sender)
     {
        NOTIFYICONDATA  icn;

        icn.cbSize = sizeof(NOTIFYICONDATA);
        icn.hWnd = Handle;
        icn.uID = 100;
        icn.uFlags = NIF_MESSAGE : NIF_ICON : NIF_TIP;
        icn.uCallbackMessage = WM_USER + 1;
        icn.hIcon = Application->Icon->Handle;
        lstrcpy(icn.szTip,"Task Tray Test");
        Shell_NotifyIcon( NIM_ADD, &icn );
     }

  4) Main Form의 OnClose Event에 다음의 내용을 기술한다.
     void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
     {
       NOTIFYICONDATA  icn;

       icn.cbSize = sizeof(NOTIFYICONDATA);
       icn.hWnd = Handle;
       icn.uID = 100;
       icn.uFlags = 0;
       Shell_NotifyIcon( NIM_DELETE, &icn );
     }

  이 시점에서 Compile해서 실행해보면, Main From 기동시에 TaskTray에 Icon이
  나타나게 되며, Close했을 때에 Icon이 사라진다. 다만 이 시점에서는 TaskTray를
  Click해도 아무런일도 일어나지 않으며 Task Bar에도 Icon이 표시된상태로만
  남아있는다.

2. TaskTray의 Event 처리하기
  1) Main Form에 PopupMenu Component를 위치시킨다.
  2) PopupMenu에 MenuItem을 하나 추가해, Item Preperty를 아래와 같이 설정한다.
     Caption Property = "Exit"
     Name Property = "Exit"
  3) 위의 MenuItem의 OnClick Event에 아래의 내용을 기술한다.
     void __fastcall TForm1::ExitClick(TObject *Sender)
     {
     Close();
     }

  4) Main Form의 헤더파일(디폴트는 Unit1.hpp)에 있는 private 선언부에, 아래의
     내용을 기술한다.
      private:

      void __fastcall TrayEvent(TMessage& Msg);
           BEGIN_MESSAGE_MAP
                 MESSAGE_HANDLER(WM_USER+1, TMessage, TrayEvent)
           END_MESSAGE_MAP(TForm)

  5) Main Form의 맨 마지막에 아래의 내용을 추가한다.
     void __fastcall TForm1::TrayEvent(TMessage& Msg)
     {
     if (Msg.LParam==WM_RBUTTONDOWN )
        {
          POINT P;
          GetCursorPos(&P );
          SetForegroundWindow (Handle);
          PopupMenu1->Popup(P.xP.y);
        }
     }

위의 변경에 의해서, TaskTray의 Icon상에 마우스 커서를위치시키고 마우스 오른쪽
버튼을 클릭하면 "Exit"가 표시된 메뉴가 표시된다.
이 "Exit"를 클릭하면 Close 메소드가 실행되고, 프로그램을 종료하게 된다.
이 예는, 팝업 메뉴의 아이템에 상기의  "Exit"(프로그램의 종료)의 기능만을 붙였
지만, 실제의 프로그램에서는 필요한 만큼,여기에 메뉴 아이템을 추가하면 된다.
또, 이 시점에서는, 여전히 타스크바 및 폼이 화면에 표시된채로 되어있다.
다음에는, 이것을 화면상에서 소거하도록 한다.

3. Main Form 및 TaskBar Icon의 비표시
  1) 프로젝트 소스에,  아래의 Main From 및 TaskBar Icon을 비표시하는 처리를
     2줄 추가한다.
   //---------------------------------------------------------------------------
     #include 
     #pragma hdrstop
   //---------------------------------------------------------------------------
      USEFORM("Unit1.cpp", Form1);
      USERES("Project1.res");
   //---------------------------------------------------------------------------
      WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
      {
       try
       {
        Application->Initialize();
        Application->CreateForm(__classid(TForm1), &Form1);

        //다음 2줄을 추가
        ShowWindow(Application->Handle, SW_HIDE);
        Application->ShowMainForm=false;

        Application->Run();
       }
      }

      -------- 이하 생략 ---------

이것으로 완성되었다. 이 시점에서, 컴파일해 실행해보면 TaskTray의 Icon 이외는
(Form과 TaskBar의 Icon), 화면에 표시 되지 않는다.

+ -

관련 글 리스트
131 [팁] TaskTray에 Icon 등록하기 박지훈.임프 9827 2001/07/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.