Created
April 29, 2025 03:28
-
-
Save bg1bgst333/079858e3ba723b389aa02fa31631091e to your computer and use it in GitHub Desktop.
CWebBrowserHost
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダのインクルード | |
// 既定のヘッダ | |
#include <stdio.h> // C標準入出力 | |
// 独自のヘッダ | |
#include "MainWindow.h" // CMainWindow | |
// ウィンドウクラス登録関数RegisterClass. | |
BOOL CMainWindow::RegisterClass(HINSTANCE hInstance) { | |
// ウィンドウクラス名は"CMainWindow". | |
return CWindow::RegisterClass(hInstance, _T("CMainWindow")); // CWindow::RegisterClassでウィンドウクラス名"CMainWindow"を登録. | |
} | |
// ウィンドウクラス登録関数RegisterClass.(メニュー名指定バージョン) | |
BOOL CMainWindow::RegisterClass(HINSTANCE hInstance, LPCTSTR lpctszMenuName) { | |
// メニュー名はlpctszMenuName. | |
return CWindow::RegisterClass(hInstance, _T("CMainWindow"), lpctszMenuName); // CWindow::RegisterClassで, ウィンドウクラス名"CMainWindow", メニュー名lpctszMenuNameを登録. | |
} | |
// ウィンドウクラス登録関数RegisterClass.(メニュー名, 色指定バージョン) | |
BOOL CMainWindow::RegisterClass(HINSTANCE hInstance, LPCTSTR lpctszMenuName, int i) { | |
// メニュー名はlpctszMenuName, 色はi. | |
return CWindow::RegisterClass(hInstance, _T("CMainWindow"), lpctszMenuName, i); // CWindow::RegisterClassで, ウィンドウクラス名"CMainWindow", メニュー名lpctszMenuName, 色はiを登録. | |
} | |
// コンストラクタCMainWindow() | |
CMainWindow::CMainWindow() { | |
// メンバの初期化. | |
m_pWebBrowserHost = NULL; // m_pWebBrowserHostをNULLで初期化. | |
} | |
// デストラクタ~CMainWindow() | |
CMainWindow::~CMainWindow() { | |
// メンバの終了処理. | |
Destroy(); // Destroyで子ウィンドウの破棄. | |
} | |
// ウィンドウ作成関数Create.(ウィンドウクラス名省略バージョン.) | |
BOOL CMainWindow::Create(LPCTSTR lpctszWindowName, DWORD dwStyle, int x, int y, int iWidth, int iHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance) { | |
// ウィンドウクラス名は"CMainWindow". | |
return CWindow::Create(_T("CMainWindow"), lpctszWindowName, dwStyle, x, y, iWidth, iHeight, hWndParent, hMenu, hInstance); // CWindow::Createにウィンドウクラス名"CMainWindow"を指定. | |
} | |
// ウィンドウ破棄関数Destroy | |
BOOL CMainWindow::Destroy() { | |
// 変数の初期化. | |
BOOL bRet = FALSE; // bRetをFALSEで初期化. | |
// DestroyChildrenを分けたので, 自身のウィンドウ破棄は問題ない. | |
// まず子ウィンドウの破棄. | |
DestroyChildren(); | |
// 自身のウィンドウ破棄. | |
bRet = CWindow::Destroy(); // 戻り値をbRetに格納. | |
// bRetを返す. | |
return bRet; | |
} | |
// 子ウィンドウ破棄関数DestroyChildren | |
BOOL CMainWindow::DestroyChildren() { | |
// 変数の初期化. | |
BOOL bRet = FALSE; // bRetをFALSEで初期化. | |
// ウェブブラウザホストの破棄. | |
if (m_pWebBrowserHost != NULL) { // NULLでなければ. | |
bRet = m_pWebBrowserHost->Destroy(); // m_pWebBrowserHost->Destroyでウィンドウを破棄. | |
delete m_pWebBrowserHost; // deleteでm_pWebBrowserHostを解放. | |
m_pWebBrowserHost = NULL; // NULLをセット. | |
} | |
// 破棄したらTRUEを返す. | |
if (bRet) { // TRUEなら. | |
return TRUE; // TRUEを返す. | |
} | |
// 破棄しなければ, CWindowのDestroyChildrenを返す. | |
return CWindow::DestroyChildren(); // CWindow::DestroyChildrenを返す. | |
} | |
// ウィンドウの作成が開始された時. | |
int CMainWindow::OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) { | |
// ウェブブラウザホストオブジェクトの作成. | |
m_pWebBrowserHost = new CWebBrowserHost(); // CWebBrowserHostオブジェクトの作成. | |
// ウェブブラウザホストのウィンドウ作成. | |
m_pWebBrowserHost->Create(_T(""), WS_BORDER, 50, 50, 320, 240, hwnd, (HMENU)(WM_APP + 1), lpCreateStruct->hInstance); // Createでウェブブラウザホストのウィンドウ作成. | |
// 親クラスのOnCreateを呼ぶ. | |
m_hInstance = lpCreateStruct->hInstance; | |
int iRet = CWindow::OnCreate(hwnd, lpCreateStruct); // CWindow::OnCreateを呼び, 戻り値を返す. | |
return iRet; | |
} | |
// ウィンドウが破棄された時. | |
void CMainWindow::OnDestroy() { | |
// CWindowのOnDestroyを呼ぶ. | |
CWindow::OnDestroy(); // CWindow::OnDestroyを呼ぶ. | |
} | |
// ウィンドウのサイズが変更された時. | |
void CMainWindow::OnSize(UINT nType, int cx, int cy) { | |
} | |
// ウィンドウが閉じられる時. | |
int CMainWindow::OnClose() { | |
// メッセージボックスで"Close CMainWindow OK?"と表示. | |
int iRet = MessageBox(m_hWnd, _T("Close CMainWindow OK?"), _T("CWebBrowserHost"), MB_OKCANCEL); // MessageBoxで"Close CMainWindow OK?"と表示し, 戻り値をiRetに格納. | |
if (iRet != IDOK) { // OK以外.(Cancelなど.) | |
return -1; // -1を返す. | |
} | |
// このウィンドウの破棄.(OnCloseの後, ウィンドウの破棄処理が勝手に行われるので, Destroyは不要なのでコメントアウト.) | |
//Destroy(); // Destroyでこのウィンドウの破棄処理. | |
// OKなので閉じる. | |
return CWindow::OnClose(); // 親クラスのOnCloseを呼ぶ.(親クラスのOnCloseは常に閉じる処理になっている.) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダのインクルード | |
// 独自のヘッダ | |
#include "WebBrowserHost.h" // CWebBrowserHost | |
// コンストラクタCWebBrowserHost | |
CWebBrowserHost::CWebBrowserHost() : CUserControl() { | |
// メンバの初期化 | |
m_pWebBrowser2 = NULL; // m_pWebBrowser2をNULLで初期化. | |
} | |
// デストラクタ~CWebBrowserHost | |
CWebBrowserHost::~CWebBrowserHost() { | |
} | |
// ウィンドウクラス登録関数RegisterClass.(ウィンドウクラス名省略バージョン.) | |
BOOL CWebBrowserHost::RegisterClass(HINSTANCE hInstance) { | |
// ウィンドウクラスの登録. | |
return CUserControl::RegisterClass(hInstance, _T("CWebBrowserHost")); // CUserControl::RegisterClassでウィンドウクラス名"CWebBrowserHost"を登録. | |
} | |
// ウィンドウクラス登録関数RegisterClass. | |
BOOL CWebBrowserHost::RegisterClass(HINSTANCE hInstance, LPCTSTR lpctszClassName) { | |
// ウィンドウクラス名にはlpctszClassNameを指定. | |
return CUserControl::RegisterClass(hInstance, lpctszClassName); // CUserControl::RegisterClassでウィンドウクラス名lpctszClassNameを登録. | |
} | |
// ウィンドウ作成関数Create.(ウィンドウクラス名省略バージョン.) | |
BOOL CWebBrowserHost::Create(LPCTSTR lpctszWindowName, DWORD dwStyle, int x, int y, int iWidth, int iHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance) { | |
// ウィンドウクラス名は"CWebBrowserHost". | |
return CUserControl::Create(_T("CWebBrowserHost"), lpctszWindowName, dwStyle | WS_CHILD | WS_VISIBLE, x, y, iWidth, iHeight, hWndParent, hMenu, hInstance); // CUserControl::Createにウィンドウクラス名"CWebBrowserHost"を指定. | |
} | |
// ウィンドウ作成関数Create. | |
BOOL CWebBrowserHost::Create(LPCTSTR lpctszClassName, LPCTSTR lpctszWindowName, DWORD dwStyle, int x, int y, int iWidth, int iHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance) { | |
// ウィンドウクラス名にはlpctszClassNameを指定. | |
return CUserControl::Create(lpctszClassName, lpctszWindowName, dwStyle | WS_CHILD | WS_VISIBLE, x, y, iWidth, iHeight, hWndParent, hMenu, hInstance); // CUserControl::Createにウィンドウクラス名lpctszClassNameを指定. | |
} | |
// ブラウザの初期化関数InitBrowser | |
BOOL CWebBrowserHost::InitBrowser() { | |
// IWebBrowser2ポインタを取得. | |
HRESULT hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pWebBrowser2)); // CoCreateInstanceでIWebBrowser2ポインタを取得. | |
if (FAILED(hr)) { // 失敗. | |
OutputDebugString(_T("IWebBrowser2 NG!\n")); // "IWebBrowser2 NG!"と出力. | |
return FALSE; // FALSEを返す. | |
} | |
OutputDebugString(_T("IWebBrowser2 OK!\n")); // "IWebBrowser2 OK!"と出力. | |
return TRUE; // TRUEを返す. | |
} | |
// ウィンドウ破棄関数Destroy | |
BOOL CWebBrowserHost::Destroy() { | |
// 親クラスのDestroyを呼ぶ. | |
return CUserControl::Destroy(); // CUserControl::Destroyを呼ぶ. | |
} | |
// ウィンドウの作成が開始された時. | |
int CWebBrowserHost::OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) { | |
// ブラウザ初期化. | |
BOOL bRet = InitBrowser(); // InitBrowserでブラウザ初期化. | |
if (!bRet) { // 失敗. | |
return -1; // -1を返す. | |
} | |
return 0; // 0を返すと, ウィンドウ作成に成功したということになる. | |
} | |
// ウィンドウが破棄された時. | |
void CWebBrowserHost::OnDestroy() { | |
// IWebBrowser2ポインタの破棄. | |
if (m_pWebBrowser2 != NULL) { // NULLでない. | |
m_pWebBrowser2->Release(); // Releaseで破棄. | |
m_pWebBrowser2 = NULL; // NULLをセット. | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 二重インクルード防止 | |
#ifndef __WEB_BROWSER_HOST_H__ | |
#define __WEB_BROWSER_HOST_H__ | |
// ヘッダのインクルード | |
// 既定のヘッダ | |
#include <shlobj.h> // シェルオブジェクト | |
// 独自のヘッダ | |
#include "UserControl.h" // CUserControl | |
// ウェブブラウザホストクラスCWebBrowserHost | |
class CWebBrowserHost : public CUserControl { | |
// privateメンバ | |
private: | |
// privateメンバ変数 | |
IWebBrowser2* m_pWebBrowser2; // IWebBrowser2ポインタm_pWebBrowser2 | |
// publicメンバ | |
public: | |
// publicメンバ関数 | |
// コンストラクタ・デストラクタ | |
CWebBrowserHost(); // コンストラクタCWebBrowserHost | |
virtual ~CWebBrowserHost(); // デストラクタ~CWebBrowserHost | |
// staticメンバ関数 | |
static BOOL RegisterClass(HINSTANCE hInstance); // ウィンドウクラス登録関数RegisterClass.(ウィンドウクラス名省略バージョン.) | |
static BOOL RegisterClass(HINSTANCE hInstance, LPCTSTR lpctszClassName); // ウィンドウクラス登録関数RegisterClass | |
// メンバ関数 | |
virtual BOOL Create(LPCTSTR lpctszWindowName, DWORD dwStyle, int x, int y, int iWidth, int iHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance); // ウィンドウ作成関数Create.(ウィンドウクラス名省略バージョン.) | |
virtual BOOL Create(LPCTSTR lpctszClassName, LPCTSTR lpctszWindowName, DWORD dwStyle, int x, int y, int iWidth, int iHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance); // ウィンドウ作成関数Create. | |
virtual BOOL InitBrowser(); // ブラウザの初期化関数InitBrowser | |
virtual BOOL Destroy(); // ウィンドウ破棄関数Destroy | |
virtual int OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct); // ウィンドウの作成が開始された時. | |
virtual void OnDestroy(); // ウィンドウが破棄された時. | |
}; | |
#endif |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダのインクルード | |
// 独自のヘッダ | |
#include "MainApplication.h" // CMainApplication | |
// _tWinMain関数の定義 | |
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) { | |
// 変数・オブジェクトの宣言・初期化. | |
CMainApplication app; // CMainApplicationオブジェクトapp. | |
HRESULT hr; // COMの初期化の結果を格納するhr. | |
TCHAR tszText[256] = { 0 }; // 表示するテキストtszText(長さ256)を{0}で初期化. | |
// OLEの初期化 | |
hr = OleInitialize(NULL); // OleInitializeにNULLを渡して初期化. | |
if (hr == S_OK) { // S_OKなら初期化成功. | |
_stprintf(tszText, _T("OleInitialize success!\n")); // "OleInitialize success!"をtszTextにセット. | |
OutputDebugString(tszText); // OutputDebugStringでtszTextを出力. | |
} | |
else if (hr == S_FALSE) { // S_FALSEならすでに初期化されている. | |
_stprintf(tszText, _T("Already initialized!\n")); // "Already initialized!"をtszTextにセット. | |
OutputDebugString(tszText); // OutputDebugStringでtszTextを出力. | |
} | |
else { // それ以外. | |
_stprintf(tszText, _T("Failed!\n")); // "Failed!"をtszTextにセット. | |
OutputDebugString(tszText); // OutputDebugStringでtszTextを出力. | |
return -1; // -1を返して異常終了. | |
} | |
// インスタンスの初期化. | |
if (!app.InitInstance(hInstance, lpCmdLine, nShowCmd)) { // app.InitInstanceがFALSEの場合. | |
// 異常終了. | |
app.ExitInstance(); // app.ExitInstanceで終了処理を実行. | |
// OLEの終了処理. | |
OleUninitialize(); // OleUninitializeで終了処理. | |
return -1; // returnで-1を返して異常終了. | |
} | |
// メッセージループ処理. | |
int iRet = app.Run(); // app.Runの戻り値をiRetに格納. | |
// OLEの終了処理. | |
OleUninitialize(); // OleUninitializeで終了処理. | |
return iRet; // iRetを返して終了. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment