HTMLダイアログを表示

ITraidentAPIを使用する方法はこちら
(2001.04.06)
// 最新の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))
{
    // エラーが発生
}
一覧に戻る
© 2003 WAC.com All Right Reserved.