인터넷에 있는 ActiveX 컨트롤

ActiveX 컨트롤은 OLE 컨트롤 사양의 업데이트 된 버전입니다.컨트롤은 다양 한 인터넷에서 COM 인식 웹 브라우저를 비롯 한 다른 컨테이너에서에서 사용할 수 있는 프로그래밍 가능한 소프트웨어 구성 요소 개발 하기 위한 기본 아키텍처입니다.ActiveX 컨트롤은 인터넷 컨트롤이 될 및 수 있는 액티브 문서에 기능을 추가 하거나 웹 페이지의 일부가 될.웹 페이지의 컨트롤 스크립트를 사용 하 여 서로 통신할 수 있습니다.

ActiveX 컨트롤을 인터넷에 국한 되지 않습니다.컨트롤 컨테이너에서 요구 하는 인터페이스를 지 원하는 모든 컨테이너에도 ActiveX 컨트롤을 사용할 수 있습니다.

ActiveX 컨트롤을 포함 하 여 여러 가지 장점이 있습니다.

  • 적은 이전 OLE 컨트롤에 비해 필요한 인터페이스입니다.

  • 창 없는 수 기능, 항상 내부 활성.

수 있는 ActiveX 컨트롤에 컨트롤을 해야 합니다.

  • 지원의 IUnknown 인터페이스입니다.

  • COM 개체를 수 있습니다.

  • 내보내기 메시지가DLLUnRegisterServer.

  • 기능에 필요한 추가 인터페이스를 지원 합니다.

컨트롤을 기존 인터넷 환경에 맞게 만들기

인터넷 환경에서 잘 작동 하는 컨트롤을 디자인 고려 사항, 비교적 낮은 전송 속도 인터넷이 필요 합니다.기존 컨트롤을 사용할 수 있습니다. 코드 크기를 작게 하 고 컨트롤 속성을 비동기적으로 다운로드 현재 취해야 하는 단계입니다.

컨트롤의 성능을 향상 시키려면 이러한 효율성 고려 사항에 대 한이 팁을 수행 하십시오.

  • 문서에서 설명 하는 기술을 구현 ActiveX 컨트롤: 최적화.

  • 컨트롤을 인스턴스화하는 방법을 고려해 야 합니다.

  • 않도록 비동기로 만듭니다. 다른 프로그램을 놓습니다.

  • 작은 블록으로 데이터를에서 다운로드 합니다.

    비트맵 또는 비디오 데이터와 같은 대규모 스트림을 다운로드할 때는 컨트롤의 데이터는 컨테이너와 협력에 비동기적으로 액세스 합니다.바 운 딩 작업 하는 다른 컨트롤과 데이터를 검색할 수 있습니다는 증분 또는 점진적인 방식으로 데이터를 검색 합니다.또한 코드도 비동기로 다운로드 될 수 있습니다.

  • 코드 및 속성은 백그라운드에서 다운로드 합니다.

  • 사용자 인터페이스 될 활성으로 최대한 빨리.

  • 고려 지속적 데이터를 저장 하는 방법을 모두 속성 및 대규모 데이터 Blob (비트맵 이미지 또는 비디오 데이터와 같은).

    상당량의 큰 비트맵 이나 AVI 파일과 같은 영구 데이터 컨트롤과 다운로드 방법을 주의 해야 합니다.문서 또는 페이지 최대한 빨리 드러날 하 고 컨트롤이 백그라운드에서 데이터를 검색 하는 동안 페이지와 상호 작용할 수 있도록 합니다.

  • 코드 크기와 런타임을 줄이는 효율적인 루틴을 작성 합니다.

    작은 단추 및 레이블 컨트롤을 영구 데이터의 몇 바이트만 인터넷 환경과 브라우저도 내부 작업에 적합.

  • 진행률을 컨테이너에 알리는 것이 좋습니다.

    사용자가 페이지와 상호 작용을 시작할 수 있는 시기 및 다운로드가 완료 되 면 포함 한 비동기 다운로드 진행의 컨테이너를 알립니다.(완료율 등) 컨테이너의 사용자에 게 진행률을 표시할 수 있습니다.

  • 얼마나 컨트롤이 클라이언트 컴퓨터에 등록 하는 것이 좋습니다.

ActiveX 컨트롤을 새로 만들기

응용 프로그램 마법사를 사용 하 여 새 컨트롤을 만들 때 비동기 모니커는 물론 다른 최적화를 지원 하도록 선택할 수 있습니다.컨트롤 속성을 비동기적으로 다운로드 지원을 추가 하려면 다음과이 같이 하십시오.

ActiveX 컨트롤 MFC 마법사를 사용 하 여 프로젝트를 만들려면

  1. 클릭 New 에 있는 파일 메뉴.

  2. 선택 ActiveX 컨트롤 마법사 MFC 에서 Visual C++ 프로젝트 및 프로젝트 이름을 지정 합니다.

  3. 제어 설정 페이지에서 비동기적으로 속성 로드.이 옵션을 선택 하면 준비 상태 속성과 준비 상태 변경 이벤트를 자동으로 설정 합니다.

    같은 여타 최적화도 선택할 수 있습니다 창 없는 활성화, 설명 된 ActiveX 컨트롤: 최적화.

  4. 선택 완료 프로젝트를 만듭니다.

