VC6中使用CHtmlView在对话框控制中显示HTML文件

恶魔豆丁110

恶魔豆丁110

2016-01-29 11:51

VC6中使用CHtmlView在对话框控制中显示HTML文件,VC6中使用CHtmlView在对话框控制中显示HTML文件

VC6中使用CHtmlView在对话框控制中显示HTML文件


             编译/赵湘宁

     

本文的例子程序


   在Visual Studio 6.0中出现了一个新类CHtmlView,利用这个类,我们可以实现在对话框的控制中显示HTML文件。           要想使用CHtmlView类,对它的定义和实现就必须有全面深入的理解。我们不妨拿CHtmlView和CListView做一个比较,通过比较这两个类,我们会发现一些有趣的差别。首先,MFC中CListView有一个对应的CListCtrl类,而CHtmlView却没有一个CHtmlCtrl类与之对应;其次,CListView的使用依赖于MFC的文档/视结构,而CHtmlView的实现是基于COM的。通过IWebBrowser2接口来实现,而且IWebBrowser2与MFC文档/视图结构之间没有任何关系。
     为了实现在对话框的控制中显示HTML文件,我们也可以为CHtmlView创建一个对应的类CHtmlCtrl。以下是类CHtmlCtrl程序源代码:
        创建一个静态控制(也可以是其他控制),这个控制的ID及大小位置与界面上的控制相同。

BOOL CHtmlCtrl::CreateFromStatic(UINT nID, CWnd* pParent){    CStatic wndStatic;    if (!wndStatic.SubclassDlgItem(nID, pParent))    return FALSE;    // 获取静态控制的矩形区域并转换为父窗口的客户区坐标    CRect rc;    wndStatic.GetWindowRect(&rc);    pParent-ScreenToClient(&rc);    wndStatic.DestroyWindow();    // 创建 HTML 控制 (CHtmlView)    return     Create(NULL,                    // 类名        NULL,                    // 标题        (WS_CHILD | WS_VISIBLE ), // 风格        rc, // 矩形区域        pParent,          // /父窗口        nID,  // 控制 ID        NULL);          ///框架/文档}

   为了避免主控程序将CHtmlView对象看作是文档/视图框架,需要重载,CView::OnMouseActivate和CView::OnDestroy。此外,当用户在控制中单击时,OnMouseActivate要负责响应(WM_MOUSEACTIVATE)。  

int CHtmlCtrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT msg){//旁路 CView 文档/框架return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, msg);}void CHtmlCtrl::OnDestroy(){if (m_pBrowserApp) {     m_pBrowserApp-Release();       m_pBrowserApp = NULL;}CWnd::OnDestroy(); // 旁路 CView 文档/框架}

  通常,CHtmlView是在virtual void PostNcDestroy()中释放空间,但对话框中的控制常常是作为堆栈对象实现的,所以,在PostNcDestroy()中不必在做什么。      

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
     virtual void PostNcDestroy() {  }

     为了实现“app:” 伪协议,重载导航处理器OnBeforeNavigate2()。传递“app:”链接到一个虚拟协议处理器。因为app:是假协议,所以在浏览起重要取消掉这个导航。  

     void CHtmlCtrl::OnBeforeNavigate2( LPCTSTR lpszURL,    DWORD nFlags,     LPCTSTR lpszTargetFrameName,     CByteArray& baPostedData,     LPCTSTR lpszHeaders,     BOOL* pbCancel ){       const char APP_PROTOCOL[] = "app:";        int len = _tcslen(APP_PROTOCOL);        if (_tcsnicmp(lpszURL, APP_PROTOCOL, len)==0)        {          OnAppCmd(lpszURL + len);          *pbCancel = TRUE;        }}

              重载OnAppCmd(),处理app:命令,当浏览器准备导航到“app:foo”时,这个函数被调用,参数lpszWhere的值为“foo”。  

void CHtmlCtrl::OnAppCmd(LPCTSTR lpszWhere){ // default: do nothing}

                  重载OnMouseActivate, OnDestroy, 和 PostNcDestroy以后,CHtrmlCtrl在对话框中就可以象个控制一样工作。详细的使用方法请参见例子程序:AboutHtml。        运行AboutHtml.exe,并打开About对话框……音乐多么美妙!更有趣的是程序所用到的HTML源文件、图像、声音等文件都作为资源存储在EXE文件中:        

// in AboutHtml.rc ABOUT.HTM  HTML DISCARDABLE "resabout.htm" PD.JPG     HTML DISCARDABLE "respd.jpg" OKUP.GIF   HTML DISCARDABLE "resokup.gif" OKDN.GIF   HTML DISCARDABLE "resokdn.gif" MOZART.WAV HTML DISCARDABLE "resmozart.wav"

              注意:用文件的实际名字作为资源名很重要,以便浏览器能够找到他们。在一个普通的Web页面中,我们使用图像是用下列语法:      


        此代码假设图像文件"pd.jpg"存

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
展开更多 50%)
分享

猜你喜欢

VC6中使用CHtmlView在对话框控制中显示HTML文件

C语言教程 C语言函数
VC6中使用CHtmlView在对话框控制中显示HTML文件

在对话框中动态显示位图

编程语言 网络编程
在对话框中动态显示位图

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在对话框程序中插入DialogBar

C语言教程 C语言函数
在对话框程序中插入DialogBar

VC++中查找/替换对话框的使用

编程语言 网络编程
VC++中查找/替换对话框的使用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

vc的对话框-

编程语言 网络编程
vc的对话框-

VC程序中定制对话框中的回车键

编程语言 网络编程
VC程序中定制对话框中的回车键

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

HTML语言剖析(十三)其他标记

HTML语言剖析(十三)其他标记

AutoCAD实例教程:利用拉伸面命令绘制哑铃

AutoCAD实例教程:利用拉伸面命令绘制哑铃
下拉加载更多内容 ↓