다음을 통해 공유


사용자 지정 알림 처리

Windows 도구 모음 일반 컨트롤에는 사용자가 도구 모음 단추를 삽입, 삭제 또는 다시 정렬할 수 있는 시스템 정의 사용자 지정 대화 상자를 비롯한 기본 제공 사용자 지정 기능이 있습니다. 애플리케이션은 사용자 지정 기능을 사용할 수 있는지 여부를 결정하고 사용자가 도구 모음을 사용자 지정할 수 있는 범위를 제어합니다.

도구 모음에 CCS_ADJUSTABLE 스타일을 제공하여 사용자가 이러한 사용자 지정 기능을 사용할 수 있도록 할 수 있습니다. 사용자 지정 기능을 사용하면 사용자가 단추를 새 위치로 끌거나 도구 모음에서 끌어 단추를 제거할 수 있습니다. 또한 도구 모음을 두 번 클릭하여 도구 모음 사용자 지정 대화 상자를 표시할 수 있습니다. 이를 통해 사용자가 도구 모음 단추를 추가, 삭제 및 다시 정렬할 수 있습니다. 애플리케이션은 멤버 사용자 지정 함수를 사용하여 대화 상자를 표시할 수 있습니다.

도구 모음 컨트롤은 사용자 지정 프로세스의 각 단계에서 부모 창에 알림 메시지를 보냅니다. 사용자가 SHIFT 키를 누른 상태에서 단추를 끌기 시작하면 도구 모음에서 끌기 작업을 자동으로 처리합니다. 도구 모음은 TBN_QUERYDELETE 알림 메시지를 부모 창으로 보내 단추를 삭제할 수 있는지 여부를 확인합니다. 부모 창이 FALSE를 반환하면 끌기 작업이 종료됩니다. 그렇지 않으면 도구 모음은 마우스 입력을 캡처하고 사용자가 마우스 단추를 놓을 때까지 기다립니다.

사용자가 마우스 단추를 놓으면 도구 모음 컨트롤이 마우스 커서의 위치를 결정합니다. 커서가 도구 모음 외부에 있으면 단추가 삭제됩니다. 커서가 다른 도구 모음 단추에 있는 경우 도구 모음은 부모 창에 TBN_QUERYINSERT 알림 메시지를 보내 지정된 단추의 왼쪽에 단추를 삽입할 수 있는지 확인합니다. 부모 창이 TRUE를 반환하면 단추가 삽입됩니다 . 그렇지 않으면 그렇지 않습니다. 도구 모음은 TBN_TOOLBARCHANGE 알림 메시지를 보내 끌기 작업의 종료를 알릴 수 있습니다.

사용자가 SHIFT 키를 누르지 않고 끌기 작업을 시작하면 도구 모음 컨트롤이 소유자 창에 TBN_BEGINDRAG 알림 메시지를 보냅니다. 자체 단추 끌기 코드를 구현하는 애플리케이션은 이 메시지를 신호로 사용하여 끌기 작업을 시작할 수 있습니다. 도구 모음은 TBN_ENDDRAG 알림 메시지를 보내 끌기 작업의 종료를 알릴 수 있습니다.

도구 모음 컨트롤은 사용자가 도구 모음 사용자 지정 대화 상자를 사용하여 도구 모음을 사용자 지정할 때 알림 메시지를 보냅니다. 사용자가 도구 모음을 두 번 클릭한 후, 대화 상자가 생성되기 전에 도구 모음은 TBN_BEGINADJUST 알림 메시지를 보냅니다. 다음으로 도구 모음에서 일련의 TBN_QUERYINSERT 알림 메시지를 전송하여 도구 모음에서 단추를 삽입할 수 있는지 여부를 확인합니다. 부모 창이 TRUE를 반환하면 도구 모음에서 TBN_QUERYINSERT 알림 메시지 보내기를 중지합니다. 부모 창이 단추에 대해 TRUE 를 반환하지 않으면 도구 모음이 대화 상자를 삭제합니다.

다음으로 도구 모음 컨트롤은 도구 모음의 각 단추에 대해 하나의 TBN_QUERYDELETE 알림 메시지를 전송하여 도구 모음에서 단추를 삭제할 수 있는지 여부를 결정합니다. 부모 창은 TRUE 를 반환하여 단추가 삭제될 수 있음을 나타냅니다. 그렇지 않으면 FALSE를 반환 합니다. 도구 모음은 대화 상자에 모든 도구 모음 단추를 추가하지만 삭제되지 않을 수 있는 단추는 회색으로 표시됩니다.

