다음을 통해 공유


일반 대화 상자 사용자 지정

일반 대화 상자를 표준 형식으로 사용하거나 사용자 지정할 수 있습니다. 사용자의 관점에서 일반적인 대화 상자의 주요 이점은 애플리케이션에서 애플리케이션까지 일관된 모양과 기능입니다. 따라서 애플리케이션에 반드시 필요한 경우에만 공통 대화 상자를 사용자 지정하는 것이 중요합니다. 그렇지 않으면 일관된 모양과 간단한 코딩 인터페이스가 손실됩니다. 적절한 사용자 지정은 가능한 한 많은 원래 컨트롤을 그대로 유지합니다. 대화 상자의 크기를 늘리거나 대화 상자에서 이미 사용할 수 있는 공간에 새 컨트롤을 추가하는 것은 적절한 사용자 지정입니다. 원래 컨트롤을 숨기거나 원래 컨트롤의 의도한 기능을 변경하는 것은 덜 적절한 사용자 지정입니다.

이 섹션에서는 일반적인 대화 상자를 사용자 지정하기 위한 다음 방법에 대해 설명합니다.

사용자 지정 템플릿

일반적인 대화 상자에는 대화 상자에서 표준 컨트롤의 번호, 유형 및 위치를 정의하는 기본 템플릿이 있습니다. 사용자 지정 템플릿을 정의하여 사용자에게 애플리케이션에 고유한 추가 컨트롤에 대한 액세스 권한을 부여할 수 있습니다.

탐색기 스타일 열기 및 다른 이름으로 저장 대화 상자를 제외한 모든 일반적인 대화 상자의 경우 기본 템플릿을 대체하는 사용자 지정 템플릿을 만들도록 기본 템플릿을 수정합니다. 사용자 지정 템플릿은 표준 컨트롤의 형식 및 위치와 추가 컨트롤을 정의합니다.

기본 대화 상자 템플릿을 수정하여 사용자 지정 대화 상자 템플릿을 만들 때 추가된 컨트롤의 식별자가 고유하고 표준 컨트롤의 식별자와 충돌하지 않는지 확인합니다. 다음 표에서는 기본 템플릿 파일의 이름을 나열하고 각 공통 대화 상자 형식에 대한 파일을 포함합니다.

대화 상자 유형 템플릿 파일 파일 포함
Color.dlg ColorDlg.h
찾기 Findtext.dlg Dlgs.h
글꼴 Font.dlg Dlgs.h
열기(여러 선택) Fileopen.dlg Dlgs.h
열기(단일 선택) 파일열기.dlg Dlgs.h
페이지 설정 Prnsetup.dlg Dlgs.h
인쇄 Prnsetup.dlg Dlgs.h
인쇄 설정(사용되지 않음) Prnsetup.dlg Dlgs.h
교체 텍스트찾기.dlg Dlgs.h

사용자 지정 템플릿을 사용하려면 Flags 대화 상자에 해당하는 구조체의 멤버에 플래그를 설정해야 합니다. 템플릿이 애플리케이션 또는 동적 연결 라이브러리의 리소스인 경우 Flags 멤버에서 ENABLETEMPLATE 플래그를 설정하고, hInstancelpTemplateName 멤버를 사용하여 모듈 및 리소스 이름을 식별합니다. 템플릿이 이미 메모리에 있는 경우 Flags 멤버에서 ENABLETEMPLATEHANDLE 플래그를 설정하고 hInstance 멤버를 사용하여 템플릿이 포함된 메모리 개체를 식별합니다.

대부분의 경우 대화 상자에 대한 후크 프로시저를 사용하도록 설정하여 사용자 지정 템플릿의 추가 컨트롤에 대한 입력을 지원하고 처리해야 합니다.

탐색기 스타일 대화 상자인 열기다른 이름으로 저장의 경우 기본 템플릿은 수정할 수 없습니다. 대신 사용자 지정 템플릿은 표준 대화 상자에 추가할 항목만 포함하는 자식 대화 상자를 정의합니다. 사용자 지정 템플릿은 자식 대화 상자에서 표준 컨트롤 클러스터의 위치를 지정하는 정적 컨트롤을 정의할 수도 있습니다. 자세한 내용은 Explorer-Style 사용자 지정 템플릿참조하세요.

