다음을 통해 공유


알림 및 알림 영역

알림 영역은 알림 및 상태에 대한 임시 소스를 제공하는 작업 표시줄의 부분입니다. 또한 배터리 수준, 볼륨 제어 및 네트워크 상태와 같이 데스크톱에 없는 시스템 및 프로그램 기능에 대한 아이콘을 표시하는 데 사용할 수도 있습니다. 알림 영역은 지금까지 시스템 트레이 또는 상태 영역으로 알려져 있습니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

알림 및 알림 영역 지침

알림 및 알림 영역 사용에 대한 모범 사례는 Windows 사용자 환경 상호 작용 지침의 알림 및 알림 영역 섹션을 참조하세요. 목표는 성가신 또는 산만하지 않고 알림의 적절한 사용을 통해 사용자 혜택을 제공하는 것입니다.

알림 영역은 즉시 작동해야 하는 중요한 정보를 위한 것이 아닙니다. 또한 빠른 프로그램 또는 명령 액세스를 위한 것이 아닙니다. Windows 7부터 해당 기능의 대부분은 애플리케이션의 작업 표시줄 단추를 통해 수행하는 것이 가장 좋습니다.

Windows 7을 사용하면 사용자가 선택한 경우 애플리케이션의 모든 알림을 표시하지 않도록 할 수 있으므로 신중한 알림 디자인 및 사용을 통해 사용자가 애플리케이션이 계속 표시되도록 할 수 있습니다. 알림은 중단입니다. 가치가 있는지 확인합니다.

Windows 7에는 "조용한 시간"이라는 개념이 도입되었습니다. 조용한 시간은 새 사용자가 처음으로 또는 운영 체제 업그레이드 또는 새로 설치 후 처음으로 자신의 계정에 로그인한 후 첫 번째 시간으로 정의됩니다. 이 시간은 사용자가 알림의 방해 없이 새 환경을 탐색하고 숙지할 수 있도록 따로 설정됩니다. 이 시간 동안 대부분의 알림을 보내거나 표시해서는 안 됩니다. 예외에는 USB 디바이스에 연결하거나 문서를 인쇄하는 경우와 같이 사용자가 사용자 작업에 대한 응답으로 볼 것으로 예상되는 피드백이 포함됩니다. 조용한 시간에 대한 API 세부 정보는 이 항목의 뒷부분에서 설명합니다.

알림 만들기 및 표시

이 항목의 나머지 섹션에서는 애플리케이션에서 사용자에게 알림을 표시하기 위해 따라야 하는 기본 절차를 간략하게 설명합니다.

  1. 알림 추가 아이콘
  2. NOTIFYICONDATA 버전 정의
  3. 알림 모양 및 내용 정의
  4. 사용자 상태 확인
  5. 알림 표시
  6. 아이콘 제거

알림 추가 아이콘

알림을 표시하려면 알림 영역에 아이콘이 있어야 합니다. Microsoft Communicator 또는 배터리 수준과 같은 특정 경우에는 해당 아이콘이 이미 있습니다. 그러나 다른 많은 경우 알림을 표시하는 데 필요한 경우에만 알림 영역에 아이콘을 추가합니다. 두 경우 모두 Shell_NotifyIcon 함수를 사용하여 수행됩니다. Shell_NotifyIcon 알림 영역에서 아이콘을 추가, 수정 또는 삭제할 수 있습니다.

세 개의 아이콘이 포함된 알림 영역

아이콘이 Windows 7의 알림 영역에 추가되면 기본적으로 알림 영역의 오버플로 섹션에 추가됩니다. 이 영역에는 활성 상태이지만 알림 영역에는 표시되지 않는 알림 영역 아이콘이 포함되어 있습니다. 시스템에서 일시적으로 아이콘을 짧은 미리 보기(1분 미만)로 알림 영역으로 승격할 수 있지만 사용자만 오버플로에서 알림 영역으로 아이콘을 승격할 수 있습니다.

