• URL Moniker之CreateUrlMoniker的使用


    打算要看一下URL moniker的内容,先从基本的入手,下面是一个简单的使用URLmoniker的程序

        BOOL ShowHtml()
    {

    HINSTANCE hinstMSHTML = LoadLibrary(TEXT("MSHTML.DLL"));

    if (hinstMSHTML == NULL)
    {
    // Error loading module -- fail as securely as possible
    return FALSE;
    }

    SHOWHTMLDIALOGFN* pfnShowHTMLDialog;
    pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(hinstMSHTML,
    "ShowHTMLDialog");
    if (pfnShowHTMLDialog)
    {
    IMoniker *pURLMoniker;
    BSTR bstrURL = SysAllocString(L"http://www.example.com/dialogsource.htm");
    CreateURLMoniker(NULL, bstrURL, &pURLMoniker);

    if (pURLMoniker)
    {
    (*pfnShowHTMLDialog)(NULL, pURLMoniker, NULL, NULL, NULL);
    pURLMoniker->Release();
    }

    SysFreeString(bstrURL);
    }

    FreeLibrary(hinstMSHTML);
    return TRUE;
    }

    其中ShowHTMLDialog的函数原型如下:

    HRESULT ShowHTMLDialog(
    HWND hwndParent,
    IMoniker *pMk,
    VARIANT *pvarArgIn,
    LPWSTR pchOptions,
    VARIANT *pvarArgOut
    );

    第一个参数hwndParent是对话框的父窗体句柄,第二个参数pMk是要加载的html页面对应的Imoniker接口;第三个参数是传递的参数,可以通过window对象的dialogArguments 属性来获取;第四个参数的关于窗体的可选项,具体可以参考IHTMLWindow2::showModalDialog 方法,这个方法中对可选项有详细的说明;最后一个参数用于返回对话框的返回参数。msdn中有两个相关的代码如下:

    第一个html文件source.html

    <HTML>
    <HEAD>
    <SCRIPT>
    function fnLaunch()
    {
    var aForm;
    aForm
    = oForm.elements;
    var myObject = new Object();
    myObject.firstName
    = aForm.oFirstName.value;
    myObject.lastName
    = aForm.oLastName.value;
    // The object "myObject" is sent to the modal window.
    window.showModalDialog("modalDialogSource.htm", myObject, "dialogHeight:300px; dialogLeft:200px;");
    }
    </SCRIPT>
    </HEAD>
    <BODY>
    <BUTTON onclick="fnLaunch();" >Launch The Dialog</BUTTON>
    <FORM ID= "oForm">
    First Name:
    <INPUT TYPE="text" NAME="oFirstName" VALUE="Jane">
    <BR>
    Last Name:
    <INPUT TYPE="text" NAME="oLastName" VALUE="Smith">
    </FORM>
    </BODY>
    </HTML>

    第二个html文件target.html

    <HTML>
    <HEAD>
    <SCRIPT>
    var oMyObject = window.dialogArguments;
    var sFirstName = oMyObject.firstName;
    var sLastName = oMyObject.lastName;
    </SCRIPT>
    <title>Untitled</title>
    </head>
    <BODY STYLE="font-family: arial; font-size: 14pt; color: Snow;
    background-color: RosyBrown;"
    >

    First Name:
    <SPAN STYLE="color:00ff7f">
    <SCRIPT>
    document.write(sFirstName);
    </SCRIPT>
    </SPAN>
    <BR>
    Last Name:
    <SPAN STYLE="color:00ff7f">
    <SCRIPT>
    document.write(sLastName);
    </SCRIPT>
    </SPAN>
    </BODY>
    </HTML>

    上面两个文件主要通过js来调用window的showModalDialog函数来达到弹出对话框,并传递参数的作用。

    在上例中,给target传递的是一个object,我暂时不知道object对应到c++中得什么类型,所以为了简单起见,传递一个字符串作为输入参数,

    对应的html中得js调整如下:

    alert(window.dialogArguments.length);
    alert(window.dialogArguments.toString());

    window.returnValue = "hello world";

    我们将上面的C++代码进行修改,来达到相同的目的,通过C++代码弹出对话框,加载target.html,同时传递参数。

                IMoniker *pURLMoniker;
    BSTR bstrURL = SysAllocString(L"http://localhost/mylocalhost/windowTst/showwindowtst.html");
    CreateURLMoniker(NULL, bstrURL, &pURLMoniker);

    if (pURLMoniker)
    {
    CComVariant varin(L"abc");

    CComVariant varOut;

    (*pfnShowHTMLDialog)(m_hWnd, pURLMoniker, &varin, L"dialogHeight:300px; dialogLeft:200px;", &varOut);
    pURLMoniker->Release();
    }

    可以运行,并且varout可以获取到关闭后返回的字符串hello world。

    CreateUrlMoniker原型如下:

    HRESULT CreateURLMoniker(
    IMoniker *pMkCtx,
    LPCWSTR szURL,
    IMoniker **ppmk
    );

    第二个参数是要加载的url,第三个参数就是返回url对应的moniker, 如果第二参数是一个相对的url,那么第一个参数就是一个baseurl,pMkCtx和szurl合起来组成一个完成的URL。



  • 相关阅读:
    Typora上传图片设置
    SpringBoot入门详细教程
    vue
    我才学习到的严格模式(越往后看,越感觉复杂啊)
    js中三种定义变量的方式const, var, let的区别。
    冒泡
    tab切换
    日历
    jquery实现拖拽进度条并显示百分比的特效
    抽奖代码
  • 原文地址:https://www.cnblogs.com/kwliu/p/2200658.html
Copyright © 2020-2023  润新知