다음을 통해 공유


일반 대화 상자 사용자 지정

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

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

사용자 지정 템플릿

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

참고

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

일반적인 대화 상자 메시지

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

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

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

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

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

도움말 지원

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

Context-Sensitive 도움말

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

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

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

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

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

도움말 단추

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

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

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

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