수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1692080
  • Today | 224
  • Yesterday | 564

1 Articles, Search for 'Animation'

  1. 2007/01/02 트레이로 내려가는 애니메이션 출력
Programming/Win32 API2007/01/02 16:08

트레이로 내려가는 애니메이션 출력

고수닷넷 - 데미소다오렌지님

1. Introduction

MSN 메신저가 설치되어 있다면 메신저를 한번 열어봅시다. 아마 등록된 친구들의 목록이 나오는 윈도우가 화면에 나타날 것입니다. 이번에는 그 윈도우의 우측 상단에 있는 닫기 버튼을 눌러서 메신저 윈도우를 닫아 봅시다. 그럼 아마도 윈도우가 사라지면서 우측 하단의 트레이로 캡션바가 사라지는 애니메이션이 표시될 겁니다. 무슨 말인지 잘 모르시겠다구욤... ㅠㅜ... 그럼 다시 메신저 화면을 띄우고 최소화 시켜보세요. 그럼 작업 영역으로 내려가는 애니메이션이 표시되죠. 다시 활성화 시켜서 닫아 보세요. 그럼 금방 무엇이 틀린지 알 수 있을 겁니다.

트레이로 내려가는 애니메이션. 아주 사소한 것 입니다. 하지만 사용자 입장에서는 이 사소한 하나가 프로그램의 완성도를 살피는 중요한 척도가 됩니다. 자, 그럼 이제 트레이로 내려가는 애니메이션을 출력하는 방법에 대해서 알아보도록 합시다.

2. DrawAnimatedRects

구현의 핵심은 DrawAnimatedRects API 입니다. 벌써 이름에서 냄새를 풍기고 있죠? 애니메이션 사각형을 그리는 함수겠거니 짐작하셨다면 정답입니다. 함수 원형과 함께 사용법을 알아보도록 합시다.

BOOL DrawAnimatedRects(
  HWND hwnd,            // handle to clipping window
  int idAni,            // type of animation
  CONST RECT *lprcFrom, // rectangle coordinates (minimized)
  CONST RECT *lprcTo    // rectangle coordinates (restored)
);

MSDN에서 발췌한 함수의 원형입니다. 파라미터는 다음과 같은 의미를 가집니다.

  • hwnd - 윈도우 핸들입니다. 애니메이션을 출력할 윈도우의 핸들을 넣어주시면 됩니다.
  • idAni - 애니메이션 종류 번호 입니다. 지금까지 출시된 윈도우에서 지원하는 타입은 IDANI_CAPTION 밖에 없습니다. 따라서 무조건 저 값을 넣으면 됩니다.
  • lprcFrom, lprcTo - 사각형 구조체 포인터를 넘기면 됩니다. lprcFrom에서 lprcTo로 움직이는 애니메이션이 출력됩니다.

리턴값은 당연히 성공하면 0이 아닌 값을, 실패시에 0을 리턴합니다. 이제 이 함수에 대해서 대충 감이 잡히셨다면 샘플 코드를 한번 보도록 합시다. 여기서 꼭 한번 직접 타이핑해서 결과를 확인해 보시길 권해드립니다. 백문이불여일견이라는 옛말이 있듯이, 백번 보는 것보다 직접 타이핑해서 결과를 확인하는 것이 더욱 기억에 오래 남습니다. 그럼 코드 나갑니다!!!

CRect rc;
CRect rc2;

GetWindowRect(rc);
rc2 = rc;
rc2.OffsetRect(100, 100);
DrawAnimatedRects(m_hWnd, IDANI_CAPTION, rc, rc2);

쉽습니다. 윈도우 영역을 구해서 100, 100만큼 오른쪽 아래 있는 사각형으로 이동하는 애니메이션을 출력하는 겁니다. 실행해 보신 분들은 아! 하실겁니다.

3. 트레이는 어디에?

2장까지 읽고는 이제 게임끝... 하고 덮으시려는 분들이 계실 것 같습니다. 하지만 한가지 문제가 더 남아 있습니다. 어디서 어디로 가는 애니메이션을 출력하는가? 라는 문제죠. 출발 지점은 당연히 윈도우의 영역이 될 것이고, 종료 지점은 트레이 영역이 될 겁니다. 이제 트레이 영역을 구하는 방법만 알면 진짜 게임이 끝나는 겁니다.