Cdatapathproperty에서 파생 된 클래스를 만들려면

  1. 파생 된 클래스 만들기 CDataPathProperty.

  2. 각 컨트롤에 대해 헤더 파일을 포함 하는 소스 파일에 헤더 파일 앞에이 클래스를 추가 합니다.

  3. 이 클래스에서는 재정의 OnDataAvailable.데이터 표시를 위해 사용할 수 있을 때마다이 함수가 호출 됩니다.데이터를 사용할 수 있게 되 면, 예를 들어 점진적으로 렌더링 하 여 선택한 모든 방법으로 처리할 수 있습니다.

    다음 코드 부분은 점진적으로 편집 컨트롤에 데이터를 표시 하는 간단한 예입니다.참고 플래그를 사용 하는 BSCF_FIRSTDATANOTIFICATION 편집 컨트롤의 선택을 취소 합니다.

    void CMyDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
    {
        CListCtrl list_ctrl;
        CEdit* edit = list_ctrl.GetEditControl();
        if ((bscfFlag & BSCF_FIRSTDATANOTIFICATION) && edit->m_hWnd)
        {
            edit->SetSel(0, -1);
            edit->Clear();
        }
    
       if (dwSize > 0)
       {
          CString string;
          LPTSTR str = string.GetBuffer(dwSize);
          UINT nBytesRead = Read(str, dwSize);
          if (nBytesRead > 0)
          {
             string.ReleaseBuffer(nBytesRead);
             edit->SetSel(-1, -1);
             edit->ReplaceSel(string);
          }
       }
    }
    

    AFXCMN에 있어야 유의 하십시오입니다.H 사용 하 여 CListCtrl 클래스입니다.

  4. 컨트롤 전체를 상태 (예를 들어, 로드를 초기화 또는 대화형 사용자), 호출 바뀌면 COleControl::InternalSetReadyState.컨트롤 하나만 데이터 경로 속성이 있으면 코드를 추가할 수 있습니다 BSCF_LASTDATANOTIFICATION 컨테이너 다운로드가 완료 되었음을 알릴 수 있습니다.예를 들면 다음과 같습니다.

    if (bscfFlag & BSCF_LASTDATANOTIFICATION)
    {
       GetControl()->InternalSetReadyState(READYSTATE_COMPLETE);
    }
    
  5. OnProgress를 재정의합니다.OnProgress, 최대 범위를 나타내는 숫자 전달 됩니다 및 현재 다운로드가 함께 거리에 번호 표시 됩니다.완료율과 같은 상태를 표시 하려면 이러한 숫자를 사용할 수 있습니다.

다음 절차는 앞서 파생 시킨 클래스를 사용 하는 컨트롤에는 속성을 추가 합니다.

속성을 추가 하려면

  1. 클래스 뷰라이브러리 노드 아래에 있는 인터페이스를 마우스 오른쪽 단추로 클릭 하 고 선택 추가에서 다음 속성 추가.이 시작 되는 속성 추가 마법사.

  2. 속성 추가 마법사선택의 Set/Get 메서드 라디오 단추, 종류는 속성 이름, 예제, EditControlText, 및 선택 BSTR로는 속성 형식.

  3. 마침을 클릭합니다.

  4. 멤버 변수를 선언 하 여 CDataPathProperty-ActiveX 컨트롤 클래스에 파생 클래스입니다.

    CMyDataPathProperty EditControlText;
    
  5. 구현에서 Get/Set 방법입니다.에 대 한 가져오기, 문자열을 반환 합니다.에 대 한 Set, 속성 및 호출을 로드 SetModifiedFlag.

    BSTR CMFCActiveXControlCtrl::GetEditControlText(void)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       CString strResult;
       strResult = EditControlText.GetPath();   
       return strResult.AllocSysString();
    }
    
    void CMFCActiveXControlCtrl::SetEditControlText(LPCTSTR newVal)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       Load(newVal, EditControlText);
       SetModifiedFlag();
    }
    
  6. DoPropExchange에서 다음 줄을 추가:

    PX_DataPath(pPX, _T("DataPath"), EditControlText);
    
  7. 재정의 ResetData 이 줄을 추가 하 여 해당 컨트롤을 다시 설정 하는 속성을 알리기 위해:

    EditControlText.ResetData();
    

CDataPathProperty 또는 Ccacheddatapathproperty에서 파생 여부 결정

앞의 예제에서 컨트롤의 속성에서 파생 하는 단계를 설명 합니다. CDataPathProperty.실시간 데이터는 자주 변경 되 고를 하면 모든 데이터가 있지만 현재 값만 유지할 필요가 없습니다를 다운로드 하는 경우이 것이 좋습니다.예를 들어 주식 기호 컨트롤입니다.

파생할 수 있습니다 CCachedDataPathProperty.이 경우 다운로드 된 데이터는 메모리 파일에 캐시 됩니다.다운로드 한 모든 데이터를 유지 해야 하는 경우이 것이 좋습니다-예를 들어, 점진적으로 비트맵을 렌더링 하는 컨트롤입니다.이 경우 클래스 멤버 변수를 데이터가 있는 있습니다.