일반 대화 상자에 대한 후크 프로시저

각 공통 대화 상자에 대해 후크 프로시저를 사용하도록 설정하여 기본 대화 상자 프로시저에서 메시지를 처리할 수 있습니다. 일반적인 대화 후크 프로시저에는 두 가지 일반적인 유형이 있습니다.

  • 가장 일반적인 대화 상자와 함께 사용되는 표준 후크 프로시저
  • 탐색기 스타일 후크 프로시저는 열기다른 이름으로 저장 대화 상자에서 지원됩니다.

공통 대화 상자 중 하나에 표준 후크 프로시저를 제공하는 경우 기본 대화 상자 프로시저는 다음과 같이 메시지를 처리합니다.

메시지 처리
WM_INITDIALOG 기본 대화 상자 프로시저는 메시지를 후크 프로시저에 전달하기 전에 처리합니다. 메시지의 lParam 매개 변수는 대화 상자를 만들 때 지정된 초기화 구조에 대한 포인터입니다.
기타 모든 메시지 후크 프로시저가 먼저 메시지를 받습니다. 그런 다음, 후크 프로시저의 반환 값은 기본 대화 프로시저가 메시지를 처리할지 아니면 무시할지를 결정합니다.

탐색기 스타일 열기 및 다른 이름으로 저장 대화 상자의 경우 후크 프로시저는 대화 상자의 표준 컨트롤에 대한 메시지를 수신하지 않습니다. 대신 대화 상자에서 알림 메시지와 사용자 지정 템플릿에서 정의한 추가 컨트롤에 대한 메시지를 받습니다. 자세한 내용은 Explorer-Style 후크 프로시저참조하세요.

후크 프로시저를 사용하도록 설정하려면 대화 상자에 해당하는 구조체의 Flags 멤버에서 ENABLEHOOK 값을 설정합니다. ENABLEHOOK 플래그가 설정되면 구조체의 lpfnHook 멤버가 후크 프로시저의 주소를 지정해야 합니다.

다음 표에서는 각 공통 대화 상자에 제공할 후크 프로시저의 유형을 보여 줍니다.

대화 상자 유형 후크 프로시저
CCHookProc
찾기 또는 바꾸기 FRHookProc
글꼴 CFHookProc
열기 또는 다른 이름으로 저장 (탐색기 스타일) OFNHookProc
열기 또는 다른 이름으로 저장(이전 스타일) OFNHookProcOldStyle
인쇄 PrintHookProc
페이지 설정 페이지설정훅

페이지 설정 대화 상자의 경우 PagePaintHook 후크 프로시저를 지정할 수도 있습니다. 페이지 설정 대화 상자에서 표시되는 샘플 페이지의 모양을 사용자 지정하는 데 사용할 수 있는 특별한 후크 프로시저입니다.

메모

인쇄 설치 대화 상자가 페이지 설정 대화 상자로 대체되었습니다. 애플리케이션은 페이지 설정 대화 상자를 사용해야 합니다. 그러나 호환성을 위해 PrintDlg 함수는 인쇄 설정 대화 상자의 표시를 계속 지원합니다. 인쇄 설치 대화 상자에 SetupHookProc 후크 프로시저를 제공할 수 있습니다.

일반적인 대화 상자 메시지

일반적인 대화 상자는 메시지를 사용하여 특정 이벤트가 발생할 때 창 프로시저 또는 후크 프로시저에 알립니다. 또한 정보를 검색하거나 대화 상자의 동작이나 모양을 제어하기 위해 공통 대화 상자로 보낼 수 있는 메시지가 있습니다. 이 섹션에서는 RegisterWindowMessage 함수에 의해 등록된 일반적인 대화 메시지, 글꼴 대화 상자 및 페이지 설정 대화 상자에서 사용하는 메시지, 탐색기 스타일 열기 및 다른 이름으로 저장 대화 상자에서 사용하는 메시지에 대해 설명합니다.

