最新的Visual C++.NET支持WEB对话框,它提供两个MFC类:CDHtmlDialog和CMultiPageDHtmlDialog用来创建基于动态HTML页面的对话框
三、WEB对话框编程
WEB对话框给了我们一个新的设置WEB应用程序的设计理念,它使得我们可以利用动态HTML的性能去优化和丰富我们的桌面程序。这里就WEB对话框中关于HTML元素的事件映射和数据交换(DDX机制)作阐述,这也是WEB对话框编程的核心内容。
1、HTML元素的事件映射
对于熟悉VC++6.0的用户来说,使用功能强大的ClassWizard可以对某个类添加某个对象(窗口、控件)的消息映射函数,而对于控件来说,可以映射其不同的通知消息,并且这个映射的过程一般是自动完成的。
与控件相类似,HTML元素的事件映射也可添加在WEB对话框类中,只不过需要手动进行。例如,下面就是为WEB对话框(设类为CMyDlg)中的一个按钮元素<input id=Button1 type=button value=Button>添加onClick(单击)的事件处理过程:
(1) 打开WEB对话框类CMyDlg文件MyDlg.cpp,在文件的前面找到BEGIN_DHTML_EVENT_MAP(CMyDlg)与END_DHTML_EVENT_MAP()之间的程序段,然后添加下列代码:
DHTML_EVENT_ONCLICK(_T("Button1"),OnButton1)
DHTML_EVENT_ONCLICK是一个事件处理宏,第一个参数是用来指定WEB对话框中HTML元素的ID名称,第二个参数是映射该事件的函数名称,注意上句代码后面没有";"号。
(2) 打开头文件MyDlg.h,在图10的位置处添加下列代码:
HRESULT OnButton1(IHTMLElement *pElement);
实际上,IHTMLElement是HTML元素的通用接口,用来调用其方法来获取和设置相关属性。所有元素的事件的映射函数都具有与上述函数相类似的格式。
(3) 再切换到MyDlg.cpp窗口,在程序的最后添加下列代码:
HRESULT CMyDlg::OnButton1(IHTMLElement* /*pElement*/) { MessageBox("你好!");
return S_OK; // return TRUE unless you set the focus to a control }
|
(4) 这样就可以运行了,当用户单击Button时,就弹出一个"你好!"对话框。
除了DHTML_EVENT_ONCLICK,Visual C++.NET还提供了超过三十个这样的事件映射宏,在VC++.NET的MSDN中键入DHTML_EVENT关键词就可以查到,这里不再重复。
2、数据交换(DDX)
DDX/DDV机制曾为程序员带来了许多方便,它将某个变量和某个控件相关联起来,通过UpdateData使变量的值传送到控件中(参数为FALSE)或将控件中的值保存到变量中(参数为TRUE)。
同样在WEB对话框中仍然可以使用DDX技术。例如,下面就是为WEB对话框CMyDlg添加一个单行文本元素<input id=Text1 type=text value=Text1>,然后用m_strEdit的CString变量将其关联起来:
(1) 打开MyDlg.h文件,在类中添加一个成员变量:
CString m_strEdit;
(2) 打开MyDlg.cpp文件,然后添加下面的代码:
DDX_DHtml_ElementText(pDX,_T("Text1"),DISPID_A_VALUE ,m_strEdit);
这样就将m_strEdit和该元素的值关联起来了。
(3) 在CMyDlg::OnInitDialog中添加下列代码:
BOOL CMyDlg::OnInitDialog() { CDHtmlDialog::OnInitDialog(); m_strEdit="Hello"; UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control }
|
(4) 将CMyDlg::OnButton1的代码改成:
HRESULT CMyDlg::OnButton1(IHTMLElement* /*pElement*/) { UpdateData(TRUE);
MessageBox(m_strEdit); return S_OK; // return TRUE unless you set the focus to a control }
|
(5) 运行后就会看到:开始时,单行文本字段中显示的是"hello",当用户键入其他字符后,再单击Button按钮,就会弹出一个对话框,显示出m_strEdit内容。
实际上,CDHtmlDialog还提供DDX_DHtml_CheckBox(用于复选框)、DDX_DHtml_ElementText(设置或获取元素的任意属性)、DDX_DHtml_Radio(用于单选框)、DDX_DHtml_SelectIndex(设置或获取列表框当前项的索引值)、DDX_DHtml_SelectString(设置或获取列表框当前选项的文本)、 DDX_DHtml_SelectValue(设置或获取列表框当前选项的值)等。
至此,对如何使用WEB对话框就有一个较为全面的了解。当然,这里还没有对CMultiPageDHtmlDialog以及HTML元素的深入编程和CSS样式的设置还没有讨论,期待下一次与大家见面。
查看本文来源