|
병아리 님이 쓰신 글 :
: 안냐세요...
: 프로그램을 시작하면 트레이에만표시되게할수없나여?
: 작업표시창에두안나오구여....
: 그럼좋은날 ^^
안녕하세요.
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);
}
위의 코드중 불필요한 코드도 있겠지만, 님의 프로그램에 맞게 수정해서 쓰세요...
크게 수정할 일은 없을겁니다.
그럼..
|