대화 상자 구현

ATL 프로젝트에 대화 상자를 추가 하는 방법에 두 가지가: ATL 개체 마법사를 사용 하거나 수동으로 추가。

ATL 개체 마법사에서 대화 상자 추가

ATL 개체 마법사 (삽입 메뉴에서 새 ATL 개체 명령을)에서 왼쪽된 창에서 기타 범주를 강조 표시 한 다음 ATL 프로젝트에 대화 상자를 추가 하려면 오른쪽 창에서 Dialog 개체를 두 번 클릭 합니다. 적절 하 게 ATL 개체 마법사 속성 대화 상자의 채우고 확인을 클릭 합니다. ATL 개체 마법사 프로젝트를 CAxDialogImpl 에서 파생 된 클래스를 추가 하 고 대화 상자 템플릿 리소스 편집기를 엽니다.

메모nbsp;??대화 상자를 CAxDialogImpl 에서 파생 하는 경우 ActiveX 및 Windows 컨트롤을 호스팅할 수 있습니다. 대화 상자 클래스에 ActiveX 컨트롤 지원 오버 헤드를 원하지 않는 경우 CSimpleDialog 나 CDialogImpl 대신 사용(&N)。

메시지 및 이벤트 처리기를 클래스 뷰에서 대화 상자 클래스에 추가할 수 MFC 클래스와 같은 방식에 있습니다. 클래스 뷰, 클래스를 마우스 오른쪽 단추로 클릭 하 고 새 Windows 메시지 및 이벤트 처리기 대화 상자를 열려면 Windows 메시지 처리기 추가 선택 합니다. 자세한 내용은 메시지 처리기 추가 참조 하십시오.

대화 상자 템플릿에서 새 Windows 메시지 및 이벤트 처리기 대화 상자를 열려면 대화 상자 서식 파일에서 컨트롤을 마우스 오른쪽 단추로 클릭 하 고 바로 가기 메뉴에서 이벤트 명령을 선택 합니다. ATL 프로젝트에 대화 상자 클래스 클래스 또는 개체를 처리할 상자;에서 강조 표시 됩니다. 반면에, MFC 프로젝트에 대 한 컨트롤이 강조 표시 됩니다。

대화 상자에 수동으로 추가

구현 하는 대화 상자 창을 구현 하는 것과 비슷합니다. CAxDialogImpl, CDialogImpl또는 CSimpleDialog 에서 클래스를 파생 하 고 메시지를 처리 하도록 메시지 맵 을 선언 합니다. 그러나, 당신은 또한 파생된 클래스에 대화 상자 템플릿 리소스 ID를 지정 해야 합니다. 귀하의 클래스 라는 데이터 멤버가 있어야 합니다. IDD 이 가치를 개최。

메모nbsp;??ATL 개체 마법사를 사용 하 여 대화 상자를 만들 때 마법사를 자동으로 추가 하는 IDD 멤버는 열거형 형식으로(&N)。

CDialogImpl 을 사용 하면 모달 또는 모덜리스 대화 상자를 Windows 컨트롤을 호스팅하는 구현할 수 있습니다. CAxDialogImpl 를 사용 하면 모달 또는 모덜리스 대화 상자 ActiveX 및 Windows 컨트롤을 호스팅하는 구현할 수 있습니다.

모달 대화 상자를 만들려면 CDialogImpl의 인스턴스를 만들고-파생 (또는 CAxDialogImpl-파생) 클래스와 DoModal 메서드를 호출 합니다. 모달 대화 상자를 닫으려면 메시지 처리기에서 EndDialog 메서드를 호출 합니다. 모덜리스 대화 상자를 만들려면 DoModal대신 Create 메서드를 호출 합니다. 모덜리스 대화 상자를 파괴 하려면 DestroyWindow。

대화 상자 개체는 ActiveX 컨트롤을 포함 하는 경우 이러한 컨트롤의 이벤트를 처리 하는 조언 하 고 모든 ActiveX 컨트롤 인터페이스를 unadvise 필요가 있을 것 이다. 이 코드의 다음 줄을 추가 하 여 수행할 수 있습니다 귀하의 InitDialog 함수:

AtlAdviseSinkMap (pMyDlg, TRUE)

모든 ActiveX 컨트롤 unadvise를 코드의 다음 줄을 추가 귀하의 EndDialog 함수 (또는 대화 상자 개체의 종료에 따라 호출 하는 함수):

AtlAdviseSinkMap (pMyDlg, FALSE)

CWindowImpl처리기와 마찬가지로 대화 상자 메시지 처리기를 구현-클래스를 파생 합니다. 메시지 특정 반환 값 이면 반환으로 그것을 LRESULT . 반환 된 LRESULT 값은 ATL Windows 대화 관리자가 적절 한 처리에 매핑됩니다. 자세한 내용은 소스 코드에에서 대 한 참조 CDialogImplBaseT::DialogProc atlwin.h。

예제

대화 상자를 구현 하는 다음 클래스:

cMyDialog 클래스: 공용 CDialogImpllt;CMyDialog >,...
{
공개:
 ? enum {IDD = IDD_MYDIALOG};

BEGIN_MSG_MAP(CMyDialog)
 ???? MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog)
 ? END_MSG_MAP()

LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 ? {
 ???? / / 일부 초기화 코드
 ???? 반환 1;
 ? }
}

Index