도구 모음 컨트롤에 도구 모음 사용자 지정 대화 상자의 단추에 대한 정보가 필요할 때마다 TBN_GETBUTTONINFO 알림 메시지를 전송하여 정보가 필요한 단추의 인덱스와 TBNOTIFY 구조체의 주소를 지정합니다. 부모 창은 구조체를 관련 정보로 채워야 합니다.

도구 모음 사용자 지정 대화 상자에는 도움말 단추와 다시 설정 단추가 포함되어 있습니다. 사용자가 도움말 단추를 선택하면 도구 모음 컨트롤이 TBN_CUSTHELP 알림 메시지를 보냅니다. 부모 창은 도움말 정보를 표시하여 응답해야 합니다. 대화 상자는 사용자가 다시 설정 단추를 선택하면 TBN_RESET 알림 메시지를 보냅니다. 이 메시지는 도구 모음이 대화 상자를 다시 초기화하려고 함을 나타냅니다.

이러한 메시지는 모두 WM_NOTIFY 메시지이며 소유자 창의 메시지 맵에 다음 양식의 메시지 맵 항목을 추가하여 소유자 창에서 처리할 수 있습니다.

ON_NOTIFY( wNotifyCode, idControl, memberFxn )
  • wNotifyCode

    알림 메시지 식별자 코드(예: TBN_BEGINADJUST)

  • idControl

    알림을 보내는 컨트롤의 식별자입니다.

  • memberFxn

    이 알림을 받을 때 호출할 멤버 함수입니다.

멤버 함수는 다음 프로토타입으로 선언됩니다.

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

알림 메시지 처리기가 값을 반환하는 경우 결과로 가리키는 LRESULT에 배치해야 합니다.

각 메시지에 pNotifyStruct 대해 NMHDR 구조체 또는 TBNOTIFY 구조를 가리킵니다. 이러한 구조는 아래에 설명되어 있습니다.

NMHDR 구조체에는 다음 멤버가 포함됩니다.

typedef struct tagNMHDR {
    HWND hwndFrom;  // handle of control sending message
    UINT idFrom;// identifier of control sending message
    UINT code;  // notification code; see below
} NMHDR;
  • hwndFrom

    알림을 보내는 컨트롤의 창 핸들입니다. 이 핸들을 포인터로 CWnd 변환하려면 CWnd::FromHandle을 사용합니다.

  • idFrom

    알림을 보내는 컨트롤의 식별자입니다.

  • 코드

    알림 코드입니다. 이 멤버는 TBN_BEGINADJUST 또는 TTN_NEEDTEXT 같은 컨트롤 형식과 관련된 값이거나 아래에 나열된 일반적인 알림 값 중 하나일 수 있습니다.

    • NM_CLICK 사용자가 컨트롤 내에서 마우스 왼쪽 단추를 클릭했습니다.

    • NM_DBLCLK 사용자가 컨트롤 내에서 마우스 왼쪽 단추를 두 번 클릭했습니다.

    • NM_KILLFOCUS 컨트롤이 입력 포커스를 잃었습니다.

    • NM_OUTOFMEMORY 사용 가능한 메모리가 부족하여 컨트롤에서 작업을 완료할 수 없습니다.

    • NM_RCLICK 사용자가 컨트롤 내에서 마우스 오른쪽 단추를 클릭했습니다.

    • NM_RDBLCLK 사용자가 컨트롤 내에서 마우스 오른쪽 단추를 두 번 클릭했습니다.

    • NM_RETURN 컨트롤에 입력 포커스가 있고 사용자가 ENTER 키를 눌렀습니다.

    • NM_SETFOCUS 컨트롤이 입력 포커스를 받았습니다.

TBNOTIFY 구조체에는 다음 멤버가 포함됩니다.

