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();
}