ATL DHTML コントロールの変更
更新 : 2007 年 11 月
ATL コントロール ウィザードには、コントロールをビルドおよび実行できるように、初期コードが用意されています。それによって、プロジェクト ファイルの中でメソッドがどのように記述されているか、および DHTML がディスパッチ メソッドを使用してコントロールの C++ コードをどのように呼び出すかを確認できます。ディスパッチ メソッドをインターフェイスに追加し、HTML リソースでそのメソッドを呼び出すことができます。
ATL DHTML コントロールを変更するには
クラス ビューでコントロール プロジェクトを展開します。
末尾が "UI" のインターフェイスには、OnClick というメソッドが 1 つあります。末尾が "UI" でないインターフェイスには、メソッドがありません。
末尾が "UI" でないインターフェイスに MethodInvoked というメソッドを追加します。
このメソッドは、コンテナの対話のためにコントロール コンテナ内で使用されるインターフェイスに追加されます。コントロールとの対話のために DHTML によって使用されるインターフェイスには追加されません。コンテナだけがこのメソッドを呼び出すことができます。
スタブとして作成されたメソッドを .cpp ファイルで検索し、メッセージ ボックスを表示する次のようなコードを追加します。
::MessageBox(NULL, _T("I'm invoked"), _T("Your Container Message"), MB_OK);
HelloHTML という 2 番目のメソッドを、今回だけ末尾が "UI" のインターフェイスに追加します。スタブとして作成された HelloHTML メソッドを .cpp ファイルで検索し、メッセージ ボックスを表示する次のようなコードを追加します。
::MessageBox(NULL, _T("Here's your message"), _T("HelloHTML"), MB_OK);
末尾が "UI" でないインターフェイスに、3 番目のメソッド GoToURL を追加します。このメソッドは、次のように IWebBrowser2::Navigate を呼び出して実装します。
m_spBrowser->Navigate(CComBSTR(L"www.microsoft.com"), NULL, NULL, NULL, NULL);
.h ファイルには、ATL によって自動的に IWebBrowser2 インターフェイスへのポインタが追加されるため、このインターフェイスのメソッドを使うことができます。
次に、HTML リソースを変更して、作成したメソッドを呼び出します。これらのメソッドを呼び出すために 3 つのボタンを追加します。
HTML リソースを変更するには
ソリューション エクスプローラで .htm ファイルをダブルクリックして HTML リソースを表示します。
HTML (特に外部ウィンドウ ディスパッチ メソッドの呼び出し) について調べます。HTML はプロジェクトの OnClick メソッドを呼び出します。パラメータは、コントロール本体 (theBody) と割り当てられる色 ("red") を示します。メソッド呼び出しの後ろのテキストは、ボタンに表示されるラベルです。
色だけを変える OnClick メソッドを追加します。次に例を示します。
<br> <br> <BUTTON onclick='window.external.OnClick(theBody, "white");'>Refresh</BUTTON>
このメソッドは、Refresh というラベルのボタンを作成します。ユーザーがこのボタンをクリックすると、コントロールが元の白い背景に戻ります。
作成した HelloHTML メソッドへの呼び出しを追加します。次に例を示します。
<br> <br> <BUTTON onclick='window.external.HelloHTML();'>HelloHTML</BUTTON>
このメソッドは、HelloHTML というラベルのボタンを作成します。ユーザーがこのボタンをクリックすると、HelloHTML というメッセージ ボックスが表示されます。
これで、ビルドを行い、変更した ATL DHTML コントロールのテストを行うことができます。