在MFC(Microsoft Foundation Classes)中,CDHtmlDialog 类的公共数据成员 m_spHtmlDoc 是一个智能指针,它指向与 HTML 对话框关联的 HTML 文档对象。

m_spHtmlDoc 是一个 CComPtr<IHTMLDocument2> 类型的智能指针,其中 IHTMLDocument2 是 HTML 文档对象的接口。通过使用这个指针,您可以访问 HTML 对话框中的文档对象,以便执行操作,如查询和修改文档的元素、执行脚本等。

以下是一个简单的示例,演示了如何在 CDHtmlDialog 类中使用 m_spHtmlDoc:
// MyHtmlDialog.h
#pragma once

#include "afxhtml.h"

class CMyHtmlDialog : public CDHtmlDialog
{
public:
    enum { IDD = IDD_MYHTMLDIALOG, IDH = IDR_HTML_MYHTMLDIALOG };

    CMyHtmlDialog(CWnd* pParent = nullptr);

    // Dialog Data
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_MYHTMLDIALOG };
    #endif

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    // Implementation
protected:
    DECLARE_MESSAGE_MAP()
public:
    virtual BOOL OnInitDialog();
    DECLARE_DHTML_EVENT_MAP()
};

// MyHtmlDialog.cpp
#include "stdafx.h"
#include "MyHtmlDialog.h"

// CMyHtmlDialog 对话框

IMPLEMENT_DYNAMIC(CMyHtmlDialog, CDHtmlDialog)

CMyHtmlDialog::CMyHtmlDialog(CWnd* pParent /*=nullptr*/)
    : CDHtmlDialog(CMyHtmlDialog::IDD, CMyHtmlDialog::IDH, pParent)
{
}

void CMyHtmlDialog::DoDataExchange(CDataExchange* pDX)
{
    CDHtmlDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMyHtmlDialog, CDHtmlDialog)
END_MESSAGE_MAP()

BEGIN_DHTML_EVENT_MAP(CMyHtmlDialog)
END_DHTML_EVENT_MAP()

BOOL CMyHtmlDialog::OnInitDialog()
{
    CDHtmlDialog::OnInitDialog();

    // 获取 HTML 文档对象接口
    m_spHtmlDoc = GetHtmlDocument();

    // 现在您可以使用 m_spHtmlDoc 来访问 HTML 文档对象
    // 例如:m_spHtmlDoc->getElementById(...)
    
    return TRUE;
}

在这个示例中,OnInitDialog 函数中使用 GetHtmlDocument 函数获取了 HTML 文档对象的接口,并将其存储在 m_spHtmlDoc 中。这样,您就可以使用 m_spHtmlDoc 来访问和操作 HTML 对话框中的文档对象。


转载请注明出处:http://www.zyzy.cn/article/detail/17314/MFC/CDHtmlDialog