VC++.NET一个令人耳目一新的特性就是基于动态HTML的WEB对话框,它使得桌面程序界面和功能变得更容易实现。这里将对WEB对话框中HTML元素的CSS属性控制作探讨。
3、文本属性
Style Builder对话框的Text页面可对元素中的文本进行对齐、缩进、字距、行距以及书写方式进行设置,如图5所示。
(1) 对齐方式(Alignment)
在水平方向(Horizontal)的对齐方式表现为:Left(左对齐)、Centered(中间对齐)、Right(右对齐)和Justified(两端对齐),而在垂直方向表现为Subscript text(垂直对齐文本的下标)和Supperscript text(垂直对齐文本的上标)。
若在水平对齐方式选中Justified,还可有下列选项:
Auto : 自动调整两端对齐
Space words : 通过增加字之间的空格对齐文本。
Newspaper style : 通过增加或减少字或字母之间的空格对齐文本。
Distribute spacing : 处理空格很像newspaper,适用于东亚文档。
Distribute all Lines : 两端对齐行的方式与distribute相同,适用于表意字文档。
(2) 字距和行距
字距(Letters)与行距(Lines)的调整相似,都有Normal(正常)和Custom(自定义)两项,若选中Custom,则可在右边设置具体的间距大小。
(3) 文本流(Text Flow)
文本流包括Indentation(缩进)和Text Direction(文本方向)两个属性。其中,文本方向可以有Left to right(从左到右)和Right to left(从右到左)两个选项。
需要说明的是,以上的属性设置都有会在对话框下面的预览框看到相应的结果。
二、在程序中获取和改变元素的CSS属性 在WEB对话框类中获取和改变元素的CSS属性,可使用IHTMLElement接口,它提供了有关HTML元素的许多方法,其中get_style就是用来处理包括CSS在内的属性,它的原型如下:
HRESULT get_style( IHTMLStyle **p );
其中,p是IHTMLStyle指针变量,IHTMLStyle也是一个接口是用来提供获取和设置具体属性的方法。例如get_color和put_color是用来获取和设置元素的颜色,它们的原型如下:
HRESULT get_color( VARIANT *p );
HRESULT put_color( VARIANT v );
其中,VARIANT是与绝大多数数据类型相兼容的一种类型,使用时要注意设置VARIANT变量的具体类型。
下面的例子是当鼠标划过一段文字时,其颜色从红色变成蓝色,具体步骤如下:
(1) 选择File菜单->New菜单->Project命令,创建一个基于WEB对话框的Ex_Dlg方案工程(详细过程这里略)。
(2) 切换到方案导航区的Resource View窗口,展开HTML项,双击IDR_HTML_EX_DLG_DIALOG项,这时就在文档窗口中显示相应的HTML模板。
(3) 删除HTML模板中所有缺省的元素(包括OK和Cancel按钮),双击HTML工具箱的Linear Layout Panel按钮,在HTML页面中添加一个直线面板,在其中添加文字:"当你用鼠标划过这段文字时,看看有什么变化?"。
(4) 在属性窗口中将上述添加的面板的ID号改为Div1,再单击Style项右边的Browse(...)按钮,将其文字颜色设置为红色(Red)。
(5) 打开WEB对话框类CEx_DlgDlg文件Ex_DlgDlg.cpp,在文件的前面找到BEGIN_DHTML_EVENT_MAP(CEx_DlgDlg)与END_DHTML_EVENT_MAP()之间的程序段,然后添加下列代码:
DHTML_EVENT_ONMOUSEOVER(_T("Div1"),OnMouseOverDiv1)
DHTML_EVENT_ONMOUSEOUT(_T("Div1"),OnMouseOutDiv1)
其中事件映射宏DHTML_EVENT_ONMOUSEOVER和DHTML_EVENT_ONMOUSEOUT分别用来映射鼠标移至和移出的事件。
(6) 打开头文件Ex_DlgDlg.h,添加下面的事件映射函数的声明,并且添加成员变量m_varColor用来保存原来的颜色值:
public: VARIANT m_varColor; ... protected: ... HRESULT OnMouseOverDiv1(IHTMLElement *pElement); HRESULT OnMouseOutDiv1(IHTMLElement *pElement);
|
(7) 再切换到Ex_DlgDlg.cpp窗口,在程序的最后添加下列代码:
HRESULT CEx_DlgDlg::OnMouseOverDiv1(IHTMLElement *pElement) { IHTMLStyle *phtmlStyle; pElement->get_style(&phtmlStyle); if (phtmlStyle) { VARIANT varColor; varColor.vt = VT_I4; varColor.lVal = 0x0000ff; phtmlStyle->get_color(&m_varColor); phtmlStyle->put_color(varColor); phtmlStyle->Release(); }
return S_OK; }
HRESULT CEx_DlgDlg::OnMouseOutDiv1(IHTMLElement *pElement) { IHTMLStyle *phtmlStyle; pElement->get_style(&phtmlStyle); if (phtmlStyle) { phtmlStyle->put_color(m_varColor); phtmlStyle->Release(); }
return S_OK; }
|
(8) 编译并运行,然后看看当鼠标划过那段文字后,颜色是不是会有变化?当移出时,颜色是不是以恢复到原来的红色?
至此,通过以上的方法和技巧,我们就可以对HTML元素属性进行设置和程序控制。要提出来的是,在Visual C++.NET的Beta 1版中,WEB对话框类CDHtmlDialog的GetElementProperty和SetElementProperty好像并能有效获取和设置HTML元素的属性。
查看本文来源