본문 바로가기

JOB Tips/Windows Programming

ActiveX 컨트롤란?

ActiveX 컨트롤은 광범위한 OLE 기능을 지원하고 다양한 소프트웨어의 요구 사항에 맞게 사용자 지정할 수 있는 COM(Component Object Model) 기반의 다시 사용 가능한 소프트웨어 구성 요소입니다. ActiveX 컨트롤은 일반적인 ActiveX 컨트롤 컨테이너와 인터넷의 World Wide Web 웹 페이지 모두에 사용할 수 있도록 설계되었습니다. ActiveX 컨트롤은 여기에 설명된 MFC를 사용하거나 ATL(액티브 템플릿 라이브러리)을 사용하여 만들 수 있습니다.

ActiveX 컨트롤은 자신이 만든 창 안에 자신을 포함시킬 수 있으며, 마우스 클릭과 같은 이벤트에 응답하고, 자동화 개체의 속성 및 메서드와 비슷한 속성 및 메서드가 포함된 인터페이스를 통해 관리될 수 있습니다.

이러한 컨트롤은 데이터베이스 액세스, 데이터 모니터링 또는 그래프 그리기 등의 여러 가지 용도로 개발될 수 있습니다. ActiveX 컨트롤은 이식성 외에도, 기존 OLE 컨테이너와의 호환성이나 OLE 컨테이너 메뉴와 ActiveX 컨트롤 메뉴를 통합하는 기능과 같이 이전 ActiveX 컨트롤에는 없었던 기능도 지원합니다. 또한, ActiveX 컨트롤은 컨트롤 사용자가 호출할 수 있도록 읽기/쓰기 속성이나 메서드를 노출시키는 자동화 기능을 완벽하게 지원합니다.

창 없는 ActiveX 컨트롤과 활성화될 때만 창을 만드는 컨트롤을 만들 수도 있습니다. 창 없는 컨트롤을 사용하면 응용 프로그램의 화면 표시 속도가 빨라지며 투명한 컨트롤과 사각형이 아닌 컨트롤도 만들 수 있습니다. 또한 ActiveX 컨트롤 속성을 비동기적으로 로드할 수도 있습니다.

ActiveX 컨트롤은 모든 OLE 컨테이너에 사용할 수 있는 in-process 서버(대개 작은 개체)로서 구현됩니다. ActiveX 컨트롤의 전체 기능은 ActiveX 컨트롤을 인식할 수 있도록 설계된 OLE 컨테이너 내에서만 사용할 수 있습니다. ActiveX 컨트롤을 지원하는 컨테이너의 목록은 ActiveX 컨트롤을 다른 응용 프로그램에서 사용을 참조하십시오. 이러한 컨테이너 형식(이하, "컨트롤 컨테이너"라고 함)은 ActiveX 컨트롤의 속성과 메서드를 사용하여 해당 컨트롤을 작동시킬 수 있으며, 이벤트 형식으로 ActiveX 컨트롤로부터 알림을 받습니다. 다음 그림은 이러한 상호 작용을 보여 줍니다.

ActiveX 컨트롤 컨테이너와 창 있는 ActiveX 컨트롤 간의 상호 작용

ActiveX 컨트롤 최적화에 대한 최신 내용은 MFC ActiveX 컨트롤: 최적화를 참조하십시오.

MFC ActiveX 컨트롤을 만들려면 ActiveX 컨트롤 프로젝트 만들기를 참조하십시오.

자세한 내용은 다음을 참조하십시오.

ActiveX 컨트롤의 기본 구성 요소

ActiveX 컨트롤은 컨트롤 컨테이너 및 사용자와의 효과적인 상호 작용을 위해 몇 가지 프로그래밍 요소를 사용합니다. 여기에는 COleControl 클래스, 이벤트 발생 함수 및 디스패치 맵이 포함됩니다.

사용자가 개발하는 모든 ActiveX 컨트롤 개체는 ActiveX 컨트롤 개체의 MFC 기본 클래스인 COleControl로부터 여러 가지 강력한 기능을 상속받습니다. 이러한 기능에는 현재 위치에서 활성화 및 자동화 논리가 포함됩니다. COleControl은 MFC 창 개체와 같은 기능 및 이벤트 발생 기능을 가진 컨트롤 개체를 제공합니다. 또한 COleControl은 창에서 제공하는 일부 기능(마우스 캡처, 키보드 포커스, 스크롤 등)을 컨테이너의 도움을 받아야만 구현할 수 있지만 화면 표시는 훨씬 빠른 창 없는 컨트롤도 제공합니다.

ActiveX 컨트롤 클래스는 COleControl에서 파생되기 때문에 특정 조건이 만족될 때 컨트롤 컨테이너에 메시지(이벤트라고 함)를 보내거나 "발생"시키는 기능을 상속받습니다. 이러한 이벤트는 컨트롤에 중요한 사항이 발생할 때 이를 컨트롤 컨테이너에 알리는 데 사용됩니다. 또한 이벤트에 매개 변수를 첨부하면 이벤트에 대한 추가 정보를 컨트롤 컨테이너에 보낼 수 있습니다. ActiveX 컨트롤 이벤트에 대한 자세한 내용은 MFC ActiveX 컨트롤: 이벤트를 참조하십시오.

