SUBEDIT 특성 샘플: 표준 Windows 컨트롤 슈퍼클래싱
업데이트: 2007년 11월
SUBEDIT 특성 샘플에서는 표준 Windows Edit 컨트롤을 슈퍼클래싱하는 ATL 컨트롤을 만드는 방법을 보여 줍니다.
SUBEDIT 샘플은 이 샘플의 특성을 사용하지 않는 버전입니다.
보안 정보: |
---|
이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다. |
샘플 및 이를 설치하기 위한 지침을 가져오려면
Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.
자세한 내용은 샘플 파일 찾기를 참조하십시오.
최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.
컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.
샘플 빌드 및 실행
이 샘플을 빌드하고 실행하려면
솔루션 파일인 SubEdit.sln을 엽니다.
빌드 메뉴에서 빌드를 클릭합니다.
샘플을 빌드한 후 웹 브라우저에서 AtlEdit.htm을 열고 컨트롤을 테스트합니다.
ActiveX Control Test Container에서 ATLEdit 클래스를 열어 컨트롤을 테스트할 수 있습니다. 테스트 컨테이너에 액세스하고 테스트 컨테이너를 사용하여 컨트롤을 테스트하는 데 대한 자세한 내용은 Test Container를 사용하여 속성 및 이벤트 테스트를 참조하십시오.
Windows 컨트롤 슈퍼클래싱
ATL에서는 표준 Windows 컨트롤을 슈퍼클래싱하는 컨트롤을 만들 수 있습니다. 슈퍼클래싱을 사용하면 기존 클래스를 기반으로 하지만 다른 창 프로시저를 사용하는 창 클래스를 만들 수 있습니다. 그런 다음에는 이 새 창 클래스를 기반으로 하는 창을 만들 수 있습니다. 컨트롤을 슈퍼클래싱할 때 메시지는 컨트롤의 원본 창 프로시저에 보내지기 전에 ATL 메시지 맵에 의해 먼저 처리됩니다. 따라서 표준 Windows 컨트롤의 기본 동작을 수정할 수 있습니다.
ATL 컨트롤 마법사를 사용하여 ActiveX 컨트롤을 만들 때는 표준 창 클래스 기반의 컨트롤을 추가할 수 있습니다. 이 경우, 마법사가 CContainedWindow 형식의 멤버 변수를 사용자의 ActiveX 컨트롤 클래스에 추가합니다. 그런 다음에는 CContainedWindow::Create가 사용자가 지정한 창 클래스를 슈퍼클래싱하는 창을 만듭니다. 이 창에서는 CContainedWindow::WindowProc을 사용하여 메시지 맵을 통해 메시지를 라우팅합니다. 메시지에 추가 처리가 필요하면 해당 메시지는 창 클래스의 원본 창 프로시저로 보내집니다.
샘플 코드(AtlEdit.h) 검사
CAtlEdit 클래스의 생성자는 m_bWindowOnly 멤버 변수를 TRUE로 설정합니다. 이렇게 하면 해당 컨트롤은 창 없는 컨트롤로 활성화되지 않습니다.
CContainedWindow 멤버 변수인 m_EditCtrl은 CAtlEdit 생성자에 의해 초기화됩니다. CContainedWindow 생성자는 세 개의 매개 변수, 즉 슈퍼클래싱할 창 클래스의 이름(이 경우, "EDIT"), 메시지 맵이 들어 있는 CAtlEdit 클래스에 대한 포인터, 그리고 m_EditCtrl의 메시지를 처리할 메시지 맵의 식별자를 사용합니다. 기본적으로 m_EditCtrl은 ALT_MSG_MAP 매크로를 사용하여 선언된 대체 메시지 맵을 사용합니다.
기본 메시지 맵은 CAtlEdit 컨트롤로 보내지는 WM_CREATE 및 WM_CTLCOLOREDIT 메시지의 처리기 함수 이름을 선언합니다. OnCreate 처리기는 CContainedWindow::Create를 호출하여 m_EditCtrl의 창을 만듭니다. 또한 OnCtlColorEdit 처리기는 m_EditCtrl의 새 배경색 및 텍스트 색을 지정합니다.
대체 메시지 맵은 m_EditCtrl로 보내지는 WM_CHAR 메시지의 처리기 함수를 선언합니다. 이 처리기에서는 기호나 숫자를 제외하고 문자만 받아들인 다음 Windows Edit 클래스에서 정의한 원본 창 프로시저에 WM_CHAR 메시지를 전달합니다.
특성
이 샘플에서는 다음의 특성을 사용합니다.
coclass, com_interface_entry, default, dual, emitidl, helpstring, implements_category, module, object, pointer_default, progid, registration_script, threading, uuid, version, vi_progid
키워드
이 샘플에서는 다음의 키워드를 사용합니다.
CComCoClass, CComControl, CComModule::GetClassObject, CComModule::GetLockCount, CComModule::Init, CComModule::RegisterServer, CComModule::Term, CComModule::UnregisterServer, CComObjectRoot, CContainedWindow::DefWindowProc, DisableThreadLibraryCalls, GetStockObject, GetWindowRect, IDataObjectImpl, IDispatchImpl, IOleControlImpl, IOleInPlaceActiveObjectImpl, IOleInPlaceObjectWindowlessImpl, IOleInPlaceObjectWindowlessImpl::SetObjectRects, IOleObjectImpl, IPersistStorageImpl, IPersistStreamInitImpl, IProvideClassInfo2Impl, IQuickActivateImpl, ISpecifyPropertyPagesImpl, IViewObjectExImpl, SetBkColor, SetTextColor, SetWindowPos
참고: |
---|
이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다. |