창 없는 활성화 제공
창 생성 코드 (모든 사용자를 호출할 때 일어나는 것 CreateWindow)를 실행 하는 비용이 많이 듭니다.관리 되는 컨트롤은 화상 창에 창 메시지를 관리할 수 있습니다.따라서 창 없는 컨트롤이 windows 컨트롤 보다 빠릅니다.
창 없는 컨트롤의 장점은 창 있는 컨트롤과 달리 투명 한 그림 이나 사각형이 아닌 화면 영역 창 없는 컨트롤을 지원 한다는 점입니다.투명 컨트롤의 일반적인 예로 투명 한 배경 사용 하 여 텍스트 컨트롤입니다.컨트롤 그립니다 텍스트 있지만 배경, 무엇이 든 지 아래에 비쳐 보입니다.최신 폼 원형 단추와 화살과 같은 사각형이 아닌 컨트롤을 사용 하 여 자주 확인 하십시오.
대개 컨트롤 자체의 창이 필요 하지 않습니다, 컨테이너가 창 없는 개체를 지원 하기 위해 기록 된 경우에 해당 컨테이너의 창 서비스를 대신 사용할 수 있습니다.창 없는 컨트롤은 이전 버전과 호환 버전의 컨테이너입니다.창 없는 컨트롤을 지원 하도록 작성 되지 이전 컨테이너에 창이 활성 상태인 경우 창 없는 컨트롤을 만듭니다.
창 없는 컨트롤은 자체 하지 않았기 때문에 (가 창)는 컨테이너 컨트롤의 창에서 제공 된 서비스를 제공 하는 데 담당 합니다.예를 들어, 컨트롤이 키보드 포커스를 쿼리하거나, 마우스를 캡처하거나 디바이스 컨텍스트를 가져와야 하는 경우 이러한 작업은 컨테이너에 의해 관리 됩니다.사용자 입력된 메시지를 적절 한 창 없는 컨트롤에 창에 보낸 컨테이너 경로 사용 하는 IOleInPlaceObjectWindowless 인터페이스.(참조는 ActiveX SDK 에 대 한 설명은이 인터페이스에 대 한 합니다.) COleControl 멤버 함수는 컨테이너에서 이러한 서비스를 호출 합니다.
창 없는 활성화를 사용 하 여 컨트롤을 표시 하려면 해당 windowlessActivate 플래그를 반환 하는 플래그 집합을 COleControl::GetControlFlags.예를 들면 다음과 같습니다.
DWORD CMyAxOptCtrl::GetControlFlags()
{
DWORD dwFlags = COleControl::GetControlFlags();
...
// The control can activate without creating a window.
dwFlags |= windowlessActivate;
...
return dwFlags;
}
선택 하는 경우이 플래그를 포함 하는 코드를 자동으로 생성 되는 창 없는 활성화 옵션에 제어 설정 ActiveX MFC 컨트롤 마법사 페이지.
창 없는 활성화를 사용 하는 경우 입력된 메시지를 컨트롤의 컨테이너에 위임 하 게 IOleInPlaceObjectWindowless 인터페이스입니다.COleControl이 인터페이스의 구현을 좌표를 적당히 마우스를 조정한 후 컨트롤의 메시지 맵을 통해 메시지를 발송 합니다.메시지 맵에 해당 엔트리를 추가 하 여 메시지를 보통의 창 메시지 처럼 처리할 수 있습니다.처리기에서 이러한 메시지를 사용 하지 마십시오의 m_hWnd 멤버 변수를 사용 하는 멤버 함수가 해당 값이 아닌 첫 번째 확인 하지 않고 NULL.
COleControl마우스 캡처, 키보드 포커스, 스크롤, 및를 포함 하 여 다른 창 서비스 컨테이너를 적절 하 게 호출 하는 멤버 함수를 제공 합니다.
창 없는 컨트롤을 항상 사용 해야는 COleControl 멤버 함수는 해당 하는 대신 CWnd 멤버 함수 또는 해당 관련된 Win32 API 함수입니다.
창 없는 컨트롤은 OLE 끌어서 놓기 작업의 대상으로 할 수 있습니다.일반적으로 해당 컨트롤의 창이 끌어 놓기 대상으로 등록 함을이 있어야 합니다.컨테이너 컨트롤 자체의 창이 없으므로 자체 창을 놓기 대상으로 사용 합니다.구현 하는 컨트롤을 제공에서 IDropTarget 인터페이스에 컨테이너 위임할 수 있습니다 호출이 적절 한 시간에.컨테이너는이 인터페이스를 노출 하려면 재정의 COleControl::GetWindowlessDropTarget.예를 들면 다음과 같습니다.
IDropTarget* CMyAxOptCtrl::GetWindowlessDropTarget()
{
m_DropTarget.m_xDropTarget.AddRef();
return &m_DropTarget.m_xDropTarget;
}