4.4 모달(Modal) 대화상자와 모덜리스(Modeless) 대화상자
모달 대화상자
- 대화상자가 출력되면 애플리케이션 내의 다른 윈도우에서 작업할 수 없음
- 즉, 모달 대화상자를 닫아야 애플리케이션 내의 다른 윈도우에 포커스를 둘 수 있음
- 모달 대화상자는 DoModal() 함수를 이용하여 출력함
모덜리스 대화상자
- 모덜리스 대화상자를 종료하지 않아도 다른 윈도우에서 사용자 작업을 계속 수행할 수 있음
- 모덜리스 대화상자는 다음과 같은 과정을 거쳐 출력
CExDialogDlg m_Dlg;
m_Dlg.Create(IDD_EXDIALOG, this);
⇩
m_Dlg.ShowWindow(SW_SHOW);
- 출력할 대화상자 클래스에 대한 변수 선언
- Create() 함수를 사용하여 대화상자를 만듬
- 이때 첫 번째 파라미터는 대화상자의 ID
- 두 번째는 부모 윈도우의 포인터 (CWnd)를 넘겨줌
- 두 번째는 대화상자를 화면에 보여줘야 하므로 ShowWindow() 함수를 호출함
4.5 공용 대화상자
MFC에서는 대부분 애플리케이션에 들어가는 공통적인 대화상자들을 클래스로 만들어 놓았는데 이를 공용 대화상자라 한다.
(1) 파일 대화상자
- 파일의 열기, 저장, 다른 이름으로 저장의 동작을 할 때 사용되는 대화상자임
- 파일 대화상자는 CFileDialog 클래스로 정의되어 있는데 이를 사용하기 위해서 CFileDialog 클래스의 생성자 함수를 호출함
CFileDialog pDlg(TRUE);
pDlg.DoModal();
- 생성자 함수의 인수가 true일 때는 Open 대화상자로 지정되고, false일 때는 SaveAs 대화상자로 지정됨
- 그 다음에 DoModal() 함수를 이용하여 대화상자를 출력하게 됨
- 한 개의 파라미터만 주면 파일 형식에 대한 정의가 없음
- 이를 지정하기 위해서는 CFileDialog 클래스 생성자 함수에서 매개변수로 지정해줌
파라미터 | 설명 |
bOpenFileDialog | Open(TRUE)인지 Save(FALSE)인지를 나타냄 |
lpszDefExt | 확장자가 없는 파일명에 추가되어야 하는 파일 확장자 (디폴트 확장자) |
lpszFileName | 초기에 선택해야 하는 파일명 (디폴트 파일명) |
dwFlags | 보여질 파일의 속성을 지정하는 플래그 |
lpszFilter | 검색할 파일형태의 필터 |
pParentWnd | 부모 윈도우의 포인터 |
- Save 대화상자는 Open 대화상자의 동작과 매우 유사함
- 다른 점은 CFileDialog의 생성자 함수에 전달하는 인수가 다름
(2) 폰트 대화상자
- 주로 텍스트 기반의 애플리케이션에서 사용됨
- 텍스트의 글꼴이나 크기, 문자 속성 등을 지정할 수 있는 대화상자이며 해당 클래스는 CFontDialog임
CFontDialog fontDlg;
fontDlg.DoModal();
(3) 색상 대화상자
- 사용자에 의해 색을 선택하게 하는 공용 대화상자
- 해당 클래스는 CColorDialog
- DoModal() 함수를 통해 불러온 뒤 GetColor() 함수를 통해 선택된 색상 값을 저장하여 사용하면 됨
CColorDialog colorDlg;
if (colorDlg.DoModal() == IDOK)
{
COLORREF m_color = colorDlg.GetColor();
}
실습
Unity UI나 Java GUI, Python GUI 등 그동안 경험했던 UI들과 느낌이 비슷해서 금방 머리에 들어온다. 다른 점은 요소 하나에 함수 하나로 처리하고 있다는 점 정도인 듯하다. (아직까지는). Unity는 사실 엔진이라, 정말 쉽게 UI에 기능을 넣을 수 있었다. 요소의 위치도 피벗과 위치 값으로 조정할 수 있는데, MFC는 내가 아직 얼마 안해봐서 모르는건가? 손으로 위치 조정하는 게 어렵다. 잘 보면 삐뚤빼뚤하다. Java GUI는 판넬 위에 하나씩 올린다는 생각으로 하다보면 금방 익힐 수 있었고, 안드로이드와도 비슷해서 나중에 안드로이드 할 때 재밌게 했던 기억이 있다. 암튼 MFC도 재밌는 것 같아서 요즘 열심히 공부하고 있다. 이러다가 모든 언어 별로 UI 개발 할 것 같다........
'New > MFC 윈도우 프로그래밍' 카테고리의 다른 글
5. 도큐먼트 파일 입출력 및 템플릿 (2) (0) | 2024.12.29 |
---|---|
5. 도큐먼트 파일 입출력 및 템플릿 (1) (0) | 2024.12.19 |
4. 대화상자 (1) (0) | 2024.12.15 |
3. 메시지 처리 (3) (0) | 2024.12.14 |
3. 메시지 처리 (2) (0) | 2024.12.11 |