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