Win32/64ネットワーク開発 001 ATLを使ったブラウザ
概要
ATLで準備されているライブラリを使うと簡単に役に立ちそうもないブラウザが作れます。CSSやJavaScriptに対応していないので、だいたいのページが不完全な状態で表示される程度のものです。それでもイチカラ作るよりは楽。
手順
Windowsアプリの骨格についてはこちらで勉強して下さい。CreateWindow関数でメインウインドウは作ったとして、作成したメインウィンドウに対して、更にサブウィンドウを生成します。このサブウィンドウをブラウザのウィンドウとする感じです。自分の作ったWin32/64基本の説明でEditコントロールを埋め込みましたが、ここを変える感じです。WM_CREATEのメッセージが飛んで来たら、メインウィンドウが作られているので、WM_CREATEの中での処理を記述します。まずATLの初期化を行います。
AtlAxWinInit()
初期化は、基本の説明でもやったWNDCLLASS型のメンバ関数にウィンドウ作成に必要な情報を登録する作業によく似た処理です。
次にCreateWindowEx関数の第2引数、第3引数に
HWND HWNDie;
CComQIPtr<IWebBrowser2> CComQIPtr_IWebBrowser2_Br;
HWNDie = CreateWindow(
L"AtlAxWin140",//ウィンドウクラス名
L"Shell.Explorer.2",//ウィンドウタイトル名
WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,
hWnd, (HMENU)NULL, HINSTANCEinst, NULL);
を指定してウィンドウを作ります。Editコントロールを作成するときにEDITと指定したのとよく似ていることで、上記の指定でブラウザを持ったウィンドウが作られます。
CComPtr<IUnknown> CComPtr_IUnknown_func;
AtlAxGetControl(HWNDie, &CComPtr_IUnknown_func);
CComQIPtr_IWebBrowser2_Br = CComPtr_IUnknown_func;
と、意味不明なCComptrテンプレートのIUnknown型とか、CComQIPtrテンプレートのIWebBrowser2型とかを渡り歩きながら、AtlAxGetControl関数を使って、CComQIPtr_IWebBrowser2_Brのような形でポインタを受け取ります。そうするとCComQIPtr_IWebBrowser2_Brにはメンバ関数にGoHome(ホーム設定のURIに戻る命令)やNavigate(第一引数で指定したURLへ移動する命令), GoBack(ひとつ前のSiteに戻る), GoForward(戻ってきたときにやっぱり先のSiteに進む命令), Stop(通信の停止をする命令)のようなブラウザを操作する関数が結び付いた状態になります。他にもページを更新するメンバ関数Refresh()もありあす。
CComQIPtr_IWebBrowser2_Br->Refresh()といった関数の実行はボタンを押したり、メニューを選択したりしたときに動くようにコマンドの実行を送信するメッセージプロシージャ関数に組み込むのがよいでしょう。