CDhtmlDialog的粗浅使用

忘记了是从那里得来的Word了,本文非本人所写

要使用它,我们先创建一个类
class ChtmlDlg : public CDHtmlDialog
{
// 构造
public:
 ChtmlDlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据
 enum { IDD = IDD_HTML_DIALOG, IDH =IDR_HTML_HTML_DIALOG };

protected:
 virtual voidDoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

HRESULT OnButtonOK(IHTMLElement*pElement);
 HRESULT OnButtonCancel(IHTMLElement*pElement);
 HRESULT OnButtonShow(IHTMLElement*pElement);

// 实现
protected:
 HICON m_hIcon;     
 CString m_p4;
 CString m_txtVal;

// 生成的消息映射函数
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID,LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 DECLARE_MESSAGE_MAP()
 DECLARE_DHTML_EVENT_MAP()
};

构造函数   保证先调用父类的构造函数,其中IDH就是我们想要显示HTML页面。而IDD则是一个底层框。
这里要做的就是初始化各个变量
ChtmlDlg::ChtmlDlg(CWnd *pParent =NULL):CDhmtlDialog(ChtmlDlg::IDD,ChtmlDlg::IDH,pParent)
{
 m_hIcon =AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 m_p4 = _T("fu");
 m_txtVal = _T("InitialString");
}

接下来就是实现各个类函数。
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAMlParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
可由系统自动生成,先不必管。。 其实我也不会。

DECLARE_MESSAGE_MAP()

在.cpp文件中实现即可。与一般的view一样。
 BEGIN_MESSAGE_MAP(ChtmlDlg,CDHtmlDialog)
 ON_WM_SYSCOMMAND()
 //}}AFX_MSG_MAP
 END_MESSAGE_MAP()

本次的重头戏在于 DECLARE_DHTML_EVENT_MAP()这个宏的应用。它能将载入的HTML页面的元素

如:<inputtype="button" id="btnShow" />,并用类自身的函数与页面进行交互。

.cpp中加入宏组

 BEGIN_DHTML_EVENT_MAP(ChtmlDlg)
   DHTML_EVENT_ONCLICK(_T("btnShow"),OnButtonShow)//第一个参数是页面元素id,第二个是响应函
 END_DHTML_EVENT_MAP()

这样当点击btnShow这个按钮时就能触发OnButtonShow这个函数了,至于函数要干什么,这个随你便。

当然,还有需要别的宏来处理页面上的各种事件
 BEGIN_DHTML_EVENT_MAP(CmydhtmlDlg)
   DHTML_EVENT_ONCLICK(_T("ButtonOK"), OnButtonOK)
   DHTML_EVENT_ONCLICK(_T("ButtonCancel"), OnButtonCancel)
   DHTML_EVENT_ONCLICK(_T("Test1"), OnButtonTest1)
   DHTML_EVENT_ONCLICK(_T("Test2"), OnButtonTest2)
   DHTML_EVENT_ONCLICK(_T("Test3"), OnButtonTest3)
    DHTML_EVENT_ONCHANGE(_T("s1"),OnSelectTest1)
   DHTML_EVENT_ONMOUSEMOVE(_T("d1"), OnDivMouseMove1 )
   DHTML_EVENT_ONMOUSEOUT(_T("d1"), OnDivMouseOut1 )
END_DHTML_EVENT_MAP()
只需对应不同事件选择不同映射即可。

最后是页面的元素值的获取。可以使用与Dialog一样的机制进行绑定(关联),这里用到就是
   virtual voidDoDataExchange(CDataExchange* pDX);
实现如下
void ChtmlDlg::DoDataExchange(CDataExchange* pDX)
{
 CDHtmlDialog::DoDataExchange(pDX);

 DDX_DHtml_ElementInnerText(pDX,_T("p4"),m_p4);
 DDX_DHtml_ElementValue(pDX,_T("txtVal"),m_txtVal);
}
上面代码就是把成员函数m_p4绑定了页面id为p4的元素的innerText,而m_txtVal则是绑定了txtVal的Value。
要极度主意的是!!!!!!!当你手动修改页面元素如文本框的值时,m_txtVal不会马上变化,而是先要调用updateData函数。
第二个可能有点抽象,具体就是
页面存在<input type="text"id="txtVal" /> 它绑了m_txtVal。
这样就能通过修改text来改变m_txtVal的值。。。
但是怎么样才能通过修改m_txtVal的值来修改text的value呢???
答案就是UpdateData(FALSE);

这是我一点肤浅的认识。。。。对于那些宏的运行机制完全不懂。。。好吧,有空再看。。
在网上查了一天关于CHtmlView和CDhtmlDialog的应用,就这点收获了。虽然粗浅,但也算是学到点关于MFC与HTML页面
交互的知识了。

还有一种与页面交互的方式,我自己试却不行,主要是不能从元素中读取信息,其实是我不懂。。。
下面附上我主要参考的文章的地址。。。

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值