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
[585] BDS2006의 TTrayIcon의 BalloonHint 클릭 이벤트 받기
구대원 [deckerd] 8182 읽음    2006-03-30 14:09
TTrayIcon의 ShowBalloonHint()를 이용하면 트레이에 풍선힌트는 나오지만 그 풍선을 클릭했을때 이벤트를 받는 방법이 없습니다.
그래서 윈도우 훅을 통해 메세지를 받아보니 잘 됩니다. 소스를 올립니다.


H 파일에 메세지 핸들러 하나 만드시구요

    void OnBalloonClick(TMessage& msg);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_USER+1, TMessage,OnBalloonClick)
    END_MESSAGE_MAP(TForm);
   


Cpp  파일에는 다음과 같이 하세요.
(Form1은 상황에 따라서 적당히 이름 지어 주시구요)

HHOOK  hHook;

LRESULT CALLBACK CallWndProc1(int nCode,    WPARAM wParam,    LPARAM lParam)
{
    CWPSTRUCT* msg = (CWPSTRUCT*)lParam;
    if(nCode >=0 && msg->message == WM_USER+1 && msg->lParam==1029)
        Form1->Perform(WM_USER+1,msg->lParam,msg->wParam);
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}


__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)
{
    hHook = SetWindowsHookEx(  WH_CALLWNDPROC,  ( HOOKPROC)CallWndProc1,   0, GetCurrentThreadId());
}



설명을 드리자면 이렇습니다.
폼 생성자에서 윈도우 훅을 설치합니다.(SetWindowsHookEx)
프로그램에서 필요할때 ShowBalloonHint()를 호출하여 풍선이 뜰것이고 사용자가 풍선을 클릭하면
Spy++로 확인해본바 TPUtilWindow라는 숨겨져있는 윈도우에 WM_USER+1 메세지가 갑니다.
그 메세지를 CallWndProc1에서 확인하여 맞으면 Form1에 WM_USER+1을 보내줍니다.
(제가 확인해보니 lParam이 1029가 클릭입니다.)

이상입니다. 너무 간단해서 별달리 말씀드릴게 없네요..
그런데 왜 볼랜드에서 TTrayIcon 콤포넌트에 풍선 클릭 이벤트를 만들어 놓지 않았는지 정말 의문입니다.

+ -

관련 글 리스트
585 BDS2006의 TTrayIcon의 BalloonHint 클릭 이벤트 받기 구대원 8182 2006/03/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.