IEコンポーネント

ちょっとIEコンポーネントではまったのでメモを残します。
Main.cpp

#include	"windows.h"
#include	<atlbase.h>
#include	<atlcom.h>
#include	<atlhost.h>

CComModule _Module;

BEGIN_OBJECT_MAP(ObjectMap)
END_OBJECT_MAP()

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
#define	PROC_NAME	L"WebViewProc"

HINSTANCE	hInst;
//----------------------------------------------------------------
//
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow )
{
	HWND hWnd;
	MSG msg;
	WNDCLASS myProg;
	hInst	= hInstance;
	if (!hPreInst) {
		myProg.style		= CS_HREDRAW | CS_VREDRAW;
		myProg.lpfnWndProc		= WndProc;
		myProg.cbClsExtra		= 0;
		myProg.cbWndExtra		= 0;
		myProg.hInstance		= hInstance;
		myProg.hIcon		= NULL;
		myProg.hCursor		= LoadCursor(NULL, IDC_ARROW);
		myProg.hbrBackground	= NULL;	//IDR_MENU
		myProg.lpszMenuName	= NULL;
		myProg.lpszClassName	= PROC_NAME;
		
		if (!RegisterClass(&myProg))
			return FALSE;
	}
	hWnd = CreateWindow( PROC_NAME,
		L"View Test",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL);
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);
	do{
		if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	} while(msg.message != WM_QUIT);
	return (int)( msg.wParam );
}

//----------------------------------------------------------------
//
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
	static	HWND	hIE;
	static	CComQIPtr<IWebBrowser2>	pWB2 ;

	switch ( msg ) {
	case WM_SIZE:
		MoveWindow( hIE, 0, 0, LOWORD(lParam), HIWORD(lParam) , FALSE) ;
		break;
	case WM_CREATE:
		{
			_Module.Init(ObjectMap, hInst);
			AtlAxWinInit();
			hIE		= CreateWindow( L"AtlAxWin80", L"Shell.Explorer.2", 
							WS_CHILD|WS_VISIBLE, 
							0, 0, 100, 100, 
							hwnd, (HMENU)0, hInst, NULL);
			// ActiveXコントロールのインターフェースを要求
			CComPtr<IUnknown>	 punkIE;
			if (AtlAxGetControl(hIE, &punkIE) == S_OK){
				pWB2 = punkIE;
				LPWSTR	pszBuf	= L"http://www.yahoo.co.jp/";
				CComVariant vempty, vUrl(pszBuf);
				pWB2->Navigate2 (&vUrl, &vempty, &vempty, &vempty, &vempty );				
			}
		}
		break;
	case WM_DESTROY:
		PostQuitMessage( 0 );
		break;
	default:
		return(DefWindowProc( hwnd, msg, wParam, lParam ));
	}
	return (0L);
}

■ますは使用するヘッダーやら、なにやらを、足します

#include	<atlbase.h>
#include	<atlcom.h>
#include	<atlhost.h>

CComModule _Module;

BEGIN_OBJECT_MAP(ObjectMap)
END_OBJECT_MAP()

■ライブラリの初期化

_Module.Init(ObjectMap, hInst);
AtlAxWinInit();

IEコンポーネントを作ります

hIE		= CreateWindow( L"AtlAxWin80", L"Shell.Explorer.2", 
				WS_CHILD|WS_VISIBLE, 
				0, 0, 100, 100, 
				hwnd, (HMENU)0, hInst, NULL);

VS2005 なので L"AtlAxWin80"を設定
VS2003.net では"AtlAxWin71" 、それ以前の環境であれば "AtlAxWin"にしてください。

■URL設定

CComPtr<IUnknown>	 punkIE;
if (AtlAxGetControl(hIE, &punkIE) == S_OK){
	pWB2 = punkIE;
	LPWSTR	pszBuf	= L"http://www.yahoo.co.jp/";
	CComVariant vempty, vUrl(pszBuf);
	pWB2->Navigate2 (&vUrl, &vempty, &vempty, &vempty, &vempty );				
}

もしホームURLに設定したいのであれば

CComPtr<IUnknown>	 punkIE;
if (AtlAxGetControl(hIE, &punkIE) == S_OK){
	pWB2 = punkIE;
	pWB2->GoHome();
}