1. 모달형 다이얼로그
2. 모델리스형 다이얼로그
3. 폼 기반 윈도우 프로그램
4. 파일열기 모달형 다이얼로그
다이얼로그
① 모달(Modal)형 다이얼로그 : 대화상자를 닫기 전 다른 윈도우로 전환할 수 없는 대화상자
② 모델리스(Modeless)형 다이얼로그 : 대화상자를 열어 놓은 채로 다른 윈도우로 전환할 수 있는 대화상자
1. 모달형 다이얼로그
- 다이얼로그가 최우선 순위
- 대표적인 다이얼로그 형태 MessageBox()
- MessageBox()를 이용한 모달형 다이얼로그 확인 예제
※ 모달 대화 상자 생성 함수
DialogBox()
INT_PTR DialogBox(
HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
※ 폼 생성과 lpTemplate 설정
폼 아이디 → 고유 값
폼 아이디를 변환하는 매크로 함수 MAKEINTRESOURCE() → lpTemplate에 지정
※ 다이얼로그 프로시저
:: 일반 윈도우 메시지와 동일하다. 콜백 함수의 형식을 가진다(메세지에 따라 반응).
DLGPROC Dlgproc;
INT_PTR CALLBACK Dlgproc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
DialogProc과 WndProc 차이
- WndProc 메세지 처리 → DefWindowProc
- Dialog 메세지 처리 → TRUE, FALSE
※ EndDialog() 함수 호출
- 다이얼로그 해제되면서 부모 윈도우로 리턴해줄 수 있음. 이때 사용
BOOL EndDialog(
HWND hDlg,
INT_PTR nResult
);
nResult :: 부모 윈도우에게 전달되는 값(전역변수). 기본 값 = 0
→ 기본적인 해제 적용 방법? WM_CLOSE에서 EndDialog() 호출
Close 버튼과 OK 버튼, 취소 버튼 등을 누르면 EndDialog() 함수가 실행이 되면서 다이얼로그 창이 해제된다.
2. 모델리스형 다이얼로그
※ 생성 함수 CreateDialog
- 모달 다이얼로그를 생성하는 DialogBox 함수와 이름만 다를 뿐 매개변수는 똑같다.
HWND CreateDialog(
HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
※ 모달형과 폼 생성 방법은 동일하다.
주의할 사항은 폼 속성 중에 Visible을 True로 설정해야 한다는 것!
※ 해제 함수 DestroyWindow
BOOL DestroyWindow(HWND hWnd);
→ WM_CLOSE에서 호출한다.
3. 폼 기반의 윈도우 프로그램
:: WinMain()과 DialogBox() 호출 필요함
DialogBox(인스턴스, 다이얼로그 아이디, 0, 콜백함수) → 부모 윈도우 자리에 0
※ DialogProc 연결
※ 타이틀 바꾸기
1. 리소스 속성창에서 변경
2. SetWindowText()로 변경
4. 파일열기 모달형 다이얼로그
:: 파일경로, 파일명을 알아오는 기능, #include <commdlg.h>
※ 생성 함수 GetOpenFileName
BOOL GetOpenFileNameA(
LPOPENFILENAMEA lpofn
);
GetOpenFileName의 매개변수로는 OPENFILENAME이라는 구조체가 들어가며, 이 구조체 안에는 수많은 정보가 있다.
typedef struct tagOFN_NT4A {
DWORD lStructSize; //구조체 크기(몇 바이트 차지하는지)
HWND hwndOwner; //부모 윈도우 핸들
HINSTANCE hInstance;
LPCSTR lpstrFilter; //파일형식 설명 → \*.확장자\0 방식
LPSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex; //선택한 파일 인덱스, 1부터 시작
LPSTR lpstrFile; //전체 경로를 저장할 배열 설정. static 변수 또는 전역변수로 설정
DWORD nMaxFile; //파일경로 최대 길이 설정
LPSTR lpstrFileTitle; //파일명을 저장할 배열 설정. static 변수 또는 전역변수로 설정
DWORD nMaxFileTitle; //파일명 길이 지정
LPCSTR lpstrInitialDir;
LPCSTR lpstrTitle; //다이얼로그 타이틀 문자열 출력
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCSTR lpTemplateName;
} OPENFILENAME_NT4A, *LPOPENFILENAME_NT4A;
※ 파일 저장 모달형 다이얼로그
:: 파일 열기 모달형과 대부분 같다. #include <commdlg.h>
※ 생성 함수 GetSaveFileName
BOOL GetSaveFileName(
LPOPENFILENAMEA lpofn
);