在对话框中使用CHtmlView类打开网页

简介:

 客户端程显示一个网页,可以使用的是CHTMLView这个类.关于这个类的使用可以参考ChtmlView控件显示HTML.这里仅作简单说明

 
为了在对话框中显示HTML文件,必须将CHtmlCtrl类与对话框中的一个静态控制(也可以是其它控制)关联起来,这样才能为显示HTML文件提供一个窗口,为此可以在CHtmlCtrl类中定义一个创建函数:
 
 
  1. BOOL CHTMLCtrl::CreateFromStatic(CStatic* pStaticWnd, CWnd* pParent) 
  2.     ASSERT(NULL!=pStaticWnd && NULL!=pStaticWnd->GetSafeHwnd()); 
  3.     ASSERT(NULL!=pParent && NULL!=pParent->GetSafeHwnd()); 
  4.  
  5.     CRect rc; 
  6.     pStaticWnd->GetClientRect(&rc); 
  7.  
  8.     int nID = pStaticWnd->GetDlgCtrlID(); 
  9.     LPCTSTR lpClassName = AfxRegisterWndClass(NULL); 
  10.     return Create(lpClassName, _T(""), WS_CHILD|WS_VISIBLE, rc, pParent, nID, NULL); 
注意观察nID是必须的.
重载这个函数(必须),这是避免主控程序将CHtmlView对象看作是文档/视图框架:
 
 
  1. int CHTMLCtrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message) 
  2.     // TODO: Add your message handler code here and/or call default 
  3.  
  4.     return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message); 
  5.  
  6. //Do not call it. 
  7.     // return CHtmlView::OnMouseActivate(pDesktopWnd, nHitTest, message); 
然后在对话框中可以这样调用:
 
 
  1. BOOL CHomePage::OnInitDialog() 
  2.     CDialog::OnInitDialog(); 
  3.  
  4.     CRect rc; 
  5.     GetClientRect(&rc); 
  6.     CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_HTML); 
  7.     pStatic->MoveWindow(&rc); 
  8.  
  9.     m_pHTMLPage = new CHTMLCtrl; 
  10.     CHTMLCtrl* pHTMLCtrl = (CHTMLCtrl*)m_pHTMLPage; 
  11.     pHTMLCtrl->CreateFromStatic(pStatic, this); 
  12.     pHTMLCtrl->Navigate(_T("http://www.osssk1.com")); 
  13.  
  14.     return TRUE; 
另外,函数Navigate不但支持URL,还可以打开一个本地html文件,只是要指定具体的路径.
 
函数CHTMLCtrl::OnNavigateError(...DWORD dwError...)有一个指出打开URL是否正确的参数dwError,如果它的值不是200,证明是错误的,此时不需要再向下执行,而是转而打开本地html文件.需要注意的是,打开本地文件应该从父窗口打开,而不是该类对象自己的行为.所以这里向父窗口发送一个消息(异步发送).
 
 
 
 
  1. void CHTMLCtrl::OnNavigateError(LPCTSTR lpszURL, LPCTSTR lpszFrame, 
  2. DWORD dwError,BOOL *pbCancel) 
  3.     if (200!=dwError && 0==_tcscmp(_T("http://www.osssk1.com/"), lpszURL)) 
  4.     { 
  5.         // Navigate to local html file. 
  6.         GetParent()->PostMessage(WM_NAVI_LOCAL_URL, 0, 0); 
  7.         return
  8.     } 
  9.  
  10.     return CHtmlView::OnNavigateError(lpszURL, lpszFrame, dwError, pbCancel); 
父窗口接收到该消息就知道打开URL失败,应该打开本地html文件.
 
 
  1. BOOL CHomePage::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
  2.     // TODO: Add your specialized code here and/or call the base class 
  3.     if (WM_NAVI_LOCAL_URL == message) 
  4.     { 
  5.         CHTMLCtrl* pHTMLCtrl = (CHTMLCtrl*)m_pHTMLPage; 
  6.         pHTMLCtrl->Navigate(_T("e:\\index.html")); 
  7.         return TRUE; 
  8.     } 
  9.     return CDialog::OnWndMsg(message, wParam, lParam, pResult); 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 





本文转自jetyi51CTO博客,原文链接:http://blog.51cto.com/jetyi/1073361  ,如需转载请自行联系原作者



相关文章
|
9月前
|
JavaScript 前端开发 搜索推荐
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
155 0
|
JavaScript 前端开发
可以弹出确认对话框的自定义Web服务器控件ConfirmButton
经常在论坛里看到类似这样的问题:“…如何在点击删除按钮的时候弹出个确认删除对话框”。      下面我们来自己写一个这样的自定义Web服务器控件!      思路如下:      继承System.Web.UI.WebControls.Button控件      增加一个属性“ConfirmMessage”来表示弹出确认框上面的提示信息。
839 0
|
JavaScript 前端开发 .NET
aspx页面中点击按钮传递给Silverlight,并且页面不刷新
function onSilverlightError(sender, args) { var ap...
664 0
|
Web App开发 C#
C#调用默认浏览器打开网页的几种方法
CSharp调用默认浏览器打开网页的几种方法 示例界面: 方法一:从注册表中读取默认浏览器可执行文件路径 private void button1_Click(object sender, EventArgs e) { //从注册表中读...
1178 0
|
Web App开发
Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置
Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置
1039 0
Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置
文件浏览对话框
这次在工作中碰到了文件浏览对话框,以前的时候也做过,不过没有做过文件浏览对话框同时实现打开文件,和打开文件夹两种功能的同时实现。通过查阅资料,一上午一开始使用SHBrowseForFolder()而后有使用CFileDialog,一开始以为SHBrowseForFolder只能用于文件夹,CFileDialog可以用于文件和文件夹的打开。
778 0

热门文章

最新文章