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
[53809] Re:Re:작업표시줄의 크기,위치가 변경되었을때 이벤트를 받고 싶습니다.
역삼골 [saonara] 1838 읽음    2008-06-30 15:07
장성호님 너무 감사합니다.
매번 도움만 받네요. ^^
2번째 방법으로 코딩하니 잘 동작합니다.
다시한번 감사 드립니다.
즐거운 하루 되세요.


장성호 님이 쓰신 글 :
: 정확하게 작업표시줄의 크기나 위치 변경  메세지는 잘 모르겠습니다만
:
: Hook을 이용한 방법을 제외하고
: 작업표시줄의 크기나 위치 변경을 확인하는 방법을 한 2가지가 소개해 봅니다.
:
:
: 방법1.    WM_GETMINMAXINFO 메세지를 이용
:
:    WM_GETMINMAXINFO 메세지는 Window 크기나 위치가 조정될때 언제나 발생합니다.
:    즉 TasbBar(작업표시줄)이 움직이지 않아도 Form의 크기만 조절해도 발생하죠
:
:    그런데
:    작업 표시줄이 움직이면 데스크탑의 모든 윈도우의 크기나 위치를 조절하는데
:    이때 항상 WM_GETMINMAXINFO 메세지가 발생합니다.
:
:    WM_GETMINMAXINFO 메세지가 발생했을때
:    데스트탑의 WorkArea를 확인해 보면 될것 같습니다.
:
:
: void __fastcall TForm1::WndProc(TMessage &Msg)
: {
:   if(Msg.Msg==WM_GETMINMAXINFO)
:   {
:     Memo1->Lines->Clear();
:    
:    //WorkArea확인 방법 1
:     s.printf("WorkAreaRect Left=%d , Toop=%d , Width=%d, Height=%d",Screen->WorkAreaLeft,Screen->WorkAreaTop,Screen->WorkAreaWidth,Screen->WorkAreaHeight);
:     Memo1->Lines->Add(s);
: 
:    //WorkArea확인 방법 2
:     TRect rc;
:     SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0);
:     s.printf("SPI_GETWORKAREA Left=%d , Toop=%d , Width=%d, Height=%d",rc.left,rc.top,rc.right,rc.bottom);
:     Memo1->Lines->Add(s);
: 
: 
:   }
:   TForm::WndProc(Msg);
: }
: 
: 

:
: 방법2.  SHAppBarMessage 이용
:     작업표시줄 Tray에 Icon을 등록하고 마우스 이벤트를 받을때  Shell_NotifyIcon 함수를 이용하는데
:     이때 NOTIFYICONDATA 구조체의  uCallbackMessage를 설정해서 메세지를 받습니다.
:     http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=89
:
:     같은 방식으로 TaskBar에서 일어나는 이벤트를
:     APPBARDATA 구조체의 uCallbackMessage를 통해서 받을수 있습니다.
:    http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=35447
:    http://69.10.233.10/KB/shell/csdoesshell3.aspx?display=PrintAll
:
:
:
:  unsigned int iAppMsg_id;
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
:   APPBARDATA Abd;
:   Abd.cbSize=sizeof(APPBARDATA);
:   Abd.hWnd=Handle;
:   iAppMsg_id=WM_APP+1;
:   Abd.uCallbackMessage = WM_APP+1;
:   SHAppBarMessage(ABM_NEW,&Abd);
: 
: }
: void __fastcall TForm1::WndProc(TMessage &Msg)
: {
:   if(Msg.Msg==iAppMsg_id)
:   {
:     if(Msg.WParam==1)
:     {
:         Memo2->Lines->Add("Resize TaskBar");
:         TRect rc;
:         String s;
:         SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0);
:         s.printf("SPI_GETWORKAREA Left=%d , Toop=%d , Width=%d, Height=%d",rc.left,rc.top,rc.right,rc.bottom);
:         Memo1->Lines->Add(s);
:     }
:    }
:    TForm::WndProc(Msg);
:   }
: 

:
:      
: 음...
: Screen->WorkArea는
: SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0); 를 통해서 확인합니다.
: 결국 방법1,2 는 같은거죠
:
: 글머..
:
:
: 역삼골 님이 쓰신 글 :
: : 작업표시줄에 따라 폼의 위치를 변경할려고 하는데요.
: : 작업표시줄의 위치나 크기가 바뀌었을때 발생하는 이벤트를 못찾겠네요.
: : 도움 부탁드립니다.
: : 즐거운 하루 되세요.

+ -

관련 글 리스트
53807 작업표시줄의 크기,위치가 변경되었을때 이벤트를 받고 싶습니다. 역삼골 1576 2008/06/30
53808     Re:작업표시줄의 크기,위치가 변경되었을때 이벤트를 받고 싶습니다. 장성호 2201 2008/06/30
53809         Re:Re:작업표시줄의 크기,위치가 변경되었을때 이벤트를 받고 싶습니다. 역삼골 1838 2008/06/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.