// 最新のPlatform SDK(2001.01)の定義によると。。。
// ShowHTMLDialog() の引数 pchOptionsの型は、TCHAR*ではなくWCHAR*が
// 正しいです。昔の定義やMSDN Libraryは間違っています。
//
// また、ShowModelessHTMLDialog() や CreateHTMLPropertyPage() といった
// APIも追加されている模様
//
// スクリプトでwindow.showModalDialog()を実行した場合と異なり、
// "-- Web ページ ダイアログ"という余分なタイトルは表示されません。
#include <comdef.h>
#include <Mshtmhst.h> // ShowHtmlDialog
#include "Module.h"
static HRESULT _ShowHTMLDialog(
HWND hwndParent,
IMoniker* pMk,
VARIANT* pvarArgIn = NULL,
// TCHAR* pchOptions = NULL, // Del sha '01.05.13
WCHAR* pchOptions = NULL, // Add sha '01.05.13
VARIANT* pvarArgOut = NULL)
{
HRESULT hr = S_OK;
try
{
CModule Module(_T("MSHTML.DLL"));
if (Module.GetHandle() == NULL)
{
return E_FAIL;
}
SHOWHTMLDIALOGFN* fnShowHTMLDialog =
(SHOWHTMLDIALOGFN*)Module.GetProcAddress(_T("ShowHTMLDialog"));
if (fnShowHTMLDialog == NULL)
{
return E_FAIL;
}
hr = (*fnShowHTMLDialog)(hwndParent, pMk, pvarArgIn, pchOptions, pvarArgOut);
if (FAILED(hr))
{
return hr;
}
}
catch (...)
{
return E_FAIL;
}
return hr;
}
static HRESULT ShowHTMLDialogFromURL(
HWND hwndParent,
LPCTSTR szURL,
VARIANT* pvarArgIn = NULL,
// TCHAR* pchOptions = NULL, // Del sha '01.05.13
WCHAR* pchOptions = NULL, // Add sha '01.05.13
VARIANT* pvarArgOut = NULL)
{
HRESULT hr = S_OK;
try
{
IMonikerPtr spMoniker;
hr = ::CreateURLMoniker(NULL, _bstr_t(szURL), &spMoniker);
if (FAILED(hr))
{
return hr;
}
hr = ::_ShowHTMLDialog(hwndParent, spMoniker, pvarArgIn, pchOptions, pvarArgOut);
if (FAILED(hr))
{
return hr;
}
}
catch (...)
{
return E_FAIL;
}
return hr;
}
---------- サンプル ----------
HRESULT hr = S_OK;
// pvarArgIn に、COMオブジェクトを入れてやり取りするのが、スマートでしょう。。。
WCHAR wszOptions[] = L"help:no; status:no; dialogWidth:460px; dialogHeight=320px";
hr = ::ShowHTMLDialogFromURL(m_hWnd, _T("http://www.kanabo.net/"), NULL, wszOptions, NULL);
if (FAILED(hr))
{
// エラーが発生
}