참고 항목

사용자에게 알림 영역에 표시할 아이콘에 대한 최종 설명이 있어야 합니다. 알림 영역에 일시적이지 않은 아이콘을 설치하기 전에 사용자에게 사용 권한을 요청해야 합니다. 또한 알림 영역에서 아이콘을 제거하는 옵션(일반적으로 바로 가기 메뉴임)도 제공해야 합니다.

 

Shell_NotifyIcon 호출에서 보낸 NOTIFYICONDATA 구조에는 알림 영역 아이콘과 알림 자체를 모두 지정하는 정보가 포함됩니다. 다음은 NOTIFYICONDATA를 통해 설정할 수 있는 알림 영역 아이콘 자체와 관련된 항목입니다.

  • 아이콘을 사용할 리소스입니다.
  • 아이콘의 고유 식별자입니다.
  • 아이콘 도구 설명의 스타일입니다.
  • 알림 영역에 있는 아이콘의 상태(숨김, 공유 또는 둘 다)입니다.
  • 아이콘과 연결된 애플리케이션 창의 핸들입니다.
  • 아이콘이 연결된 애플리케이션 창과 아이콘의 경계 사각형 및 풍선 알림 내에서 발생하는 이벤트를 전달할 수 있도록 하는 콜백 메시지 식별자입니다. 아이콘의 경계 사각형은 Shell_NotifyIconGetRect 통해 검색할 수 있습니다.

알림 영역의 각 아이콘은 다음 두 가지 방법으로 식별할 수 있습니다.

  • 레지스트리에서 아이콘이 선언되는 GUID입니다. 이는 Windows 7 이상에서 기본 설정 방법입니다.
  • 알림 영역 아이콘과 연결된 창의 핸들과 애플리케이션 정의 아이콘 식별자입니다. 이 메서드는 Windows Vista 및 이전 버전에서 사용됩니다.

알림 영역의 아이콘에는 도구 설명이 있을 수 있습니다. 도구 설명은 표준 도구 설명(기본 설정) 또는 애플리케이션에서 그린 팝업 UI일 수 있습니다. 도구 설명은 필요하지 않지만 권장됩니다.

알림 영역 아이콘은 높은 DPI를 인식해야 합니다. 애플리케이션은 리소스 파일에 16x16 픽셀 아이콘과 32x32 아이콘을 모두 제공한 다음 LoadIconMetric을 사용하여 올바른 아이콘이 로드되고 적절하게 크기 조정되도록 해야 합니다.

알림 영역 아이콘을 담당하는 애플리케이션은 해당 아이콘에 대한 마우스 클릭을 처리해야 합니다. 사용자가 아이콘을 마우스 오른쪽 단추로 클릭하면 일반 바로 가기 메뉴가 표시됩니다. 그러나 마우스 왼쪽 단추를 한 번 클릭하면 아이콘의 함수에 따라 달라집니다. 팝업 창, 대화 상자 또는 프로그램 창 자체와 같이 사용자가 해당 콘텐츠에 가장 적합한 양식에 표시할 것으로 예상하는 내용을 표시해야 합니다. 예를 들어 상태 아이콘의 상태 텍스트 또는 볼륨 컨트롤의 슬라이더를 표시할 수 있습니다.

클릭으로 인한 팝업 창 또는 대화 상자의 배치는 알림 영역에서 클릭의 좌표 근처에 배치되어야 합니다. CalculatePopupWindowPosition을 사용하여 위치를 확인합니다.

위에 설명된 NOTIFYICONDATA 아이콘별 멤버만 정의하고 다음과 같이 Shell_NotifyIcon 호출하여 알림을 표시하지 않고 알림 영역에 아이콘을 추가할 수 있습니다.

NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...                    
Shell_NotifyIcon(NIM_ADD, &nid);

알림 영역에 아이콘을 추가하고 Shell_NotifyIcon 한 번의 호출로 알림을 모두 표시할 수도 있습니다. 이렇게 하려면 이 항목의 지침을 계속 진행합니다.

NOTIFYICONDATA 버전 정의

Windows가 진행됨에 따라 NOTIFYICONDATA 구조는 더 많은 기능을 정의하기 위해 더 많은 멤버를 포함하도록 확장되었습니다. 상수는 이전 버전과의 호환성을 위해 알림 영역 아이콘과 함께 사용할 NOTIFYICONDATA 버전을 선언하는 데 사용됩니다. 그렇지 않으면 강력한 이유가 없는 한 Windows Vista에 도입된 NOTIFYICON_VERSION_4 버전을 사용하는 것이 좋습니다. 이 버전은 등록된 GUID, 우수한 콜백 메커니즘 및 더 나은 접근성을 통해 알림 영역 아이콘을 식별하는 기본 기능을 포함하여 사용 가능한 전체 기능을 제공합니다.

다음 호출을 통해 버전을 설정합니다.

NOTIFYICONDATA nid = {};
... 
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);

이 Shell_NotifyIcon 호출은 알림을 표시하지 않습니다.

알림 모양 및 내용 정의

알림은 특수한 유형의 풍선 도구 설명 컨트롤입니다. 제목, 본문 텍스트 및 아이콘이 포함됩니다. 창처럼 오른쪽 위 모서리에 닫기 단추가 있습니다. 또한 사용자가 아이콘을 표시하거나 숨기거나 아이콘 없이 알림만 표시할 수 있는 제어판 알림 영역 아이콘 항목을 여는 옵션 단추가 포함되어 있습니다.

배터리 전원이 부족함을 나타내는 알림 풍선의 스크린샷

Shell_NotifyIcon 호출에서 보낸 NOTIFYICONDATA 구조에는 알림 영역 아이콘과 알림 풍선 자체를 모두 지정하는 정보가 포함됩니다. NOTIFYICONDATA를 통해 설정할 수 있는 알림과 관련된 항목은 다음과 같습니다.

  • 알림 유형으로 지정된 알림 풍선에 표시할 아이콘입니다. 아이콘의 크기는 물론 사용자 지정 아이콘도 지정할 수 있습니다.
  • 알림 제목입니다. 이 제목은 영어에서 최대 48자여야 합니다(지역화를 수용하기 위해). 제목은 알림의 첫 번째 줄이며 글꼴 크기, 색 및 두께를 사용하여 구분됩니다.
  • 알림 본문에 사용할 텍스트입니다. 이 텍스트는 지역화를 수용하기 위해 영어로 최대 200자여야 합니다.
  • 알림을 즉시 표시할 수 없는 경우 삭제해야 하는지 여부입니다.
  • 알림에 대한 시간 제한입니다. 이 설정은 시스템 전체의 접근성 제한 시간 설정을 위해 Windows Vista 및 이후 시스템에서 무시됩니다.
  • 알림이 조용한 시간을 준수해야 하는지 여부를 NIIF_RESPECT_QUIET_TIME 플래그를 통해 설정합니다.

참고 항목

IUserNotificationIUserNotification2 인터페이스는 Shell_NotifyIcon 대한 COM(구성 요소 개체 모델) 래퍼입니다. 그러나 현재는 GUID를 사용하여 알림 영역 아이콘을 식별하는 등 Shell_NotifyIcon 통해 직접 사용할 수 있는 전체 NOTIFYICON_VERSION_4 기능을 제공하지 않습니다.

 

사용자 상태 확인

시스템에서 는 SHQueryUserNotificationState 함수를 사용하여 사용자가 조용한 시간인지, 컴퓨터에서 멀리 떨어져 있는지 또는 프레젠테이션 모드와 같은 무정전 상태인지를 확인합니다. 시스템에서 알림을 표시할지 여부는 이 상태에 따라 달라집니다.

