インターネット上の ActiveX コントロール
ActiveX コントロールは、 OLE コントロール仕様の更新バージョンです。コントロールは、さまざまなコンテナーで使用できるインターネットの COM 対応の Web ブラウザーを含むプログラミング可能なソフトウェア コンポーネントを開発するための主要なアーキテクチャです。ActiveX コントロールは、インターネットのコントロールで、アクティブ ドキュメントに機能を追加したり、 Web ページの一部である場合があります。Web ページのコントロールは、スクリプトを使用して相互に通信できます。
ActiveX コントロールは、インターネットに限定されません。ActiveX コントロールは、すべてのコンテナーでコントロールがそのコンテナーで必要なインターフェイスをサポートするだけ使用できます。
ActiveX コントロールに次を含む複数の長所があります:
以前の OLE コントロールよりも少ない要求インターフェイス。
ウィンドウなしである機能と常に埋め込み先編集します。
ActiveX コントロールのために、コントロールは次の条件を満たしている:
IUnknown インターフェイスをサポートします。
COM オブジェクトです。
エクスポート DLLRegisterServer と DLLUnRegisterServer。
機能に必要なサポート追加のインターフェイス。
既存のコントロールをインターネットに合うようにします。
インターネットの環境で適切に動作するコントロールをデザインすると、インターネットの比較的少ない伝送速度に検討情報を必要とします。既存のコントロールを使用して; ただし、コード サイズが小さくなり、コントロール プロパティを非同期にダウンロードする必要な手順があります。
コントロールのパフォーマンスを向上させるために、効率の考慮事項のこれらのツール ヒントに従ってください:
技術情報 ActiveX コントロール: 最適化で説明した手法を実行します。
コントロールがどのようにインスタンス化されるかを検討します。
非同期にしてください; 他のプログラムを遅延させたりせずに、します。
小さなブロックのデータをダウンロードします。
ビットマップやビデオ データなどの大きなストリームをダウンロードした場合、コンテナーと連携してコントロール データを非同期にアクセスします。また、データの取得となる他のコントロールを協調的に使用するインクリメンタルや進行状況的なシステム データを取得します。コードは、非同期にダウンロードできます。
背景のダウンロードのコードとプロパティ。
できるだけ早くなったユーザーインターフェイスのアクティブ。
永続データが、プロパティと大きなデータのブロブどのように格納されるか検討してください (ビットマップ イメージなど)やビデオ データの両方)。
大量の永続データのコントロールは、大きいビットマップまたは AVI ファイルなど、メソッドのダウンロードに十分な注意が必要です。コントロールが背景のデータを取得する間、ドキュメントまたはページはできるだけ早く表示されるようにすることができ、ユーザーがページとやり取りできるようにします。
コードのサイズと実行時に固定するに効率的なルーチンを記述します。
永続データの一部のバイトだけを含む小さなボタンとラベル コントロールは、インターネットの環境の使用に適して、ブラウザー内に適しています。
進行状況を通信するコンテナーと見なします。
ユーザーがいつページとやり取りし始めることができる、ダウンロードが完了したか含む非同期ダウンロードの進行状況のコンテナーに通知します。コンテナーはユーザーに進行状況を完了したパーセント (など)を表示できます。
コントロールがクライアント コンピューターに登録されているかを検討します。
新しい ActiveX コントロールの作成
新しいコントロールをアプリケーション ウィザードを使用して作成すると、非同期モニカー、他の最適化のサポートを有効にすることを選択できます。ダウンロードのコントロール プロパティのサポートを非同期的に追加するには、次の手順を実行します。:
プロジェクトが MFC ActiveX コントロール ウィザードを使用して作成するには
ファイル のメニューのをクリック New 。
Visual C++ プロジェクトから選択 MFC ActiveX コントロール ウィザード はプロジェクトの名前を入力します。
Control Settings のページで、をクリック Loads properties asynchronously。このオプションを選択するための準備完了状態プロパティおよび準備状態の変更イベントを設定します。
ActiveX コントロール: 最適化で説明されている他の最適化を、 Windowless activationのような選択できます。
プロジェクトを作成するに 完了 を選択します。
CDataPathProperty から派生したクラスを作成するには
CDataPathPropertyから派生したクラスを作成します。
コントロールのヘッダー ファイルを含むソース ファイルにはそれぞれ、その前にこのクラスのヘッダー ファイルを追加します。
このクラスでは、 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); } } }
CListCtrl のクラスを使用するに AFXCMN.H を含める必要があることに注意してください。
コントロールの全体的な状態の変更 (たとえば、対話型読み込みから初期化されるへのユーザー)、呼び出し COleControl::InternalSetReadyState場合。コントロールが、 1 種類のデータ パスのプロパティだけある場合は、ダウンロードが完了したことをコンテナーに通知するために BSCF_LASTDATANOTIFICATION のコードを追加します。次に例を示します。
if (bscfFlag & BSCF_LASTDATANOTIFICATION) { GetControl()->InternalSetReadyState(READYSTATE_COMPLETE); }
OnProgress をオーバーライドします。OnProgressでは、どの程度現在のダウンロードに沿ってあるかを示すことが最大範囲と数示す数に渡されます。ユーザーに完了したパーセントの状態を表示するためにこれらの数を使用できます。
次の手順では、コントロールに限らず、から派生するクラスを使用するプロパティを追加します。
プロパティを追加するには
クラス ビューでは、ライブラリ ノードの下のインターフェイスを右クリックし、 追加、 プロパティの追加を選択します。これは プロパティ追加ウィザードを開始します。
プロパティ追加ウィザードでは、 Set/Get Methods のオプション ボタンをクリックし、 プロパティ名(O),プロパティ名、たとえば、 EditControlText を入力し、 Property typeとして BSTR を選択します。
[完了] をクリックします。
CDataPathPropertyのメンバー変数 - ActiveX コントロールのクラスの派生クラスを宣言します。
CMyDataPathProperty EditControlText;
Get/Set のメソッドを実装します。Get,取得の場合は、文字列を返します。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(); }
DoPropExchangeで、次の行を追加します:
PX_DataPath(pPX, _T("DataPath"), EditControlText);
この行の追加によってコントロールをリセットするに通知するプロパティをオーバーライド 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 コントロールは、非同期コントロール プロパティの実装を支援するために CAsyncMonikerFileから派生した CDataPathProperty のクラスを使用できます。
ASYNDOWN のサンプルはデータを読み取るために、タイマーを使用して非同期ループを設定する方法を示します。ASYNDOWN は、サポート技術情報の文書 「HOWTO で詳しく説明されています: AsyncDown は、非同期データのダウンロードを」 (Q177244)と、 Microsoft ダウンロード センターからダウンロードに使用できます。(ダウンロードに関する詳細については、 Microsoft ダウンロード センターから、 " 技術情報の 「Microsoft サポート技術情報のオンライン サービスからの Microsoft のサポート ファイルを」 () Q119591 取得する方法があります)。サポート技術情報の文書は、MSDN ライブラリ CD-ROM または https://support.microsoft.com/default.aspx で参照できます。
ASYNDOWN で使用される基本的な手法はデータが使用可能な場合に、表示する CDataPathProperty::OnDataAvailable タイマーを設定することです。タイマーのメッセージを受け取ると、アプリケーションは、 128 バイト ブロックを読み取り、エディット コントロールを塗りつぶします。タイマーのメッセージを処理するときにデータを使用できない場合、タイマーは表示されなくなります。OnDataAvailable はより多くのデータが遅れて場合はタイマーを発生させます。
Web ページにコントロールを表示
Web ページのコントロールを挿入するためのオブジェクト タグと属性の例を次に示します。
<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>
既存の OLE コントロールの新しい ActiveX コントロール機能を使用するように更新
OLE コントロールが 4.2 前に、 Visual C++ のバージョンで作成されている場合、パフォーマンスが向上し、機能を強化するために実行できる手順があります。これらの詳細な説明については ActiveX コントロール: 最適化の変更、 " " を参照してください。
既存のコントロールに非同期プロパティ サポートを追加する場合は、準備完了状態プロパティと ReadyStateChange のイベントを追加する必要があります。コントロールのコンストラクターでは、追加します:
m_lReadyState = READYSTATE_LOADING;
コードが COleControl::InternalSetReadyStateを呼び出して、ダウンロードできるように準備状態を更新します。、 InternalSetReadyState をダイヤルする可能性がある 1 か所は CDataPathPropertyの OnProgress のオーバーライドは、派生クラスからあります。
次に、 新しい ActiveX コントロールの作成の手順を実行します。