더북(TheBook)

5.2.6 대화 상자 화면에 나타내기

대화 상자를 화면에 나타나게 하는 코드는 항상 다음과 같은 형태를 갖는다. 대화 상자를 띄우기 위해서는 무조건 아래와 같은 코드를 입력한 후, if 문 안의 주석 부분을 수정하는 형태로 작업하는 것이 좋다.

#include "FileNewDlg.h"

CFileNewDlg dlg;
if (dlg.DoModal() == IDOK)
{
    // 확인 또는 OK 버튼을 클릭했을 때 처리
}

위 코드에서 먼저 대화 상자 클래스의 인스턴스 dlg를 선언하였고, CDialog 클래스의 멤버 함수인 DoModal() 함수를 이용하여 대화 상자를 화면에 나타나도록 하였다. DoModal 함수에 의해 대화 상자를 나타낸 경우, 대화 상자를 닫기 전까지는 원래 프로그램을 사용할 수 없다. 메뉴를 선택할 수도 없고, 제목 표시줄을 드래그하여 프로그램의 위치를 옮길 수도 없다. 대부분의 대화 상자는 [확인] 또는 [취소] 두 개의 버튼을 가지고 있으며, 사용자가 대화 상자에 정상적으로 값을 입력하여 프로그램을 실행시키기 원할 경우 [확인] 버튼을 누른다. 이때 DoModal() 함수가 종료되면서 IDOK라는 값을 반환하기 때문에, 앞의 코드에서는 if 문을 사용하여 IDOK가 반환되었는지를 확인하는 것이다. 만약 사용자가 [취소] 버튼을 클릭한 경우에는 IDOK 대신 IDCANCEL 값이 반환되어 if 문 블록 안으로 들어가지 않는다. 특정 대화 상자를 프로그램에서 사용하기 위해서는 해당 대화 상자 클래스를 정의한 헤더 파일을 반드시 포함(#include)해주어야 한다.

그러면 실제 ImageTool 프로그램에서 새로 만들기 대화 상자를 띄우는 코드를 작성해보자. ImageTool 프로그램을 실행하여 [파일] > [새로 만들기] 메뉴를 선택하면 자동으로 도큐먼트 클래스에 있는 OnNewDocument 함수가 실행된다. 그러므로 OnNewDocument 함수에 새로 만들기 대화 상자를 띄우는 코드를 추가해야 한다. OnNewDocument 함수에 추가할 내용은 소스 5-9에 나타내었다.

소스 5-9 새로 만들기 대화 상자를 이용한 영상 새로 만들기(ImageToolDoc.cpp)
#include "ImageToolDoc.h"
#include "FileNewDlg.h"BOOL CImageToolDoc::OnNewDocument()
  {
    if (!CDocument::OnNewDocument())
        return FALSE;

    BOOL ret = TRUE;
    CFileNewDlg dlg;
    if (dlg.DoModal() == IDOK)
    {
        if (dlg.m_nType == 0) // 그레이스케일 비트맵
            ret = m_Dib.CreateGrayBitmap(dlg.m_nWidth, dlg.m_nHeight);
        else // 트루컬러 비트맵
            ret = m_Dib.CreateRgbBitmap(dlg.m_nWidth, dlg.m_nHeight);
    }
    else
    {
            ret = FALSE;
  }

    return ret;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.