MODELESS 샘플: CDialog 개체를 모덜리스 대화 상자로 사용
업데이트: 2007년 11월
MODELESS 샘플에서는 MFC CDialog 개체를 모덜리스 대화 상자로 사용하는 방법을 보여 줍니다. MODELESS는 주 창의 목록 상자에 문자열을 추가하는 데 사용할 수 있는 모덜리스 대화 상자를 제공하면서 주 대화 상자의 목록 상자를 관리하는 간단한 대화 상자 기반 응용 프로그램입니다.
보안 정보: |
---|
이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다. |
샘플 및 이를 설치하기 위한 지침을 가져오려면
Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.
자세한 내용은 샘플 파일 찾기를 참조하십시오.
최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.
컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.
샘플 빌드 및 실행
MODELESS 샘플을 빌드하고 실행하려면
솔루션 파일인 modeless.sln을 엽니다.
빌드 메뉴에서 빌드를 클릭합니다.
디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다.
샘플이 시작되면 빈 목록 상자가 표시됩니다. Add를 클릭하여 모덜리스 대화 상자를 열 수 있습니다. Modeless Adder 대화 상자가 열려 있는 동안에도 주 대화 상자로 포커스를 이동할 수 있습니다. 모덜리스 대화 상자가 열려 있을 때는 주 대화 상자에 있는 Add 단추를 사용할 수 없으므로 사용자가 모덜리스 대화 상자의 인스턴스를 둘 이상 만들 수는 없습니다.
주 대화 상자의 CMainDlg 클래스는 모덜리스 대화 상자에 대한 포인터를 관리합니다. 이 기능은 단지 편의를 위한 것으로서, 일단 만들어진 모덜리스 대화 상자에는 추가 관리가 필요하지 않습니다. 응용 프로그램에서 모덜리스 상자 정보를 제공하기로 선택할 수 있습니다. 이 포인터를 통해 대화 상자를 관리하는 C++ 개체에 액세스할 수 있으므로 이 포인터는 시작하는 데 좋은 위치입니다.
주 대화 상자의 Add 단추에 대한 코드는 DoModal을 호출하는 대신 Create 함수를 사용하여 모덜리스 대화 상자를 만듭니다. 이렇게 하면 상자가 모덜리스 대화 상자가 됩니다. Windows에서는 이 상자에 대한 메시지를 다르게 처리합니다. 상자가 소멸될 때는 EndDialog가 사용되지 않고 대신 DestroyWindow가 호출됩니다. CDialog 개체의 일반적인 OnOk 및 OnCancel 멤버 함수는 EndDialog를 호출하므로 사용자의 모덜리스 대화 상자가 이 함수를 호출하지 않고 대신 이 함수를 재정의하여 DestroyWindow를 호출하는지 확인해야 합니다.
일반적으로 모달 대화 상자를 만들 때는 DoModal에서 반환한 후 수동으로 대화 상자를 소멸시킵니다. 모덜리스 대화 상자가 표시되어 있을 때는 Create에서 반환하기를 기다릴 수 없으므로 창과 관련된 C++ 개체를 소멸하기 위한 다른 메커니즘이 있어야 합니다. 이 샘플에서는 매우 간단한 메커니즘을 사용합니다. 즉, 대화 상자의 비클라이언트 영역이 소멸된 후 호출되는 함수인 PostNcDestroy에서 delete this를 수행합니다.
모덜리스 대화 상자는 부모 대화 상자와 두 가지 방식으로 통신합니다. 첫째, 사용자가 OK를 누를 때 모덜리스 대화 상자의 edit 컨트롤에 있는 문자열이 모달 대화 상자의 목록 상자 내용에 추가됩니다. 둘째, 사용자가 어떤 수단으로든 창을 소멸시킬 때 모덜리스 상자는 모달 창에서 BoxDone 함수를 호출합니다. 이 함수는 단지 모달 대화 상자에 대한 포인터를 다시 설정하고 Add 단추를 다시 활성화합니다.
키워드
이 샘플에서는 다음의 키워드를 보여 줍니다.
AfxGetApp, CDC::DrawIcon, CDC::GetSafeHdc, CDialog::Create, CDialog::DoModal, CDialog::OnCancel, CDialog::OnOK, CListBox::AddString, CMenu::AppendMenu, CMenu::ModifyMenu, CRect::Height, CRect::Width, CString::IsEmpty, CString::LoadString, CWinApp::InitInstance, CWinApp::LoadStdProfileSettings, CWnd::DestroyWindow, CWnd::DoDataExchange, CWnd::EnableWindow, CWnd::GetClientRect, CWnd::GetDlgItem, CWnd::GetWindowText, CWnd::IsIconic, CWnd::OnPaint, CWnd::OnQueryDragIcon, CWnd::OnSysCommand, CWnd::PostNcDestroy, CWnd::SendMessage, CWnd::SetActiveWindow, GetSystemMenu, GetSystemMetrics, LoadIcon
참고: |
---|
이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다. |