온라인 도움말 처리
온라인 도움말은 자세한 개념 정보부터 빠른 정의에 이르기까지 다양한 형태로 제공됩니다. 이 항목에는 다음 섹션이 포함되어 있습니다.
도움말 정보
사용자에게 친숙한 애플리케이션의 중요한 요소는 온라인 도움말에서 쉽게 사용할 수 있습니다. Windows는 Windows 도움말 애플리케이션과 함께 사용할 때 애플리케이션에서 온라인 도움말을 쉽게 구현할 수 있도록 하는 함수 및 메시지를 제공합니다. 이 개요에서는 온라인 도움말을 지원하는 Windows의 요소에 대해 설명합니다. 이러한 요소를 사용하여 사용자에게 도움을 요청하는 방법을 설명하고 Windows 도움말 애플리케이션을 사용하여 도움말을 표시하는 방법을 설명합니다.
도움말 요청
대부분의 Windows 기반 애플리케이션은 애플리케이션 기능의 목적을 설명하는 개념적 도움말부터 애플리케이션의 사용자 인터페이스에서 개별 요소의 빠른 정의를 제공하는 팝업 도움말에 이르기까지 다양한 형태로 온라인 도움말 정보를 제공합니다. 함수 및 메시지를 사용하여 사용자에게 이 정보에 대한 액세스를 요청하는 다양한 방법을 제공합니다. 다음 섹션에서는 이러한 도움말 요청에 대해 설명합니다.
도움말 메뉴
대부분의 애플리케이션은 주 창에 도움말 메뉴를 포함하여 도움말 정보에 대한 사용자 액세스를 제공합니다. 사용자가 도움말 메뉴에서 항목을 선택하면 해당 창 프로시저는 선택한 항목을 식별하는 WM_COMMAND 메시지를 받습니다. 애플리케이션은 도움말 항목 목록, 인덱스 또는 애플리케이션 소개와 같은 적절한 도움말 정보를 표시하여 응답합니다.
키보드 도움말
Windows는 사용자가 F1 키를 누를 때마다 애플리케이션에 알려 키보드의 도움말 정보에 대한 사용자 액세스를 제공합니다. 시스템은 사용자가 키를 누를 때 키보드 포커스가 있는 창에 WM_HELP 메시지를 보냅니다. 창이 자식 창(예: 대화 상자의 컨트롤)인 경우 DefWindowProc 함수는 메시지를 부모 창에 전달합니다. F1 키를 누를 때 메뉴가 활성화된 경우 시스템은 메뉴와 연결된 창으로 메시지를 보냅니다. 애플리케이션은 포커스가 있거나 활성 상태인 창, 컨트롤 또는 메뉴와 연결된 도움말 정보를 표시하여 응답합니다. 예를 들어 사용자가 대화 상자에서 컨트롤을 선택하고 F1 키를 누르면 애플리케이션에서 해당 컨트롤에 대한 도움말 정보를 표시합니다.
WM_HELPlParam 매개 변수는 도움말이 요청된 항목에 대한 자세한 정보를 포함하는 HELPINFO 구조체에 대한 포인터입니다. 이 정보를 사용하여 표시할 도움말 항목을 결정합니다. HELPINFO 구조체에는 사용자가 키를 누를 때 마우스 커서의 좌표도 포함됩니다. 이 정보를 사용하여 마우스 커서의 위치에 따라 도움말을 제공할 수 있습니다.
마우스의 도움말
Windows는 사용자가 마우스 오른쪽 단추를 클릭하거나 질문(?) 단추를 클릭한 후 창, 컨트롤 또는 메뉴를 클릭할 때마다 애플리케이션에 알림으로써 마우스의 도움말 정보를 사용자에게 제공합니다. 애플리케이션은 지정된 창, 컨트롤 또는 메뉴와 연결된 도움말 정보를 표시하여 응답합니다.
사용자가 마우스 오른쪽 단추를 클릭하면 시스템에서 WM_CONTEXTMENU 메시지를 보냅니다. 클릭한 창이 메시지를 받습니다. 창이 컨트롤과 같은 자식 창인 경우 DefWindowProc 함수는 부모 창에 메시지를 전달합니다. WM_CONTEXTMENU 메시지는 마우스 커서의 좌표를 지정합니다. x 좌표는 lParam 매개 변수의 낮은 순서 단어에 있고 y 좌표는 높은 순서의 단어에 있습니다. 사용자가 컨트롤을 클릭하면 wParam 매개 변수는 클릭을 받은 컨트롤에 대한 핸들입니다.
사용자가 창의 제목 표시줄에 나타나는 질문(?) 단추를 클릭한 후 창에서 항목을 클릭하면 시스템에서 WM_HELP 메시지를 보냅니다. 창을 만들 때 CreateWindowEx 함수에서 WS_EX_CONTEXTHELP 스타일을 지정하여 제목 표시줄에 질문 단추를 추가할 수 있습니다. WM_HELPlParam 매개 변수는 사용자가 마우스 단추를 클릭할 때 마우스 커서의 좌표를 포함하여 도움말이 요청된 항목에 대한 자세한 정보를 포함하는 HELPINFO 구조체에 대한 포인터입니다.
질문 단추는 대화 상자에서만 사용하는 것이 좋습니다. 과거에 애플리케이션은 대화 상자에 도움말 단추를 제공하여 대화 상자에 대한 정보를 제공하는 사용자 액세스 권한을 제공했습니다. 이 메서드는 더 이상 권장되지 않습니다. 대신 질문 단추를 사용합니다.
도움말 표시 및 Windows 도움말
애플리케이션이 도움말 요청을 받으면 적절한 도움말 정보를 표시해야 합니다. Windows 도움말 애플리케이션은 일관된 사용자 인터페이스를 제공하므로 애플리케이션은 다른 방법 대신 Windows 도움말을 사용하는 것이 좋습니다. Windows 도움말에 도움말 정보를 표시하도록 지시하기 위해 애플리케이션은 WinHelp 함수를 사용하여 표시할 정보 및 표시할 창의 형태와 같은 세부 정보를 지정합니다. 다음 섹션에서는 WinHelp 사용하여 도움말 정보를 표시하는 방법을 설명합니다.
도움말 파일
도움말 정보를 보려면 WinHelp 함수를 호출할 때 도움말 파일을 지정해야 합니다. 도움말 파일에는 Windows 도움말(.hlp) 파일 형식과 하나 이상의 항목이 있어야 합니다. 각 항목은 개념 설명, 지침 집합, 그림, 용어집 정의 등과 같은 고유한 정보 단위입니다. 요청될 때마다 Windows 도움말에서 항목을 찾을 수 있도록 토픽을 고유하게 식별해야 합니다. 내부적으로 Windows 도움말에서는 토픽 식별자를 사용하여 토픽을 찾을 수 있지만, 애플리케이션은 대부분 컨텍스트 식별자(고유 정수 값)를 사용하여 표시할 항목을 지정합니다. 도움말 파일 작성자는 도움말 파일을 빌드하는 데 사용되는 프로젝트 파일의 [MAP] 섹션에 있는 항목 식별자에 컨텍스트 식별자를 명시적으로 매핑해야 합니다.
도움말 파일을 지정하지만 경로를 지정하지 않으면 WinHelp 도움말 디렉터리 또는 PATH 환경 변수로 지정된 디렉터리에서 도움말 파일을 찾습니다. 또한 WinHelp 다음 레지스트리 위치에 이름이 나열된 도움말 파일을 찾을 수 있습니다.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
Help
레지스트리를 활용하려면 도움말 파일과 이름이 같은 값 이름을 만들어야 합니다. 해당 이름에 할당된 값은 도움말 파일이 있는 디렉터리여야 합니다.
winHelp지정된 도움말 파일을 찾을 수 없는 경우 사용자가 도움말 파일의 위치를 지정할 수 있는 대화 상자가 표시됩니다. WinHelp 레지스트리에 위치 정보를 저장하므로 동일한 도움말 파일의 위치를 다시 묻지 않습니다.
도움말 파일을 작성하고 빌드하는 방법에 대한 자세한 내용은 개발 도구와 함께 제공되는 설명서를 참조하세요.
Windows 도움말 시작
다음 예제에서는 WinHelp 함수를 사용하여 Windows 도움말 애플리케이션을 시작하고 해당 콘텐츠 항목에 대한 도움말 파일을 엽니다.
HWND hwnd; // main window handle
BOOL bResult // for checking Boolean function result
bResult = WinHelp(hWnd, "WINNT.HLP", HELP_CONTENTS, 0L);
다음 예제에서는 사용자 도움말 파일을 열고, 키워드 문자열과 연결된 토픽을 검색한 다음, 해당 항목을 표시합니다.
HWND hwnd; // main window handle
BOOL bResult // for checking Boolean function result
bResult = WinHelp(hWnd, "WINNT.HLP", HELP_KEY, (DWORD) "finding topics");
도움말 항목 대화 상자
HELP_FINDER 명령을 사용하여 WinHelp 함수를 호출하여 도움말 항목 대화 상자를 표시할 수 있습니다. 도움말 항목 대화 상자를 사용하면 항목의 제목, 항목과 연결된 키워드 또는 항목에 있는 단어와 구를 확인하여 표시할 항목을 선택할 수 있습니다. 애플리케이션은 일반적으로 도움말 메뉴에서 도움말 항목과 같은 명령을 선택할 때 이 대화 상자를 표시합니다. 애플리케이션에 포커스가 있거나 활성 상태인 특정 창, 컨트롤 또는 메뉴가 없는 경우 사용자가 키를 누르면 애플리케이션이 이 대화 상자를 표시할 수도 있습니다.
과거에 애플리케이션은 HELP_CONTENTS 및 HELP_INDEX 명령을 WinHelp 함수와 함께 사용하여 Contents 토픽과 도움말 파일의 키워드 인덱스를 표시했습니다. 이러한 명령은 더 이상 권장되지 않습니다. 대신 HELP_FINDER 명령을 사용합니다.
정보 항목
HELP_CONTEXT 명령을 사용하여 WinHelp 함수를 호출하고 토픽의 컨텍스트 식별자를 지정하여 특정 항목을 표시할 수 있습니다. 애플리케이션은 일반적으로 특정 컨트롤 또는 메뉴에 대한 정보 대신 개념 정보 또는 절차 도움말이 포함된 항목에 대한 사용자 요청에 대한 응답으로 HELP_CONTEXT 명령을 사용합니다. 이러한 경우 사용자는 애플리케이션으로 돌아가기 전에 관련 정보를 찾는 도움말 파일을 계속 찾아볼 수 있습니다.
HELP_CONTEXT 명령은 Windows 도움말의 일반 인스턴스를 호출하여 사용자가 도움말 파일에서 다른 항목을 찾을 수 있도록 합니다. 일반적으로 제목 표시줄, 시스템 메뉴, 최소화 및 최대화 단추, 주 메뉴, 선택적 탐색 모음, 크기 조정 테두리 및 클라이언트 영역을 포함하는 기본 도움말 창이 표시됩니다. 선택한 항목의 텍스트가 클라이언트 영역에 표시되고 사용자는 주 창에서 핫 링크 또는 탐색 단추를 사용하여 도움말 파일을 탐색할 수 있습니다. Windows 도움말의 일반 인스턴스를 사용하여 주 창 대신 하나 이상의 보조 창에 도움말을 표시할 수도 있습니다.
팝업 항목
HELP_WM_HELP 또는 HELP_CONTEXTMENU 명령을 사용하여 WinHelp 함수를 호출하여 특정 컨트롤 또는 메뉴에 대한 정보가 포함된 팝업 항목을 표시할 수 있습니다. 이러한 명령은 해당 컨트롤 또는 메뉴 근처의 팝업 창에 토픽을 표시합니다. 사용자가 애플리케이션에서 즉시 작업하도록 하려면 사용자가 키를 누르거나 마우스 왼쪽 단추를 클릭하는 즉시 팝업 창이 제거됩니다.
제어 창에 대한 WM_HELP 메시지를 처리할 때 HELP_WM_HELP 명령을 사용합니다. 대부분의 컨트롤은 WM_HELP 메시지를 DefWindowProc 함수에 전달하므로 해당 대화 상자 프로시저(또는 부모 창 프로시저)는 이 메시지를 처리합니다. 대화 상자 프로시저는 특정 컨텍스트 식별자를 제공하는 대신 WM_HELP 메시지와 함께 전달된 HELPINFO 구조체의 hItemHandle 멤버에 지정된 컨트롤 핸들과 함께 WinHelp컨트롤 및 컨텍스트 식별자 쌍 배열을 전달해야 합니다. 함수는 WM_HELP 메시지가 생성된 컨트롤의 식별자를 결정하고 일치하는 컨텍스트 식별자를 사용하여 적절한 토픽을 표시합니다.
WM_CONTEXTMENU 메시지를 처리할 때 HELP_CONTEXTMENU 명령을 사용합니다. 대부분의 컨트롤은 WM_CONTEXTMENU 메시지를 DefWindowProc 함수에 전달하므로 해당 대화 상자 프로시저(또는 부모 창 프로시저)는 이 메시지를 처리합니다. 이 프로시저는 컨트롤 및 컨텍스트 식별자 쌍의 배열을 지정합니다. 또한 함수가 배열에서 적절한 컨텍스트 식별자를 선택하고 적절한 토픽을 표시할 수 있도록 WinHelp 호출할 때 wParam 매개 변수의 핸들을 지정합니다. HELP_WM_HELP 명령과 달리 HELP_CONTEXTMENU는 먼저 메뉴에 What's This? 명령을 표시합니다. 사용자가 명령을 선택하면 WinHelp 항목이 표시됩니다. 그렇지 않으면 요청이 취소됩니다.
HELP_CONTEXTPOPUP 명령을 사용하고 토픽의 컨텍스트 식별자를 지정하여 팝업 항목을 표시할 수도 있습니다. 이 명령은 HELP_CONTEXT 명령과 비슷하지만 HELP_WM_HELP 및 HELP_CONTEXTMENU 사용하는 Windows 도움말의 팝업 인스턴스를 호출합니다. 애플리케이션은 WM_HELP 메시지에 대한 응답으로 이 명령을 사용하여 메뉴 및 대화 상자의 컨트롤이 아닌 창에 대한 도움말을 표시할 수 있습니다. 이 명령을 가장 효과적으로 사용하려면 애플리케이션에서 이러한 메뉴 및 창에 컨텍스트 식별자를 할당해야 합니다.
애플리케이션의 창이나 메뉴에 컨텍스트 식별자를 할당할 수 있습니다. WM_HELP 메시지가 생성되면 시스템에는 WM_HELP 메시지의 부모 창에 전달되는 HELPINFO 구조체에 컨텍스트 식별자가 포함됩니다. 그런 다음 부모 창에서 컨텍스트 식별자를 WinHelp에 전달하여 요청된 도움말 항목을 표시할 수 있습니다.
SetWindowContextHelpId 함수를 사용하여 창 또는 컨트롤에 컨텍스트 식별자를 할당하고 SetMenuContextHelpId 함수를 사용하여 상황에 맞는 식별자를 메뉴에 할당합니다. GetWindowContextHelpId 사용하거나 GetMenuContextHelpId함수를창 또는 메뉴에 대한 컨텍스트 식별자를 검색할 수 있습니다.
키워드 검색
도움말 파일의 항목에 키워드를 할당하여 사용자가 항목을 찾고 볼 수 있도록 설정할 수 있습니다. 키워드는 하나 이상의 토픽과 연결된 문자열일 뿐입니다. Windows 도움말은 도움말 파일의 모든 키워드를 수집하고 테이블에 배치한 다음 도움말 항목 대화 상자의 인덱스 목록에 표시합니다. 사용자가 키워드를 선택하면 Windows 도움말에 연결된 도움말 항목이 표시되거나, 키워드와 연결된 항목이 두 개 이상 있는 경우 사용자가 선택할 수 있는 항목 목록이 표시됩니다.
애플리케이션에서 WinHelp 함수와 함께 HELP_KEY, HELP_PARTIALKEY 또는 HELP_MULTIKEY 명령을 사용하여 전체 또는 부분 키워드를 기반으로 도움말 항목을 검색하고 표시할 수 있습니다. 명령, 키워드 문자열, 도움말 파일 및 소유자 창에 대한 핸들을 지정합니다. 모든 경우에 단일 일치 항목이 발견되면 WinHelp 해당 항목을 표시합니다. 일치하는 항목이 두 개 이상 있으면 함수에 항목 검색 대화 상자가 표시되고 사용자가 볼 토픽을 선택할 수 있습니다. 일치하는 항목이 없으면 WinHelp 인덱스 목록(HELP_KEY 및 HELP_PARTIALKEY)을 표시하거나 오류 메시지(HELP_MULTIKEY)를 표시합니다.
애플리케이션은 키워드를 세미콜론으로 구분하여 WinHelp단일 호출에서 여러 키워드를 검색할 수 있습니다. (Windows 버전 3용으로 만든 도움말 파일은 여러 키워드 검색이 지원되지 않습니다.x) 지정한 도움말 파일에 :Index 또는 :Link 명령이 포함된 콘텐츠(.cnt) 파일이 있는 경우 여러 도움말 파일에서 키워드를 검색할 수도 있습니다. HELP_KEY 명령을 사용하면 WinHelp 이러한 명령으로 지정된 모든 파일에서 키워드를 검색합니다. HELP_MULTIKEY 및 HELP_PARTIALKEY 명령을 사용하여 함수는 :Link 명령으로 지정된 파일을 제외한 모든 파일을 검색합니다.
기본적으로 Windows 도움말은 도움말 원본 파일에서 K 각주 문자로 식별되는 키워드 테이블만 인식합니다. 도움말 원본 파일에 키워드 정의와 함께 K 이외의 각주 문자를 추가하여 추가 키워드 테이블을 만들도록 Windows 도움말에 지시할 수 있습니다. (그러나 각주 문자 A는 예약되어 있습니다.) 도움말 파일을 빌드할 때 프로젝트 파일의 [OPTIONS] 섹션에서 MULTIKEY 문을 사용하여 추가 키워드 테이블을 정의해야 합니다.
애플리케이션은 WinHelp 함수와 함께 HELP_SETINDEX 명령을 사용하여 Windows 도움말에 인덱스 목록에 K 이외의 키워드 테이블을 표시하도록 지시할 수 있습니다. Windows 도움말에서 대체 키워드 테이블에서 키워드를 검색하도록 지시하기 위해 애플리케이션은 HELP_MULTIKEY 명령을 사용할 수 있습니다. 당신은 WinHelp에 전달할 MULTIKEYHELP 구조에서 키워드와 키워드 테이블을 지정합니다.
WinHelp 항목을 표시하면 항목의 ">" 각주로 지정된 창, 내용 파일의 :Base 명령으로 지정된 창 또는 주 창에 표시됩니다. WinHelp 호출할 때 주 창이 이미 다른 도움말 파일에 열려 있는 경우 검색하는 동안 함수는 주 창을 숨깁니다. 이 경우 항목 및 도움말 항목 대화 상자를 모두 취소하면 주 창이 닫힙니다.
보조 도움말 창
Windows 도움말 애플리케이션의 주 창을 기본 창이라고 합니다. Windows 도움말은 보조 창에 도움말 항목을 표시할 수도 있습니다. 기본 도움말 창과 달리 보조 창에는 메뉴 모음이 없습니다. 보조 창에 탐색 모음을 포함할 수 있으며 막대에 단추를 추가할 수 있습니다. 또한 Windows 도움말이 항목을 수용하도록 보조 창의 높이를 자동으로 조정하도록 선택할 수도 있습니다.
도움말 프로젝트 파일의 [WINDOWS] 섹션에서 각 창의 이름과 초기 크기 및 위치를 제공하는 보조 창을 정의해야 합니다. 보조 창에 대해 정의한 꺾쇠괄호(>) 및 이름을 도움말 파일의 이름에 추가하여 보조 창에 항목을 표시하도록 Windows 도움말 애플리케이션에 지시할 수 있습니다. 그런 다음 결과 문자열이 WinHelp 함수에 전달됩니다.
애플리케이션은 WinHelp호출에서 HELPWININFO 구조체의 주소와 HELP_SETWINPOS 명령을 지정하여 기본 또는 보조 창의 크기와 위치를 변경할 수 있습니다. HELPWININFO 창의 이름과 새 크기와 위치를 지정합니다.
교육 카드 도움말
애플리케이션은 학습 카드 도움말을 사용하여 작업 단계를 안내하는 일련의 지침을 표시할 수 있습니다. 학습 카드는 일반적으로 TCard 매크로와 연결된 특정 단계 및 단추를 설명하는 텍스트로 구성되며, 이를 통해 사용자는 애플리케이션에 다음에 수행할 작업을 알릴 수 있습니다. 학습 카드는 보조 창에만 표시할 수 있으며 도움말 파일의 다른 항목에 대한 핫 링크를 포함해서는 안 됩니다.
애플리케이션은 WinHelp 함수를 호출하고 HELP_CONTEXT 같은 다른 명령과 함께 HELP_TCARD 명령을 지정하여 Windows 도움말의 학습 카드 인스턴스를 시작합니다. 그런 다음 사용자가 학습 카드의 단추를 클릭하거나, TCard 매크로에 할당된 핫스폿을 클릭하거나, 학습 카드를 닫으면 Windows 도움말에서 WM_TCARD 메시지를 보내 애플리케이션에 알립니다. wParam 매개 변수는 단추 또는 사용자 동작을 식별하고 lParam 매개 변수에는 추가 데이터가 포함되며, 그 의미는 wParam값에 따라 달라집니다.
도움말 취소
Windows 도움말을 사용하려면 애플리케이션이 응용 프로그램 및 해당 도움말 파일을 추적하는 데 사용되는 모든 리소스를 해제할 수 있도록 도움말을 명시적으로 취소해야 합니다. 애플리케이션은 WinHelp 함수를 호출하고 HELP_QUIT 명령을 지정하여 언제든지 이 작업을 수행할 수 있습니다. Windows 도움말의 팝업 인스턴스에는 해당되지 않습니다. 애플리케이션은 팝업 인스턴스를 닫아서는 안 됩니다.
애플리케이션에서 winHelp호출한 경우 주 창을 닫기 전에 도움말을 취소해야 합니다(예: 주 창 프로시저의 WM_DESTROY 메시지에 대한 응답). 애플리케이션은 열린 도움말 파일 수에 관계없이 WinHelp 한 번만 호출하여 도움말을 취소해야 합니다. Windows 도움말은 모든 애플리케이션 또는 DLL이 도움말을 취소할 때까지 계속 실행됩니다.
Windows 도움말의 학습 카드 인스턴스를 닫려면 WinHelp호출할 때 HELP_TCARD 명령과 HELP_QUIT 명령을 모두 지정해야 합니다. 사용자가 먼저 취소하는 경우 애플리케이션은 Windows 도움말의 학습 카드 인스턴스를 취소할 필요가 없습니다. Windows 도움말은 사용자가 idCLOSE로 설정된 wParam 매개 변수와 함께 WM_TCARD 메시지를 전송하여 학습 카드 인스턴스를 취소할 때 애플리케이션에 알합니다.
도움말 사용
이 섹션에서는 대화 상자에 상황에 맞는 도움말을 제공하는 방법과 보조 도움말 창의 모양을 설정하는 방법을 보여줍니다.
- 대화 상자에서 도움말 제공하기
- 보조 도움말 창 모양 설정
대화 상자에서 도움말 제공
대화 상자에서 상황에 맞는 도움말을 제공하려면 DWORD 값 쌍으로 구성된 배열을 만들어야 합니다. 각 쌍의 첫 번째 값은 대화 상자에서 컨트롤의 식별자이고, 두 번째 값은 컨트롤에 대한 도움말 항목의 컨텍스트 식별자입니다. 배열은 대화 상자의 각 컨트롤에 대해 한 쌍의 식별자를 포함해야 합니다.
대화 상자 프로시저는 WM_HELP 메시지와 WM_CONTEXTMENU 메시지를 처리해야 합니다. 사용자가 키를 누르면 대화 상자 프로시저는 WM_HELP을 수신하고, 마우스 오른쪽 버튼을 클릭하면 WM_CONTEXTMENU을 수신합니다.
WM_HELPlParam 매개 변수에는 HELPINFO 구조체의 주소가 포함됩니다. 이 구조의 hItemHandle 멤버는 사용자가 도움을 요청한 컨트롤을 식별합니다. 이 핸들을 HELP_WM_HELP 명령, 도움말 파일 이름 및 식별자 배열에 대한 포인터와 함께 WinHelp 함수에 전달해야 합니다. WinHelp 함수는 배열에서 지정된 컨트롤의 컨트롤 식별자를 검색한 다음 해당 도움말 컨텍스트 식별자를 검색합니다. 다음으로, 함수는 도움말 컨텍스트 식별자를 Windows 도움말에 전달하여 해당 항목을 찾아 팝업 창에 표시합니다. 컨트롤에 -1의 식별자가 있는 경우 시스템은 탭 정지인 다음 컨트롤을 검색한 다음 해당 식별자를 사용하여 도움말 컨텍스트 식별자를 찾습니다. 이러한 이유로 리소스 파일의 컨트롤 앞에 정적 텍스트를 배치하는 것이 중요합니다.
WinHelp 함수를 호출할 때 WM_CONTEXTMENU 처리하는 것은 다음 두 가지 예외를 제외하고 WM_HELP 처리하는 것과 유사합니다.
- WM_CONTEXTMENU에서 메시지를 보낸 컨트롤의 핸들인 wParam 매개 변수를 전달합니다.
- HELP_CONTEXTMENU 명령을 HELP_WM_HELP대신 지정합니다.
HELP_CONTEXTMENU 명령을 사용하면 도움말 항목을 표시하기 전에 Windows 도움말에 메뉴가 표시됩니다. 메뉴가 시스템 정의입니다. 사용자가 컨트롤에 대한 도움말을 표시하거나 도움말 항목 대화 상자를 표시할 수 있습니다.
다음 예제에서는 대화 상자에서 상황에 맞는 도움말을 구현하는 방법을 보여줍니다.
LRESULT CALLBACK EditDlgProc(HWND hwndDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
// Create an array of control identifiers and context identifiers.
static DWORD aIds[ ] =
{
ID_SAVE, IDH_SAVE,
ID_DELETE, IDH_DELETE,
ID_COPY, IDH_COPY,
ID_PASTE, IDH_PASTE,
0,0
};
switch (uMsg)
{
case WM_HELP:
WinHelp(((LPHELPINFO)lParam)->hItemHandle, "helpfile.hlp",
HELP_WM_HELP, (DWORD)(LPSTR)aIds);
break;
case WM_CONTEXTMENU:
WinHelp((HWND)wParam, "helpfile.hlp", HELP_CONTEXTMENU,
(DWORD)(LPVOID)aIds);
break;
// Process other messages here.
}
return FALSE;
}
보조 도움말 창의 모양 설정
애플리케이션은 HELP_SETWINPOS 명령과 HELPWININFO 구조체의 주소를 WinHelp 함수에 전달하여 보조 도움말 창의 크기, 위치 및 표시 상태를 설정할 수 있습니다. HELPWININFO의 멤버는 변경할 창의 이름과 새 크기와 위치, 표시 상태를 지정합니다.
다음 예제에서는 "wnd_menu"라는 보조 창의 모양을 설정합니다. 도움말 프로젝트 파일의 [WINDOWS] 섹션에서 이름을 정의해야 합니다.
BOOL DoWindowSize(VOID)
{
HANDLE hhwi;
LPHELPWININFO lphwi;
WORD wSize;
char *szWndName = "wnd_menu";
size_t NameLength; // Does not include the terminating null character
HRESULT hr
BOOL retval;
hr = StringCbLengthA(szWndName, STRSAFE_MAX_CCH, &NameLength);
if (SUCCEEDED(hr))
{
// Add 1 to account for the name string's terminating null character.
NameLength++;
// The HELPWININFO structure contains a minimal TCHAR array of size [2]
// that is used for the window name. Since sizeof(HELPWININFO)
// includes those two TCHARS, they must be subtracted from the
// total when adding the actual string length to calculate the
// size of the structure.
wSize = sizeof(HELPWININFO) - 2 + NameLength;
}
else
// Something's amiss with the string.
return FALSE;
hhwi = GlobalAlloc(GHND, wSize);
lphwi = (LPHELPWININFO)GlobalLock(hhwi);
lphwi->wStructSize = wSize;
lphwi->x = 256; // horizontal position
lphwi->y = 256; // vertical position
lphwi->dx = 767; // width
lphwi->dy = 512; // height
lphwi->wMax = SW_SHOW; // show the window
// secondary window
hr = StringCbCopyA(lphwi->rgchMember, sizeof(lphwi->rgchMember), szWndName);
if (SUCCEEDED(hr))
{
WinHelp(hwnd, "myhelp.hlp", HELP_SETWINPOS, (DWORD)lphwi);
GlobalUnlock(hhwi);
GlobalFree(hhwi);
return TRUE;
}
else
// There was a problem copying the window name.
return FALSE;
}