수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693775
  • Today | 126
  • Yesterday | 588

1 Articles, Search for '트레이'

  1. 2006/12/29 시스템 트레이 사용하기
Programming/Win32 API2006/12/29 10:03

시스템 트레이 사용하기

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

1. 트레이 통지와 관련된 함수와 파라미터

BOOL WINAPI Shell_NontifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid);
    dwMessage로는 다음과 같은 값을 입력할 수 있습니다.
  • NIM_ADD : 트레이에 새로운 아이콘 추가
  • NIM_DELETE : 트레이 영역의 아이콘 제거
  • NIM_MODIFY : 트레이 영역에 있는 아이콘 수정
typedef struct _NOTIFYICONDATA
{
    DWORD    cbSize;
    HWND    hWnd;
    UINT    uID;
    UINT    uFlags;
    UINT    uCallbackMessage;
    HICON    hIcon;
    char    szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
  • cbSize: 구조체의 크기
  • hWnd: 윈도우 핸들
  • uID: 아이콘 식별자, 호출한 애플리케이션의 아이콘을 다른것과 구ㅕㄹ해서 식별할수 있게 해주는 사용자 정의값
  • uFlags: NIF_MESSAGE : uCallbackMessage 사용 NIF_ICON : hIcon 사용 NIF_TIP : szTip 사용
  • uCallbackMessage: 아이콘이 hWnd윈도우와 통신하기 위해서 사용할 메시지 ID. 메시지는 WM_APP의 오프셋으로 선언되는 사용자 정의 메시지이다.
  • hIcon: 화면에 그릴 아이콘의 핸들.
  • szTip: 아이콘의 툴팁을 위한 텍스트.

2. 트레이에 아이콘 추가

NOTIFYICONDATA    nid;

// 구조체 초기화
ZeroMemory(&nid, sizeof nid);

// 구조체 설정
nid.cbSize = sizeof nid;
nid.hWnd = hWnd;
nid.uID = ICON_ID;
nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE;
nid.uCallbackMessage = WM_MESSAGE;
nid.hIcon = hSmallIcon;
lstrcpy(nid.szTip, "Sample");

// 트레이 영역에 추가
Shell_NotifyIcon(NIM_ADD, &nid);

3. 트레이 아이콘 제거

제거시에는 hWnd와 uID멤버만 셋팅하면 됩니다.

NOTIFYICONDATA    nid;

ZeroMemory(&nid, sizeof nid);

nid.cbSize = sizeof nid;
nid.hWnd = hWnd;
nid.uID = ICON_ID;

Shell_NotifyIcon(NIM_DELETE, &nid);

4. 트레이로 부터의 메시지 수신

마우스와 관련된 메시지만 통지합니다.

  • wParam : 등록시에 설정한 ID(nid.uID).
  • lParam : 메시지 종류 (WM_LBUTTONUP, ...).
case WM_MESSAGE:
    if(wParam == ICON_ID)
    {
        switch(lParam)
        {
            case WM_RBUTTONUP:
                // 처리
                break;
        }
    }

    break;

5. Context메뉴

일반적으로 트레이에서 오른쪽 버튼을 누르면 context 메뉴를 화면에 표시합니다. 아래는 그러한 일을 하는 코드의 일부입니다.

POINT pt;
GetCursorPos(&pt);

SetForegroundWindow(hWnd);
TrackPopupMenu(menu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL);
PostMessage(hWnd, WM_NULL, 0, 0);

주의할 점은 TrackPopupMenu 앞에 SetForegroundWindow API 를 호출해 주고, 후에 WM_NULL 메시지를 포스트 해주어야 합니다. 그렇지 않을 경우 메뉴가 화면에서 사라지지 않는 버그 현상이 생기게 됩니다.

6. For MFC.

아래는 MFC에서 일반적으로 하게 되는 트레이 작업 영역에 추가 및 삭제를 위한 코드의 일부입니다.

6.1 추가

#define WM_TRAYNOTIFY WM_APP + 1

NOTIFYICONDATA    nid;

::ZeroMemory(&nid, sizeof nid);

nid.cbSize        = sizeof nid;
nid.hIcon        = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
nid.hWnd        = this->m_hWnd;
nid.uID            = IDR_MAINFRAME;
nid.uFlags        = NIF_TIP | NIF_ICON | NIF_MESSAGE;
nid.uCallbackMessage    = WM_TRAYNOTIFY;

lstrcpy(nid.szTip, "Test");

::Shell_NotifyIcon(NIM_ADD, &nid);

6.2 제거

NOTIFYICONDATA    nid;

::ZeroMemory(&nid, sizeof nid);

nid.cbSize    = sizeof nid;
nid.uID        = IDR_MAINFRAME;
nid.hWnd    = this->m_hWnd;

::Shell_NotifyIcon(NIM_DELETE, &nid);

6.3 메시지 처리

ON_MESSAGE(WM_TRAYNOTIFY, OnTrayNotify)

LONG TestDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
    CMenu    menu, *pTrayMenu;
    CPoint    pt;

    if(wParam == IDR_MAINFRAME)
    {
        switch(lParam)
        {
        case WM_RBUTTONUP:
            menu.LoadMenu(IDR_TRAYMENU);
            pTrayMenu = menu.GetSubMenu(0);

            ::GetCursorPos(&pt);

            SetForegroundWindow();
            pTrayMenu->TrackPopupMenu(TPM_LEFTALIGN, pt.x, pt.y, this, NULL);
            SetForegroundWindow();

            pTrayMenu->DestroyMenu();
            menu.DestroyMenu();
            break;

        case WM_LBUTTONDBLCLK:
            if(!IsWindowVisible())
                ShowWindow(SW_SHOW);

            SetForegroundWindow();
            break;
        }
    }

    return 0;
}
"Win32 API" 카테고리의 다른 글
  • command 출력 리디렉션 시키기. (0)2006/12/29
  • 실행시 메모리 점유율 줄이기. (0)2006/12/29
  • 시스템 트레이 사용하기 (0)2006/12/29
  • 메모리 오류 (0)2006/12/27
  • 파일 버전 구해서 비교하기... (0)2006/12/08
2006/12/29 10:03 2006/12/29 10:03
Posted by webdizen
Tags 시스템, 트레이
No Trackback No Comment

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

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

  • MP3 플레이어
  • 1970년대
  • 음악 치료
  • Interfaces
  • breakpoint
  • 어학교육원
  • 미래관
  • 네트워크 포트
  • GetProcAddress
  • memory 크기
  • JPEG
  • Portable Executable File Format
  • 데이타 바인딩
  • SCCM
  • 후처리
  • Employment
  • 자연과학대학
  • VisualStudio
  • HIDS
  • 명함

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.