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

C++빌더 Q&A
C++Builder Programming Q&A
[6551] Re:[질문] 프로그램시작시 트레이에만 표시되게할려면...?
홍성진 [] 3069 읽음    2001-04-03 19:40
병아리 님이 쓰신 글 :
: 안냐세요...
: 프로그램을 시작하면 트레이에만표시되게할수없나여?
: 작업표시창에두안나오구여....
: 그럼좋은날 ^^

안녕하세요.
cpp화일 제일위의 생성자 위에 다음을 추가하세요.
메세지 처리시에 필요합니다.

const MY_SHOWFORM_ID = WM_USER+1;

Form의 create에 다음의 코드를 추가하세요.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ShowWindow(Application->Handle, SW_HIDE);
    Application->ShowMainForm = False;
    NOTIFYICONDATA icondata;
    memset(&icondata, 0x00, sizeof(icondata));
    icondata.cbSize = sizeof(icondata);
    icondata.hWnd = Handle;
    strncpy(icondata.szTip, "트레이 테스트", sizeof(icondata.szTip));
    icondata.hIcon = Application->Icon->Handle;
    icondata.uCallbackMessage = MY_SHOWFORM_ID;
    icondata.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
    Shell_NotifyIcon(NIM_ADD,&icondata);
    Application->OnMinimize = MinimizeHandler //폼이 최소화 될때의 일을 처리합니다. 아래를 참조.
}

폼 종료시 아이콘을 삭제합니다.
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    NOTIFYICONDATA icondata;

    memset(&icondata, 0x00, sizeof(icondata));
    icondata.cbSize = sizeof(icondata);
    icondata.hWnd = Handle;
    Shell_NotifyIcon(NIM_DELETE,&icondata);
}

헤더의 private에 다음의 함수를 선언합니다.
그리고, 아래와 같이 body를 입력하세요.
WndProc에서 폼이 트레이아이콘화 되었을때, 받아들일 메세지를 처리합니다.

void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
    if(Message.Msg  == MY_SHOWFORM_ID) //위에서 설정한 상수
    {
         if(Message.LParam == WM_LBUTTONDBLCLK)
         {
            //트레이아이콘을 더블클릭하면 폼을 화면에 Show합니다.
                ShowWindow(Application->Handle,SW_SHOWNORMAL);
            SetForegroundWindow(Form1->Handle);
            Form1->Show();
            ShowWindow(Application->Handle, SW_HIDE);
         }
         else if(Message.LParam == WM_RBUTTONDOWN)
         {
            //트레이아이콘을 오른버튼으로 클릭시 처리하고 싶은 루틴을 입력하세요   
            //이런식으로 계속 메세지를 추가하면 됩니다.
            }
         else
         {
               TForm::WndProc(Message);
         }
    }
    else
    {
          TForm::WndProc(Message);
    }
}

void __fastcall TForm1::MinimizeHandler(TObject *Sender)
{
    //최소화 될때 화면과 태스크바에서 사라지게 합니다.
    //함수원형은 헤더에 추가하세요.

    ShowWindow(Application->Handle, SW_HIDE); 
}

위의 코드중 불필요한 코드도 있겠지만, 님의 프로그램에 맞게 수정해서 쓰세요...
크게 수정할 일은 없을겁니다.

그럼..

+ -

관련 글 리스트
6548 [질문] 프로그램시작시 트레이에만 표시되게할려면...? 병아리 2133 2001/04/03
6551     Re:[질문] 프로그램시작시 트레이에만 표시되게할려면...? 홍성진 3069 2001/04/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.