사용자 지정 대화 상자

응용 프로그램은 미리 정의 된 대화 상자 클래스를 사용 하는 대신 대화 상자에 대 한 응용 프로그램 정의 창 클래스를 사용 하 여 사용자 지정 대화 상자를 만들 수 있습니다. 일반적으로 응용 프로그램은 대화 상자는 그들의 주요 창 그러나 그것은 또한 표준 겹치는 창 있는 응용 프로그램 모달 및 모덜리스 대화 상자를 만드는 데 유용 하는 경우이 메서드를 사용.

응용 프로그램 정의 창 클래스에는 대화 상자 프로시저에 그들을 보내기 전에 대화 상자와 프로세스 메시지에 대 한 창 프로시저를 정의 하는 응용 프로그램 수 있습니다. 또한 클래스 아이콘, 클래스 배경 브러시 대화 상자에 대 한 클래스 메뉴를 정의 하는 응용 프로그램 수 있습니다. 응용 프로그램 대화 상자를 만들기 전에 창 클래스를 등록 해야 하 고 원자 값 또는 창 클래스의 이름으로 대화 상자 서식 파일을 제공 해야 합니다.

많은 응용 프로그램 미리 정의 된 대화 상자 클래스에 대 한 클래스 정보를 검색 한 다음 정보는 WNDCLASS 구조체를 채웁니다 GetClassInfo 함수에 전달 하 여 새 대화 상자 클래스를 만듭니다. 응용 프로그램의 구조와 같은 클래스 이름, 브러시, 아이콘, 개별 구성원을 수정 다음 RegisterClass 함수를 사용 하 여 새 클래스를 등록 합니다. 응용 프로그램 자체에 WNDCLASS 구조체를 채우고, 각 대화 상자에 대 한 필요한 여분의 바이트 수는 DLGWINDOWEXTRA에 cbWndExtra 멤버를 설정 해야 합니다 그것. 또한이 응용 프로그램 추가 바이트를 사용 하 여 각 대화 상자에 대 한, 그들은 시스템에 필요한 추가 바이트를 넘어 되어야 합니다.

사용자 지정 대화 상자에 대 한 창 프로시저는 동일한 매개 변수 및 요구 사항을 다른 창 프로시저. 그러나 다른 창 프로시저와 달리,이 대화 상자에 대 한 창 프로시저 호출 해야 DefWindowProc 함수 대신 DefDlgProc 함수에 대 한 모든 메시지를 처리 하지 않습니다. DefDlgProc 대화 상자 프로시저 호출을 포함 하는 미리 정의 된 대화 상자에 대 한 창 프로시저를 처리 하는 동일한 기본 메시지 실시.

응용 프로그램은 미리 정의 된 대화 상자 창 프로시저를 서브클래싱하 여 사용자 지정 대화 상자를 만들 수도 있습니다. SetWindowLong 함수는 지정한 창에 대 한 창 프로시저의 주소를 설정 하는 응용을 프로그램 수 있습니다. 응용 프로그램 SetClassLong 함수를 사용 하 여 하위 클래스를 또한 시도할 수 있습니다 하지만 뭐 그렇게 모든 대화 상자에에서 영향을 미칩니다 시스템 뿐 아니라 그 응용 프로그램에 속하는.

가끔 사용자 지정 대화 상자를 생성 하는 응용 프로그램 대화 상자에 대 한 대체 키보드 인터페이스를 제공 합니다. 모덜리스 대화 상자에 대 한이 의미 애플리케이션과 IsDialogMessage 함수를 호출 하는 것이 아니라 대신 사용자 지정 창 프로시저에서 모든 키보드 입력을 처리 합니다. 이러한 경우에 응용 프로그램을 최소화 한 컨트롤에서 입력된 포커스를 이동 하는 데 필요한 코드 WM_NEXTDLGCTL 메시지를 사용할 수 있습니다. 이 메시지를 DefDlgProc전달 하는 경우 지정된 된 컨트롤에 입력된 포커스를 이동 하 고 기본 누름 단추 테두리 이동 하거나 설정 자동 라디오 단추와 같은 컨트롤의 모양을 업데이트합니다.

 

Index