참고 항목

애플리케이션이 Shell_NotifyIcon, IUserNotification 또는 IUserNotification2를 사용하지 않는 사용자 지정 알림 메서드를 사용하는 경우 항상 명시적으로 SHQueryUserNotificationState를 호출하여 해당 시간에 알림 UI를 표시할지 여부를 결정해야 합니다.

 

사용자가 자리를 비울 때 전송된 알림은 표시 대기 중이지만 사용자가 언제 돌아올지 또는 해당 시간에 알림이 유효한지 여부를 알 수 없으므로 나중에 알림을 다시 보내는 것을 고려할 수 있습니다.

조용한 시간 동안 전송된 알림은 게시되지 않은 상태로 삭제됩니다. 디자인 지침은 모든 알림을 무시할 수 있도록 요청합니다. 즉각적인 사용자 작업이 필요하지 않습니다. 따라서 알림이 너무 중요하지 않으므로 조용한 시간을 재정의해야 합니다.

알림 표시

NOTIFYICONDATA 버전을 설정하고 NOTIFYICONDATA 구조에서 알림을 정의한 후에는 Shell_NotifyIcon 호출하여 아이콘을 표시합니다.

  • 알림 영역 아이콘이 없으면 Shell_NotifyIcon 호출하여 아이콘을 추가합니다. 일시적 아이콘과 일시적이지 않은 아이콘 모두에 대해 이 작업을 수행합니다.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • 알림 영역 아이콘이 이미 있는 경우 Shell_NotifyIcon 호출하여 아이콘을 수정합니다.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_MODIFY, &nid);
    

다음 코드에서는 NOTIFYICONDATA 데이터를 설정하고 Shell_NotifyIcon 통해 보내는 예제를 보여 있습니다. 이 예제에서는 GUID를 통해 알림 아이콘을 식별합니다(Windows 7에서 기본 설정).

// Declare NOTIFYICONDATA details. 
    // Error handling is omitted here for brevity. Do not omit it in your code.
    
    NOTIFYICONDATA nid = {};
    nid.cbSize = sizeof(nid);
    nid.hWnd = hWnd;
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID;
    
    // Note: This is an example GUID only and should not be used.
    // Normally, you should use a GUID-generating tool to provide the value to
    // assign to guidItem.
    static const GUID myGUID = 
    {0x23977b55, 0x10e0, 0x4041, {0xb8, 0x62, 0xb1, 0x95, 0x41, 0x96, 0x36, 0x69}};
    nid.guidItem = myGUID;
    
    // This text will be shown as the icon's tooltip.
    StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), L"Test application");
    
    // Load the icon for high DPI.
    LoadIconMetric(hInst, MAKEINTRESOURCE(IDI_SMALL), LIM_SMALL, &(nid.hIcon));
    
    // Show the notification.
    Shell_NotifyIcon(NIM_ADD, &nid) ? S_OK : E_FAIL;

아이콘 제거

아이콘을 제거하려면(예: 알림을 브로드캐스트하기 위해 아이콘만 일시적으로 추가한 경우) 다음과 같이 Shell_NotifyIcon호출합니다. 이 호출에는 아이콘을 식별하는 최소 NOTIFYICONDATA 구조만 필요합니다.

NOTIFYICONDATA nid = {};
...                    
Shell_NotifyIcon(NIM_DELETE, &nid);

참고 항목

애플리케이션이 제거되면 해당 알림 영역 아이콘은 최대 7일 동안 제어판 알림 영역 아이콘 페이지에서 사용자에게 옵션으로 표시할 수 있습니다. 그러나 변경된 내용은 아무런 영향을 주지 않습니다.

 

SDK 샘플

Shell_NotifyIcon 사용에 대한 전체 예제는 Windows SDK(소프트웨어 개발 키트)의 NotificationIcon 샘플 샘플을 참조하세요.

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

작업 표시줄

작업 표시줄 확장