마지막 요소인 디스패치 맵은 함수(메서드라고 함) 및 특성(속성이라고 함) 집합을 컨트롤 사용자에게 노출시키는 데 사용됩니다. 속성을 사용하면 컨트롤 컨테이너 또는 컨트롤 사용자가 컨트롤을 여러 가지 방식으로 조작할 수 있도록 합니다. 사용자는 컨트롤의 모양 또는 컨트롤의 특정 값을 변경하거나, 컨트롤이 관리하는 특정 데이터 부분에 액세스하는 등 컨트롤에 대한 요청을 할 수 있습니다. 이 인터페이스는 컨트롤 개발자에 의해 결정되며 클래스 뷰에서 정의할 수 있습니다. ActiveX 컨트롤 메서드와 속성에 대한 자세한 내용은 MFC ActiveX 컨트롤: 메서드속성 문서를 참조하십시오.

창 있는 컨트롤과 ActiveX 컨트롤 컨테이너 간의 상호 작용

컨트롤 컨테이너 내에서 컨트롤이 사용될 때 컨트롤은 속성과 메서드를 노출시키는 메커니즘과 이벤트를 발생시키는 메커니즘을 사용하여 컨트롤 컨테이너와 통신합니다. 다음 그림은 이 두 가지 메커니즘의 구현 방식을 보여 줍니다.

ActiveX 컨트롤 컨테이너와 ActiveX 컨트롤 간의 통신

위의 그림은 다른 OLE 인터페이스(자동화 및 이벤트 포함)가 컨트롤에 의해 처리되는 방식도 보여 줍니다.

컨트롤과 컨트롤 컨테이너 간의 모든 통신은 COleControl에 의해 수행됩니다. COleControl은 컨트롤 컨테이너의 일부 요청을 처리하기 위해 컨트롤 클래스에 구현된 멤버 함수를 호출합니다. 모든 메서드와 일부 속성은 이러한 방식으로 처리됩니다. 또한 컨트롤 클래스는 COleControl의 멤버 함수를 호출하여 컨테이너와의 통신을 시작할 수도 있습니다. 이벤트는 이러한 방식으로 발생됩니다.

ActiveX 컨트롤의 활성 및 비활성 상태

컨트롤에는 활성 상태와 비활성 상태라는 두 가지 기본 상태가 있습니다. 일반적으로 이러한 상태는 컨트롤에 창이 있는지 여부에 따라 구분됩니다. 활성 컨트롤에는 창이 있으며 비활성 컨트롤에는 창이 없습니다. 창 없는 활성화가 도입되면서 이러한 구분이 더 이상 일반적인 것은 아니지만 아직도 많은 컨트롤에 이러한 구분이 적용됩니다.

창 없는 컨트롤이 활성화되면 해당 컨트롤은 컨트롤 컨테이너에서 마우스 캡처, 키보드 포커스, 스크롤 및 다른 창 서비스를 호출합니다. 비활성 컨트롤에 대해 마우스 상호 작용을 제공할 수 있으며 활성화될 때까지 기다렸다가 창을 만드는 컨트롤도 만들 수 있습니다.

창이 있는 컨트롤이 활성화되면 해당 컨트롤은 컨트롤 컨테이너, 컨트롤 사용자 및 Windows와 완벽하게 상호 작용할 수 있습니다. 다음 그림은 ActiveX 컨트롤, 컨트롤 컨테이너 및 운영 체제 간의 통신 방식을 보여 줍니다.

창 있는 ActiveX 컨트롤의 Windows 메시지 처리(활성화 시)

Serialization

데이터에 대한 serialization 기능(지속성이라고도 함)을 사용하면 컨트롤이 해당 속성 값을 영구 저장소에 쓸 수 있습니다. 그런 다음 해당 저장소에서 개체의 상태를 읽어 컨트롤을 다시 만들 수 있습니다.

그러나 컨트롤은 저장소 매체에 대한 액세스 권한을 얻을 수 없습니다. 대신 해당 컨트롤의 컨테이너가 적당한 시기에 사용할 저장소 매체를 컨트롤에 제공합니다. serialization에 대한 자세한 내용은 MFC ActiveX 컨트롤: Serializing 문서를 참조하십시오. serialization 최적화에 대한 자세한 내용은 ActiveX 컨트롤: 최적화의 지속성 및 초기화 최적화를 참조하십시오.

ActiveX 컨트롤 클래스 및 도구 설치

Visual C++를 설치할 때 설치할 항목에 ActiveX 컨트롤이 선택되어 있으면(기본적으로 선택됨) MFC ActiveX 컨트롤 클래스와 정식 버전 및 디버그 버전의 ActiveX 컨트롤 런타임 DLL이 자동으로 설치됩니다.

ActiveX 컨트롤 클래스 및 도구는 기본적으로 다음과 같이 \Program Files\Microsoft Visual Studio .NET의 하위 디렉터리에 설치됩니다.

  • \Common7\Tools

    Test Container 파일(TstCon32.exe와 해당 도움말 파일)이 들어 있습니다.

  • \Vc7\atlmfc\include

    MFC를 사용하여 ActiveX 컨트롤을 개발하는 데 필요한 포함 파일이 들어 있습니다.

  • \Vc7\atlmfc\src\mfc

    MFC로 작성된 특정 ActiveX 컨트롤 클래스의 소스 코드가 들어 있습니다.

  • \Vc7\atlmfc\lib

    MFC를 사용하여 ActiveX 컨트롤을 개발하는 데 필요한 라이브러리가 들어 있습니다.

또한 MFC ActiveX 컨트롤 샘플도 들어 있습니다. 이 샘플에 대한 자세한 내용은 컨트롤 샘플: MFC 기반 ActiveX 컨트롤을 참조하십시오.

http://cafe.naver.com/crazysystem/192