能很简便方式实现对网页的嵌入。
2.1
程序框架的建立
在建立程序框架时可以根据需要选取不同的形式,但必须保证在最后一步选则以CHtmlView为基类。如果没有选择,或要使已有
程序具备上述功能也可以通过搜寻与替换将视类头文件和源文件中所有的CView替换成CHtmlView,以完成基类的转换。
2.2 特效网页的嵌入
通过MSDN帮助查看其成员函数可以得知Navigate2();函数可以在客户区显示指定的网页(网络上的或本地的)该函数的原形如下:
void Navigate2( LPITEMIDLIST pIDL,
DWORD dwFlags = 0,
LPCTSTR lpszTargetFrameName = NULL );
void Navigate2( LPCTSTR lpszURL,
DWORD dwFlags = 0,
LPCTSTR lpszTargetFrameName = NULL,
LPCTSTR lpszHeaders = NULL,
LPVOID lpvPostData = NULL,
DWORD dwPostDataLen = 0 );
void Navigate2( LPCTSTR lpszURL,
DWORD dwFlags,
CByteArray& baPostedData,
LPCTSTR lpszTargetFrameName = NULL,
LPCTSTR lpszHeader = NULL );
尽管原形各不相同,但最主要的参数是第一个参数,它指定了网络上网页的URL(统一资源定位符)或是本地机上的网页的存放路径,需要特别指出,这里的存放路径必须是完整的绝对路径,相对路径将会导致失败。因此为了保证程序在路径改变后能正常工作,需要在显示网页之前通过GetModuleFileName()函数动态判断
程序的当前存放路径。下面将特效网页嵌入部分的主要实现代码介绍如下:
……
//获取到当前应用
程序存放的全路径,如C:\Windows\nope.exe形式
char exeFullPath[MAX_PATH];
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
//将路径分离出来,得到如C:\Windows\的形式
CString string;
string.Format("%s",exeFullPath);
exeFullPath[string.GetLength()-9]=''\0'';
string.Format("%s",exeFullPath);
//在路径后添加特效网页的路径,得到如C:\Windows\test.html的形式
string+="test.html";
//在客户区显示具有特效的网页
Navigate2(string,NULL,NULL);
……
经过DHTML网页嵌入后的VC++程序的运行效果如上图所示,在
程序中适当的应用网页特效可以起到美化界面,加
强人机友好程度等较好的效果。
3 小结
本文通过对CHtmlView的派生继承实现了在VC++下嵌入DHTML语言,并可借助所嵌入的DHTML语言实现一些在VC++中难以做到的或是实现起来颇为复杂的特效,并以此丰富程序的人机界面。本文所述思想具有较好的通用性。
程序在Windows 98下,由Microsoft Visual C++ 6.0编译通过,浏览器为IE 6.0。