공통 대화 상자 라이브러리는 메시지 문자열 집합을 정의합니다. 이러한 메시지 문자열 중 하나와 연결된 상수는 RegisterWindowMessage 전달하여 메시지 식별자를 가져올 수 있습니다. 그런 다음 식별자를 사용하여 공통 대화 상자에서 보낸 메시지를 검색 및 처리하거나 일반 대화 상자에 메시지를 보낼 수 있습니다. 다음 표에서는 메시지 상수와 해당 사용에 대해 설명합니다.

연락처 쓰다
COLOROKSTRING 대화 상자는 사용자가 색을 선택하고 확인 단추를 클릭하면 이 메시지를 후크 프로시저로 보냅니다. 후크 프로시저는 색을 적용하거나 거부하여 대화 상자를 열어 두도록 할 수 있습니다.
FILEOKSTRING 열기 또는 다른 이름으로 저장 대화 상자는 사용자가 파일 이름을 선택하고 확인 단추를 클릭하면 후크 프로시저로 이 메시지를 보냅니다. 후크 프로시저는 파일 이름을 수락하거나 거부하여 대화 상자를 열어 두도록 할 수 있습니다. 탐색기 스타일 열기저장 대화 상자의 경우, 이 메시지가 CDN_FILEOK 알림 메시지로 대체되었습니다.
FINDMSGSTRING 찾기 또는 바꾸기 대화 상자는 사용자가 찾기 다음, 바꾸기, 또는 모두 바꾸기를 클릭하거나 대화 상자를 닫을 때 부모 창의 창 프로시저로 이 메시지를 보냅니다. 메시지의 lParam 매개 변수는 사용자의 입력을 포함하는 FINDREPLACE 구조체에 대한 포인터입니다.
HELPMSGSTRING 모든 일반적인 대화 상자는 사용자가 도움말 단추를 클릭할 때 부모 창의 창 프로시저로 이 메시지를 보냅니다. 탐색기 스타일 열기 및 다른 이름으로 저장 대화 상자의 경우 이 메시지가 CDN_HELP 알림 메시지로 대체되었습니다.
LBSELCHSTRING 열기 또는 다른 이름으로 저장 대화 상자는 사용자가 파일 이름 목록 상자에서 선택을 변경할 때 후크 프로시저로 이 메시지를 보냅니다. 탐색기 스타일 열기 및 다른 이름으로 저장 대화 상자의 경우 이 메시지가 CDN_SELCHANGE 알림 메시지로 대체되었습니다.
SETRGBSTRING 후크 프로시저는 이 메시지를 대화 상자로 보내 현재 색 선택을 설정할 수 있습니다.
SHAREVISTRING 열기 또는 다른 이름으로 저장 대화 상자는 사용자가 확인 버튼을 클릭할 때, 선택한 파일에 대해 공유 위반이 발생하는 경우 이 메시지를 후크 프로시저로 보냅니다. 탐색기 스타일 열기 및 다른 이름으로 저장 대화 상자의 경우 이 메시지가 CDN_SHAREVIOLATION 알림 메시지로 대체되었습니다.

일부 일반적인 대화 상자는 다른 창 메시지를 보내고 받습니다. 글꼴 대화 상자의 후크 프로시저는 WM_CHOOSEFONT_* 메시지를 글꼴 대화 상자로 보낼 수 있습니다. 자세한 내용은 글꼴 대화 상자참조하세요. PagePaintHook 후크 프로시저를 사용하도록 설정한 경우 페이지 설정 대화 상자에서 WM_PSD_* 메시지를 보냅니다. 자세한 내용은 페이지 설정 대화 상자참조하세요.

탐색기 스타일의 열기다른 이름으로 저장 대화상자는 미리 정의된 메시지 집합을 지원합니다. 여기에는 후크 프로시저에 WM_NOTIFY 메시지 형식으로 전송된 알림 메시지와 후크 프로시저가 대화 상자에 보낼 수 있는 메시지가 포함됩니다. 이러한 메시지의 전체 목록은 Explorer-Style 후크 프로시저참조하세요.