CMemFile m_Cache;

ActiveX 컨트롤 클래스를이 메모리 매핑된 파일을 사용할 수 있습니다 OnDraw 의 데이터를 표시 합니다.ActiveX 컨트롤에 CCachedDataPathProperty-파생 클래스 멤버 함수를 재정의 합니다. OnDataAvailable 기본 클래스 구현을 호출 하면 컨트롤을 무효화 하 고.

void CMyCachedDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
{
   CCachedDataPathProperty::OnDataAvailable(dwSize, bscfFlag);
   GetControl()->InvalidateControl();
}

ActiveX 컨트롤을 사용 하 여 비동기적으로 데이터 다운로드

네트워크를 통한 데이터 다운로드 비동기적으로 수행 해야 합니다.그렇게 하므로 많은 양의 데이터를 전송 하거나 연결 속도가 느린 경우 다운로드 프로세스가 클라이언트에서 다른 프로세스를 차단 하지 않습니다 경우입니다.

비동기 모니커는 네트워크를 통해 데이터를 비동기적으로 다운로드 하는 방법을 제공 합니다.비동기 모니커의 읽기 작업은 작업이 완료 되지 않았습니다 경우에 즉시를 반환 합니다.

예를 들어, 10 바이트만 사용할 수 있고 1k 파일에 읽기를 비동기적으로 호출 읽기 차단 되지 않습니다 있지만 현재 사용할 수 있는 10 바이트만 반환 합니다.

구현 하 여 비동기 모니커 를 사용 하는 CAsyncMonikerFile 클래스입니다.그러나 ActiveX 컨트롤을 사용할 수 있습니다에서 CDataPathProperty 에서 파생 된 클래스에서 CAsyncMonikerFile, 비동기 control 속성을 구현 하는 데 도움이 되는.

ASYNDOWN 샘플 타이머를 사용 하 여 데이터를 읽으려면 비동기 루프를 설정 하는 방법을 보여 줍니다.ASYNDOWN 기술 자료 문서 "HOWTO:: AsyncDown 보여 비동기 데이터 다운로드" (Q177244)에 자세히 설명 하 고 Microsoft 다운로드 센터에서 다운로드할 수 있습니다.(Microsoft 다운로드 센터에서 파일을 다운로드 하는 방법에 대 한 자세한 내용은 "얻을 Microsoft 지원 파일을 온라인 서비스 하는 방법" (Q119591) Microsoft 기술 자료 문서를 참고 하십시오.) 기술 자료 문서는 MSDN Library CD-ROM이나 https://support.microsoft.com/default.aspx에 있습니다.

타이머를 설정 하는 것이 ASYNDOWN에서 사용 하는 기본 기술을 CDataPathProperty::OnDataAvailable 데이터를 사용할 수 있을 때를 나타냅니다.타이머 메시지를 받으면 응용 프로그램 데이터 128 바이트 블록을 읽고 편집 컨트롤을 채웁니다.타이머 메시지를 처리할 때 데이터를 사용할 수 없는 경우 타이머가 해제 되어 있습니다.OnDataAvailable더 많은 데이터를 나중에 도착 하면 타이머를 설정 합니다.

웹 페이지에 컨트롤을 표시합니다.

개체 태그 및 웹 페이지에 컨트롤을 삽입 하는 특성의 예는 다음과 같습니다.

<OBJECT

CLASSID="clsid:FC25B780-75BE-11CF-8B01-444553540000"

CODEBASE="/ie/download/activex/iechart.ocx"

ID=chart1

WIDTH=400

HEIGHT=200

ALIGN=center

HSPACE=0

VSPACE=0

>

<PARAM NAME="BackColor" value="#ffffff">

<PARAM NAME="ForeColor" value="#0000ff">

<PARAM NAME="url" VALUE="/ie/controls/chart/mychart.txt">

</OBJECT>

ActiveX 컨트롤의 새로운 기능을 사용 하도록 기존 OLE 컨트롤 업데이트

OLE 컨트롤을 Visual C++ 4.2 이전 버전으로 만든 경우 성능을 개선 하 고 기능을 향상 하는 단계입니다.이러한 변경에 대 한 자세한 내용은 참조 하십시오. ActiveX 컨트롤: 최적화.

기존 컨트롤에 비동기 속성 지원을 추가 하는 경우 준비 상태 속성을 추가 해야 합니다 및 ReadyStateChange 이벤트 자신 합니다.컨트롤의 생성자에 추가 합니다.

m_lReadyState = READYSTATE_LOADING;

코드를 호출 하 여 다운로드 되는 준비 상태를 업데이트 합니다 COleControl::InternalSetReadyState.수를 호출 하 여 한 곳 InternalSetReadyState 에서 OnProgress 의 재정의 CDataPathProperty-클래스를 파생 합니다.

다음 단계에서 ActiveX 새 컨트롤 만들기.

참고 항목

개념

MFC 인터넷 프로그래밍 작업

MFC 인터넷 프로그래밍 기본 사항