在VC对话框中用ChtmlView控件显示HTML
2009-05-22 20:05:54 来源:WEB开发网为了避免主控程序将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()中不必在做什么。
为了播放资源中的HTML文件,需要重载导航处理器OnBeforeNavigate2(), 实现"app:" 伪协议,。传递"app:"链接到一个虚拟协议处理器。因为app:是假协议,所以需要设置pbCancel参数为"TRUE",以停止掉这个导航。
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;
}
}
更多精彩
赞助商链接