도움말 지원

일반적인 대화 상자는 대화 상자의 표준 컨트롤에 대한 상황에 맞는 도움말을 제공합니다. 일반적인 대화 상자에 대한 추가 도움말을 제공하려면 도움말 단추를 표시하고 사용자가 단추를 클릭할 때 생성된 메시지를 처리할 수 있습니다. 도움말 단추는 상황에 맞는 기본 도움말을 보완합니다. 도움말 단추는 애플리케이션에 적용되는 대화 상자의 범용을 설명하는 데 유용합니다.

Context-Sensitive 도움말

모든 일반적인 대화 상자는 대화 상자의 표준 컨트롤에 대한 상황에 맞는 도움말을 제공합니다. 사용자는 다음 방법 중 어느 방법으로든 개별 컨트롤에 대한 도움말을 표시할 수 있습니다.

  • 컨트롤을 선택하고 F1 키를 누릅니다.
  • 제목 표시줄에서 ? 버튼을 클릭한 후, 컨트롤을 클릭합니다.
  • 컨트롤 위에 마우스 오른쪽 단추를 클릭합니다.

새 컨트롤을 추가하여 대화 상자를 사용자 지정하는 경우 후크 프로시저에서 도움말 요청을 처리하여 이러한 컨트롤에 대한 도움말 지원도 확장해야 합니다. 후크 프로시저는 사용자가 도움을 요청할 때 다음 메시지를 받습니다.

사용자 작업 메시지
컨트롤 위에 있는 마우스 오른쪽 단추를 클릭합니다. WM_CONTEXTMENU
F1 키를 눌렀습니다. WM_HELP
? 제목 표시줄의 단추를 클릭한 다음 컨트롤을 클릭합니다. WM_HELP

추가한 컨트롤에 대해 이러한 메시지를 처리해야 하지만 기본 대화 상자 프로시저에서 표준 컨트롤에 대한 메시지를 처리하도록 합니다. 이러한 메시지를 처리하는 방법에 대한 자세한 내용은 도움말참조하세요.

도움말 단추

대화 상자에 대한 초기화 구조의 Flags 멤버에서 SHOWHELP 값을 설정하여 일반적인 대화 상자에서 도움말 단추를 표시할 수 있습니다. 도움말 단추를 표시하는 경우 사용자의 도움말 요청을 처리해야 합니다. 처리는 애플리케이션의 창 프로시저 중 하나 또는 대화 상자의 후크 프로시저에서 수행할 수 있습니다. 일반적으로 WinHelp 함수를 호출하여 도움말 요청을 처리합니다.

창 프로시저 중 하나에서 도움말 메시지를 처리하려면 HELPMSGSTRING 값으로 정의된 문자열에 대한 메시지 식별자를 가져와 메시지를 받을 창을 식별해야 합니다. 메시지 식별자를 얻으려면 RegisterWindowMessage 함수에 대한 호출에서 HELPMSGSTRING 매개 변수로 지정합니다. 대화 상자를 만들 때 대화 상자 초기화 구조의 hwndOwner 멤버를 사용하여 메시지를 받을 창을 식별합니다. 대화 상자 프로시저는 사용자가 도움말 단추를 클릭할 때마다 창 프로시저로 메시지를 보냅니다.

후크 프로시저에서 도움말 메시지를 처리하려면 WM_COMMAND 메시지를 처리해야 합니다. 후크 프로시저는 이 메시지의 wParam 매개 변수가 사용자가 도움말 단추를 클릭했음을 나타내는 경우 도움말을 제공합니다. 도움말 단추의 식별자는 Dlgs.h 파일에 정의된 pshHelp 상수입니다.

탐색기 스타일 열기 및 다른 이름으로 저장 대화 상자에 대한 후크 프로시저는 도움말 단추에 대한 WM_COMMAND 메시지를 수신하지 않습니다. 대신 대화 상자는 도움말 단추를 클릭할 때 후크 프로시저에 CDN_HELP 알림 메시지를 보냅니다.