CDHtmlDialog::Navigate() 加载后 m_spHtmlDoc是否变化?原有的DHTML_EVENT_CLASS等事件映射是否仍然有效?
以CDHtmlDialog为载体html为皮肤界面,当换皮肤时用Navigate新加载一个元素的id、class等属性完全一样,
仅界面文字不同的html文件,完全原来在BEGIN_DHTML_EVENT_MAP所作的事件映射是否仍然有效?新的界面表面看
起来貌似加载成功,但实际在做文字替换SetElementHtml时内部代码:
void CDHtmlDialog::SetElementHtml(LPCTSTR szElementId, BSTR bstrText)
{
CComPtr<IHTMLElement> sphtmlElem;
GetElement(szElementId, &sphtmlElem);
if (sphtmlElem)//此处是空 sphtmlElem->put_innerHTML(bstrText);
}
Navigate执行前会把m_spHtmlDoc 清除掉,执行后m_pBrowserApp这个代理到底发生了什么变化?
void CDHtmlDialog::OnBeforeNavigate(LPDISPATCH pDisp, LPCTSTR szUrl)
{
szUrl; // unused
if (pDisp != m_pBrowserApp)
return;
DisconnectDHtmlEvents();
m_spHtmlDoc = NULL;
m_strCurrentUrl.Empty();
}
总结: Navigate函数执行后加载新的html文件,在所有的元素id\class等属性值未变化的前提下原有的利用这些id、class
所作的事件映射是否仍然有效?
另一个问题:用CDHtmlDialog和html结合来做客户端是否合适?真正处理起数据及界面状态变化时根本没觉得比mfc方便撒。。。
谢谢!