Win32 API with 나우캠퍼스

Win32 API 7강. 다이얼로그(1) 모달형 다이얼로그

코다람쥐 2022. 8. 17. 13:05

목차


1. 모달형 다이얼로그

2. 모델리스형 다이얼로그

3. 파일 열기 및 저장 다이얼로그

4. 이미지 뷰어 프로그램 만들기

 

1. 모달형 다이얼로그

모달형 다이얼로그


다이얼로그가 최우선 순위

- 윈도우 화면 위에 띄워진 다이얼로그를 종료하기 전까진 윈도우를 조작할 수 없음.

 

▩  대표적인 다이얼로그 형태

- MessageBox()

 

다이얼로그 생성


▩ 생성 함수

void DialogBoxA(
  [in, optional]  hInstance,
  [in]            lpTemplate,
  [in, optional]  hWndParent,
  [in, optional]  lpDialogFunc
);

hInstance : 윈도우 인스턴스

lpTemplate : 하단참조

hWndParent : 부모 윈도우 핸들

lpDialogFunc : 함수포인터(다이얼로그 프로시져)

 

폼 생성과 lpTemplate 설정


▩ 폼 생성 과정

▩ 폼 아이디 => 고유값

▩ 폼 아이디를 변환하는 매크로 함수

- MAKEINTRESOURCE() => lpTemplate에 지정

 

 

다이얼로그 프로시져


▩ 일반 윈도우 메시지와 동일

▩ 콜백 함수의 형식

INT_PTR CALLBACK Dlgproc(
  HWND hWndDlg,
  UINT uMsg,
  WPARAM wParam,
  LPARAM lParam
);

 

▩ DialogProc와 WndProc 차이점

- Wnd Proc : 메시지 처리 => DefWindowProc(예외적인 메시지 처리)

- DialogProc : 메시지 처리 => TRUE, FALSE(메시지 처리 실패하면 FALSE 리턴)

 

▩ 자동 생성 코드에서 콜백함수 복사하여 사용하기

1. DlgProc 함수 선언

INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

위의 코드를 '복사'하고 About을 DlgProc로 바꿔주기.

INT_PTR CALLBACK    DlgProc(HWND, UINT, WPARAM, LPARAM);

 

2. DlgProc 함수 정의

About함수가 맨 밑에 정의되어 있는데 About함수를 '복사'한다.
그리고 함수이름 'About''DlgProc'로 이름만 바꾼다.

INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

 

다이얼로그 해제


▩ EndDialog() 함수 호출

BOOL EndDialog(
  [in] HWND    hDlg,
  [in] INT_PTR nResult
);

hDlg : 다이얼로그 윈도우 핸들

nResult : 부모 윈도우에게 전달되는 값. 기본 값은 0