모덜리스 대화 상자 만들기

만들 모덜리스 대화 상자 CreateDialog 함수를 사용 하 여 식별자 또는 대화 상자 템플릿 리소스의 이름 및 대화 상자 프로시저의 주소를 지정 합니다. CreateDialog 서식 파일을 로드 하 고 대화 상자를 만들고 선택적으로 표시. 응용 프로그램은 검색 하 고 대화 상자 프로시저에 사용자 입력된 메시지를 디스패치 하는 작업을 담당.

응용 프로그램 모덜리스 대화 상자를 표시 하는 다음 예제에서 ? 아직 표시 되지 않은 경우-때 사용자 응용 프로그램 메뉴에서 이동 명령을 선택 합니다. 대화 상자에는 편집 컨트롤, 확인란 및 확인 단추와 취소 단추가 포함 되어 있습니다. 대화 상자 템플릿을 응용 프로그램의 실행 파일에 리소스 및 리소스 식별자 DLG_GOTO를 있다. 사용자 편집 컨트롤에 줄 번호를 입력 하 고 줄 번호는 현재 선 기준으로 지정 하려면 확인란을 확인 합니다. 컨트롤 식별자는 ID_LINE, ID_ABSREL, IDOK, IDCANCEL.

예제의 첫 번째 부분에 있는 문을 모덜리스 대화 상자를 만듭니다. 이러한 문은 응용 프로그램의 주 창에 대 한 창 프로시저에서 만들고 대화 상자 창 프로시저 IDM_GOTO 명령 식별자가 WM_COMMAND 메시지를 수신 하지만 전역 변수 hwndGoto 에 이미 유효한 핸들이 없는 경우에. 예제의 두 번째 부분은 응용 프로그램의 주 메시지 루프입니다. 루프 사용자가 모덜리스 대화 상자에 대화 상자 키보드 인터페이스를 사용할 수 있도록 IsDialogMessage 함수를 포함 합니다. 예제의 세 번째 부분은 대화 상자 프로시저입니다. 프로시저에서 사용자가 확인 단추를 선택 하는 경우 편집 컨트롤 및 확인란의 내용을 검색 합니다. 사용자가 취소 버튼을 선택 하면 대화 상자를 파괴 하는 절차.

HWND hwndGoto = NULL;  / / 대화 상자의 창 핸들. 
    . 
    . 
 
    WM_COMMAND 사례: 전환 (LOWORD(wParam)) {IDM_GOTO 경우: if (!IsWindow(hwndGoto)) {hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE(DLG_GOTO), hwnd (DLGPROC) GoToProc); 
                    ShowWindow (hwndGoto, SW_SHOW); 
                } 
                break; 
        } 0 L 반환 
 

위의 문에서 CreateDialog 라고 hwndGoto 가 하는 경우에 하지 올바른 창 핸들을 포함 합니다. 이렇게 하면 응용 프로그램 동시에 두 개의 대화 상자를 표시 하지 않습니다. 검사의이 메서드를 지원 하려면 대화 프로시저 해야 합니다 hwndGoto NULL로 설정 대화 상자를 파괴 하는 경우.

응용 프로그램 메시지 루프의 다음 문을 구성합니다:

동안 (GetMessage (amp; msg, NULL, NULL, NULL)) {경우 (!IsWindow(hwndGoto) | | !IsDialogMessage (hwndGoto, & msg)) {TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    } 
} 
 

루프 대화 상자에 대 한 창 핸들의 유효성을 검사 하 고만 핸들은 유효한 경우 IsDialogMessage 함수를 호출 합니다. IsDialogMessage 대화 상자에 속한 경우에 메시지를 처리 합니다. 그렇지 않으면 FALSE를 반환 하 고 루프를 적절 한 창 메시지 디스패치.

다음 문은 대화 상자 프로시저 정의:

int iLine;             / / 수신 라인 번호 BOOL fRelative;        / / 확인란 상태가 BOOL 콜백 GoToProc (hwndDlg HWND, UINT 메시지, WP&ARAM wParam, LPARAM lParam) {BOOL fError; 
 
    스위치 (메시지) {WM_INITDIALOG 경우: CheckDlgButton (hwndDlg, ID_ABSREL, fRelative); 
            TRUE를 반환 합니다. 
 
        WM_COMMAND 사례: 전환 (LOWORD(wParam)) {IDOK 경우: fRelative (hwndDlg, ID_ABSREL); IsDlgButtonChecked = 
                    iLine = GetDlgItemInt (hwndDlg, ID_LINE, amp; fError, fRelative); 
                    경우 (fError) {MessageBox (hwndDlg, SZINVALIDNUMBER, SZGOTOERR, MB_OK); 
                        SendDlgItemMessage (hwndDlg, ID_LINE, EM_SETSEL, 0-1 패); 
                    } 다른 / 수행 소유자 창의 알림 / / / 명령. 
 
                    TRUE를 반환 합니다. 
 
                IDCANCEL 사례: DestroyWindow(hwndDlg); 
                    hwndGoto = NULL; 
                    TRUE를 반환 합니다. 
            }} FALSE; 반환 
} 
 

위의 문에서 프로시저 WM_INITDIALOGWM_COMMAND 메시지를 처리합니다. WM_INITDIALOG 처리를 하는 동안 프로시저 CheckDlgButton를 전역 변수 fRelative 의 현재 값을 전달 하 여 체크 박스를 초기화 합니다. 프로시저에서 다음 기본 입력된 포커스를 설정 하려면 시스템을 직접 TRUE를 반환 합니다.

WM_COMMAND 처리 하는 동안 프로시저에서 취소 단추를 선택 하는 경우에 대화 상자를 닫습니다-IDCANCEL 식별자를 갖는 버튼 즉. 프로시저는 모덜리스 대화 상자를 닫으려면 DestroyWindow 를 호출 해야 합니다. 프로시저 또한 다른 문이이 변수를 의존 하는 제대로 작동 하려면 NULL로 hwndGoto 변수 설정.

확인 단추를 선택 하는 경우 프로시저 확인란의 현재 상태를 검색 하 고 fRelative 변수에 할당 합니다. 그것은 다음 변수를 사용 하 여 편집 컨트롤에서 줄 번호를 검색 합니다. GetDlgItemInt 편집 컨트롤의에서 텍스트를 정수로 변환합니다. FRelative 값 함수 숫자 부호 있는 또는 부호 없는 값으로 해석할지 결정 합니다. 텍스트 편집 컨트롤 사용할 수 없는 경우 GetDlgItemInt 를 0이 아닌 fError 변수의 값을 설정 합니다. 오류 메시지를 표시 하거나 명령을 수행 여부를 결정 하려면이 값을 검사 하는 절차. 오류 이벤트에 대화 상자 프로시저 텍스트를 선택 하는 컨트롤에 사용자가 쉽게 바꿀 수 있도록 그것을 연출 하는 편집 컨트롤에 메시지를 보냅니다. 경우 GetDlgItemInt 오류를 반환 하지 않으면 프로시저 자체 요청한 명령을 수행 하거나 명령을 수행 하도록 지시 하는 소유자 창에 메시지를 보낼.

 

Index