대화 상자 찾기 및 바꾸기
사용자가 검색할 문자열을 지정할 수 있는 모덜리스 대화 상자와 문서에서 텍스트를 검색할 때 사용할 옵션을 표시합니다. 바꾸기 대화 상자를 사용하면 사용자가 검색할 문자열과 대체 문자열을 지정하고 작업을 제어하는 옵션을 지정할 수 있습니다.
FINDREPLACE 구조를 초기화하고 구조체를 FindText 함수에 전달하여 찾기 대화 상자를 만들고 표시합니다. 다음 그림에서는 일반적인 찾기 대화 상자를 보여 줍니다.
FINDREPLACE 구조를 초기화하고 구조체를ReplaceText 함수에 전달하여 바꾸기 대화 상자를 만들고 표시합니다. 다음 그림에서는 일반적인 바꾸기 대화 상자를 보여 줍니다.
다른 일반적인 대화 상자와 달리 찾기 및 바꾸기 대화 상자는 모덜리스입니다. 모덜리스 대화 상자를 사용하면 사용자가 대화 상자와 대화 상자를 만든 창 간에 전환할 수 있습니다. 이는 사용자가 문자열을 검색하고, 애플리케이션 창으로 전환하여 문자열에서 작업하고, 대화 상자로 다시 전환하여 대화 상자를 여는 데 필요한 명령을 반복하지 않고 다른 문자열을 검색하도록 하는 데 유용합니다.
FindText 또는 ReplaceText 함수가 대화 상자를 성공적으로 만들면 대화 상자에 대한 핸들을 반환합니다. 이 핸들을 사용하여 대화 상자를 이동하고 통신할 수 있습니다. 함수가 대화 상자를 만들 수 없는 경우 NULL을 반환합니다. CommDlgExtendedError 함수를 호출하여 확장된 오류 값을 검색하여 오류의 원인을 확인할 수 있습니다.
이 섹션에서는 다음 항목을 설명합니다.
FINDMSGSTRING 등록된 메시지
찾기 또는 바꾸기 대화 상자를 만들기 전에 RegisterWindowMessage 함수를 호출하여 FINDMSGSTRING 등록된 메시지에 대한 메시지 식별자를 가져와야 합니다. 그런 다음, 식별자를 사용하여 대화 상자에서 보낸 메시지를 검색하고 처리할 수 있습니다. 대화 상자에서 다음 찾기, 바꾸기 또는 모두 바꾸기 단추를 클릭하면 대화 상자 프로시저가 FINDMSGSTRING 메시지를 소유자 창의 창 프로시저로 보냅니다. 대화 상자를 만들 때 FINDREPLACE 구조체의 hwndOwner 멤버는 소유자 창을 식별합니다.
FINDMSGSTRING 메시지의 lParam 매개 변수는 대화 상자를 만들 때 지정한 FINDREPLACE 구조체에 대한 포인터입니다. 메시지를 보내기 전에 대화 상자는 검색할 문자열, 대체 문자열(있는 경우) 및 찾기 및 바꾸기 작업에 대한 옵션을 포함하여 이 구조체의 멤버를 최신 사용자 입력으로 설정합니다.
FINDMSGSTRING 메시지에서 FINDREPLACE 구조체의 Flags 멤버에는 메시지를 발생시킨 이벤트를 나타내는 다음 플래그 중 하나가 포함됩니다.
플래그 | 의미 |
---|---|
FR_DIALOGTERM | 대화 상자가 닫히고 있습니다. 소유자 창에서 이 메시지를 처리하면 대화 상자에 대한 핸들이 더 이상 유효하지 않습니다. |
FR_FINDNEXT | 사용자가 찾기 또는 바꾸기 대화 상자에서 다음찾기 단추를 클릭했습니다. lpstrFindWhat 멤버는 검색할 문자열을 지정합니다. |
FR_REPLACE | 사용자가 바꾸기 대화 상자에서 바꾸기 단추를 클릭했습니다. lpstrFindWhat 멤버는 바꿀 문자열을 지정하고 lpstrReplaceWith 멤버는 대체 문자열을 지정합니다. |
FR_REPLACEALL | 사용자가 바꾸기 대화 상자에서 모두 바꾸기 단추를 클릭했습니다. lpstrFindWhat 멤버는 바꿀 문자열을 지정하고 lpstrReplaceWith 멤버는 대체 문자열을 지정합니다. |
다음 찾기 또는 모두 바꾸기 메시지의 경우 Flags 멤버는 다음 플래그의 조합을 포함하여 검색 옵션을 나타낼 수 있습니다.
플래그 | 의미 |
---|---|
FR_DOWN | 설정하면 방향 라디오 단추의 아래쪽 단추가 선택되어 사용자가 현재 위치에서 문서 끝까지 검색하려고 함을 나타냅니다. FR_DOWN 설정되지 않은 경우 사용자가 문서의 시작 부분으로 검색할 수 있도록 위쪽 단추가 선택됩니다. |
FR_MATCHCASE | 설정된 경우 대/소문자 검사 확인란이 선택되어 사용자가 검색을 대/소문자를 구분하려고 함을 나타냅니다. FR_MATCHCASE 설정되지 않은 경우 검색이 대/소문자를 구분하지 않을 수 있도록 검사 상자가 선택 취소됩니다. |
FR_WHOLEWORD | 설정하면 전체 Word 일치 검사 상자가 선택되어 사용자가 검색 문자열과 일치하는 전체 단어만 검색하려고 함을 나타냅니다. FR_WHOLEWORD 설정되지 않은 경우 검사 상자가 선택되지 않으므로 검색 문자열과 일치하는 단어 조각도 검색해야 합니다. |
찾기 또는 바꾸기 대화 상자 사용자 지정
찾기 또는 바꾸기 대화 상자를 사용자 지정하려면 다음 방법 중 원하는 방법을 사용할 수 있습니다.
- 대화 상자를 만들 때 FINDREPLACE 구조체에 값 지정
- 사용자 지정 템플릿 제공
- 후크 프로시저 제공
찾기 또는 바꾸기 대화 상자를 만들 때 FINDREPLACE 구조체의 Flags 멤버에 플래그를 설정하여 검색 옵션 컨트롤을 숨기거나 사용하지 않도록 설정할 수 있습니다. 예를 들어 FR_NOMATCHCASE 플래그를 설정하여 대/소문자 검사 확인란을 사용하지 않도록 설정하거나 FR_HIDEMATCHCASE 플래그를 설정하여 숨길 수 있습니다.
예를 들어 애플리케이션에 고유한 추가 컨트롤을 포함하려는 경우 찾기 또는 바꾸기 대화 상자에 대한 사용자 지정 템플릿을 제공할 수 있습니다. FindText 및 ReplaceText 함수는 기본 템플릿 대신 사용자 지정 템플릿을 사용합니다.
찾기 또는 바꾸기 대화 상자에 대한 사용자 지정 템플릿을 제공하려면
- Findtext.dlg 파일에 지정된 기본 템플릿을 수정하여 사용자 지정 템플릿을 만듭니다. 기본 찾기 또는 바꾸기 대화 상자 템플릿에 사용되는 컨트롤 식별자는 Dlgs.h 파일에 정의되어 있습니다.
-
FINDREPLACE 구조를 사용하여 다음과 같이 템플릿을 사용하도록 설정합니다.
-
사용자 지정 템플릿이 애플리케이션 또는 동적 연결 라이브러리의 리소스인 경우 Flags 멤버에서 FR_ENABLETEMPLATE 플래그를 설정합니다. 구조체의 hInstance 및 lpTemplateName 멤버를 사용하여 모듈 및 리소스 이름을 식별합니다.
-또는-
사용자 지정 템플릿이 이미 메모리에 있는 경우 FR_ENABLETEMPLATEHANDLE 플래그를 설정합니다. hInstance 멤버를 사용하여 템플릿이 포함된 메모리 개체를 식별합니다.
-
찾기 또는 바꾸기 대화 상자에 FRHookProc 후크 프로시저를 제공할 수 있습니다. 후크 프로시저는 대화 상자로 전송된 메시지를 처리할 수 있습니다. 사용자 지정 템플릿을 사용하여 추가 컨트롤을 정의하는 경우 컨트롤에 대한 입력을 처리하는 후크 프로시저를 제공해야 합니다.
찾기 또는 바꾸기 대화 상자에 후크 프로시저를 사용하도록 설정하려면
- FINDREPLACE 구조체의 Flags 멤버에서 FR_ENABLEHOOK 플래그를 설정합니다.
- lpfnHook 멤버에서 후크 프로시저의 주소를 지정합니다.
WM_INITDIALOG 메시지를 처리한 후 대화 상자 프로시저는 후크 프로시저에 WM_INITDIALOG 메시지를 보냅니다. 이 메시지의 lParam 매개 변수는 대화 상자를 초기화하는 데 사용되는 FINDREPLACE 구조체에 대한 포인터입니다.
후크 프로시저가 WM_INITDIALOG 메시지에 대한 응답으로 FALSE를 반환하는 경우 후크 프로시저가 표시하지 않으면 대화 상자가 표시되지 않습니다. 이렇게 하려면 먼저 다른 페인트 작업을 수행한 다음 ShowWindow 및 UpdateWindow 함수를 호출합니다. 다음 코드는 예제를 제공합니다.
// We've returned FALSE in response to WM_INITDIALOG.
// We've performed any other paint operations.
// Now we display the dialog box.
ShowWindow(hDlg, SW_SHOWNORMAL);
UpdateWindow(hDlg);