트레이 영역을 찾기 위해서 윈도우 구조를 조금 조사할 필요가 있습니다. 이럴때 강력한 힘을 발휘할 수 있는 SPY++을 실행하십시요. 그리고 직접한번 트레이를 찾아 보세요. 아직 SPY++의 사용법을 모르신다구요? 지금 당장 배울 필요가 있습니다. 윈도우 개발을 함에 있어 VC++에 포함된 Depends와 SPY++은 아주 유용한 도구입니다. 시간이 날때 꼭 사용법을 익혀 두세요.

제가 발견한 트레이 윈도우 구조는 왼쪽과 같습니다. 전체를 둘러싸고 있는 큰 파란 사각형의 윈도우 클래스명은 "Shell_TrayWnd"입니다. 그 안을 둘러싸고 있는 빨간 사각형 윈도우의 클래스명은 "TrayNotifyWnd"입니다. 끝으로 그 안에 들어있는 보라색 윈도우의 클래스명은 "ToolbarWindow32"입니다. 모두 윈도우명은 없습니다. 그러나 끝에 찾은 보라색 윈도우의 경우 9x 계열에서는 존재하지 않습니다. 2000이상의 버전부터 툴바 윈도우가 생겼습니다. XP부터는 Pager란 놈까지 생겼죠. 하여튼 여기서 중요한 점은 Shell_TrayWnd와 TrayNotifyWnd는 운영체제에 상관없이 공통된 속성이라는 점 입니다.

그럼 이제 윈도우만 찾으면 되겠네요. ㅎㅎㅎ~ 윈도우를 찾는 건 너무나 쉽습니다. 훌륭한 FindWindow API를 사용하면 되죠. TrayNotifyWnd를 찾는 FindWindow 코드는 아래와 같습니다.

HWND hTrayP = FindWindow("Shell_TrayWnd", NULL);
HWND hTrayC = FindWindowEx(hTrayP, NULL, "TrayNotifyWnd", NULL);

간단하게 설명하면 첫째줄에서 Shell_TrayWnd를 찾고, 그 다음줄에서 ShellTrayWnd의 자식중에 TrayNotifyWnd를 찾는 코드입니다.

4. 모두 합쳐봐~

이제 드디어 2,3장에 걸쳐서 배웠던 지식을 활용해서 트레이로 가는 애니메이션을 출력하는 함수를 작성할 수 있게 되었습니다. 제가 작성해본 함수는 아래와 같습니다.

VOID SendTrayAnimation(HWND hwnd, BOOL bTo) 
{ 
       RECT       rcFrom, rcTo; 
        
       HWND hTrayP = FindWindow("Shell_TrayWnd", NULL); 
       HWND hTrayC = FindWindowEx(hTrayP, NULL, "TrayNotifyWnd", NULL); 
        
       if(hTrayC) 
       { 
              GetWindowRect(hTrayC, &rcTo); 
       } 
       else 
       { 
              SystemParametersInfo(SPI_GETWORKAREA, 0, &rcTo, 0); 
               
              rcTo.left = rcTo.right - 118; 
              rcTo.top = rcTo.bottom - 30; 
       } 
        
       GetWindowRect(hwnd, &rcFrom); 

       if(bTo == TRUE) 
              DrawAnimatedRects(hwnd, IDANI_CAPTION, &rcFrom, &rcTo); 
       else 
              DrawAnimatedRects(hwnd, IDANI_CAPTION, &rcTo, &rcFrom); 
} 

첫번째 인자는 윈도우 핸들을, 두번째 인자는 TRUE를 넣을 경우 트레이로 내려가는 애니메이션을, FALSE를 넣을 경우 트레이에서 본래 윈도우로 돌아오는 애니메이션을 출력합니다.

"Win32 API" 카테고리의 다른 글
  • 윈도우 종료 시키기 (0)2007/01/02
  • 작업관리자에 표시되는 응용프로그램 열거하기 (0)2007/01/02
  • 트레이로 내려가는 애니메이션 출력 (0)2007/01/02
  • XP 프로그램 호환성 정보 얻기 (0)2007/01/02
  • PE 포맷 분석3 (0)2007/01/02
2007/01/02 16:08 2007/01/02 16:08
Posted by webdizen
Tags Animation, Tray
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2541

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 누리캅
  • 튜닝
  • PostMessage()
  • sprintf
  • 춘천캠퍼스
  • WebOS
  • Prado Framework
  • 파일 특성 조작
  • 긍정
  • 가치관
  • Structure
  • XML Protocols
  • 동적 SQL
  • Common Dialog
  • Windows Server 2008
  • OLAP 큐브
  • C#
  • TS
  • IOCP
  • 뷰

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.