typedef struct {
    NMHDR hdr; // information common to all WM_NOTIFY messages
    int iItem; // index of button associated with notification
    TBBUTTON tbButton; // info about button associated withnotification
    int cchText;   // count of characters in button text
    LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
  • hdr

    모든 WM_NOTIFY 메시지에 공통적인 정보입니다.

  • iItem

    알림과 연결된 단추의 인덱스입니다.

  • tbButton

    알림과 연결된 도구 모음 단추에 대한 정보를 포함하는 TBBUTTON 구조체입니다.

  • cchText

    단추 텍스트의 문자 수입니다.

  • lpszText

    단추 텍스트에 대한 포인터입니다.

도구 모음에서 보내는 알림은 다음과 같습니다.

  • TBN_BEGINADJUST

    사용자가 도구 모음 컨트롤 사용자 지정을 시작할 때 전송됩니다. 포인터는 알림에 대한 정보를 포함하는 NMHDR 구조를 가리킵니다. 처리기는 특정 값을 반환할 필요가 없습니다.

  • TBN_BEGINDRAG

    사용자가 도구 모음 컨트롤에서 단추를 끌기 시작할 때 전송됩니다. 포인터는 TBNOTIFY 구조를 가리킵니다. iItem 멤버는 드래그 중인 버튼의 0을 기준으로 시작하는 인덱스를 포함합니다. 처리기는 특정 값을 반환할 필요가 없습니다.

  • TBN_CUSTHELP

    사용자가 도구 모음 사용자 지정 대화 상자에서 도움말 단추를 선택하면 전송됩니다. 반환 값이 없습니다. 포인터는 알림 메시지에 대한 정보를 포함하는 NMHDR 구조를 가리킵니다. 처리기는 특정 값을 반환할 필요가 없습니다.

  • TBN_ENDADJUST

    사용자가 도구 모음 컨트롤 사용자 지정을 중지할 때 전송됩니다. 포인터는 알림 메시지에 대한 정보를 포함하는 NMHDR 구조를 가리킵니다. 처리기는 특정 값을 반환할 필요가 없습니다.

  • TBN_ENDDRAG

    사용자가 도구 모음 컨트롤의 단추 끌기를 중지할 때 전송됩니다. 포인터는 TBNOTIFY 구조를 가리킵니다. iItem 멤버는 드래그 중인 버튼의 0을 기준으로 시작하는 인덱스를 포함합니다. 처리기는 특정 값을 반환할 필요가 없습니다.

  • TBN_GETBUTTONINFO

    사용자가 도구 모음 컨트롤을 사용자 지정할 때 전송됩니다. 도구 모음은 이 알림 메시지를 사용하여 도구 모음 사용자 지정 대화 상자에 필요한 정보를 검색합니다. 포인터는 TBNOTIFY 구조를 가리킵니다. iItem 멤버는 단추의 인덱스(0부터 시작하는 인덱스)를 지정합니다. pszTextcchText 멤버는 현재 단추 텍스트의 주소와 길이를 문자 단위로 지정합니다. 애플리케이션은 단추에 대한 정보로 구조를 채워야 합니다. 단추 정보가 구조체에 복사되었으면 TRUE 를 반환하고, 그렇지 않으면 FALSE 를 반환합니다.

  • TBN_QUERYDELETE

    사용자가 도구 모음 컨트롤에서 단추를 삭제할 수 있는지 여부를 확인하기 위해 도구 모음을 사용자 지정하는 동안 전송됩니다. 포인터는 TBNOTIFY 구조를 가리킵니다. iItem 멤버에는 삭제할 단추의 인덱스(0부터 시작)가 포함됩니다. 단추를 삭제할 수 있도록 하려면 TRUE 를 반환하고, 단추를 삭제하지 않도록 하려면 FALSE 를 반환합니다.

  • TBN_QUERYINSERT

    사용자가 지정된 단추의 왼쪽에 단추를 삽입할 수 있는지 여부를 확인하기 위해 도구 모음 컨트롤을 사용자 지정하는 동안 전송됩니다. 포인터는 TBNOTIFY 구조를 가리킵니다. iItem 멤버에는 삽입할 단추의 인덱스(0부터 시작)가 포함됩니다. TRUE를 반환하여 지정된 단추 앞에 단추를 삽입할 수 있도록 하거나, 삽입을 방지하려면 FALSE를 반환합니다.

  • TBN_RESET

    사용자가 도구 모음 사용자 지정 대화 상자의 콘텐츠를 다시 설정할 때 전송됩니다. 포인터는 알림 메시지에 대한 정보를 포함하는 NMHDR 구조를 가리킵니다. 처리기는 특정 값을 반환할 필요가 없습니다.

  • TBN_TOOLBARCHANGE

    사용자가 도구 모음 컨트롤을 사용자 지정한 후에 전송됩니다. 포인터는 알림 메시지에 대한 정보를 포함하는 NMHDR 구조를 가리킵니다. 처리기는 특정 값을 반환할 필요가 없습니다.

참고하십시오

CToolBarCtrl 사용
컨트롤