MFC里NewWindow2Explorer1的一些常用处理代码
2012-12-26 12:19
477 查看
MFC里NewWindow2Explorer1的一些常用处理代码,FreeEIM部分代码。
void CADSLTryDlg::NewWindow2Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel)
{
// TODO: 在此处添加消息处理程序代码
IUnknown* pUnk =this->m_oIExplorer.GetControlUnknown();
if(pUnk)
{
IDispatch* pDisp = NULL;
HRESULT hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp);
if(SUCCEEDED(hr)&&pDisp)
{
*ppDisp=pDisp;
*Cancel = FALSE;
}
}
在此NewWindow2事件代码中,档一个新常口需要被创建, 我们建立一个新的当前窗体Form1的拷贝. 在此表单窗体, 相当于Internet Explorer的新实例,将处理导航.
在mfc中我们需要首先加入NewWindow2 事件的映射条目到视图类的事件映射宏. (不要忘记包含 ExDispID.h in, 那里有DISPID_NEWWINDOW2 定义.)
ON_EVENT(CMfcWebHostView, IDC_WEBBROWSER, DISPID_NEWWINDOW2,
OnNewWindow2, VTS_PDISPATCH VTS_PBOOL)
下一步声明OnNewWindow2 方法:
void OnNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel);
最后实现OnNewWindow2 方法以创建一个新的MfcWebHost窗口实例:
void CMfcWebHostView::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel){ // Ensure that ppDisp is not NULL. // If it is NULL, you probably specified // VT_DISPATCH for the first parameter in // the ON_EVENT
macro for NewWindow2 in // the event sink map. The correct parameter // type is VT_PDISPATCH. // ASSERT(ppDisp); if (!ppDisp) return; // Get a pointer to the application object // for this application. // CWinApp* pApp = AfxGetApp();
// Get the correct document template. // CDocTemplate* pDocTemplate; POSITION pos = pApp->GetFirstDocTemplatePosition(); pDocTemplate = pApp->GetNextDocTemplate(pos); ASSERT(pDocTemplate); // Create the new frame. CFrameWnd* pNewFrame =
pDocTemplate->CreateNewFrame(GetDocument(), (CFrameWnd*)AfxGetMainWnd()); ASSERT(pNewFrame); // Activate the frame, and set its active view. // pDocTemplate->InitialUpdateFrame(pNewFrame, NULL); CMfcWebHostView*
pWbView = (CMfcWebHostView*)pNewFrame->GetActiveView(); ASSERT(pWbView); *ppDisp = pWbView->m_webBrowser.GetApplication();}
如果你在sid或者mdi应用程序中控制一个WebBrowser控件,实现OnNewWindow2 方法是复杂的且需要知道如何解决同文档模版如何工作. 或许, 如果你在一个给予对话框的应用程序控制一个WebBrowser控件是较为容易的.此处为示例:
void CMyDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel) { m_dlgNewWB = new CMyDlg; m_dlgNewWB->Create(IDD_MYDLG_DIALOG); *ppDisp = m_dlgNewWB->m_webBrowser.GetApplication();}
记住当你完成打开的新对话框后删除(delete) m_dlgNewWB. 且不要在CMyDlg::OnInitDialog方法中导航, 因为这样代码将不会工作.
void CADSLTryDlg::NewWindow2Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel)
{
// TODO: 在此处添加消息处理程序代码
IUnknown* pUnk =this->m_oIExplorer.GetControlUnknown();
if(pUnk)
{
IDispatch* pDisp = NULL;
HRESULT hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp);
if(SUCCEEDED(hr)&&pDisp)
{
*ppDisp=pDisp;
*Cancel = FALSE;
}
}
在此NewWindow2事件代码中,档一个新常口需要被创建, 我们建立一个新的当前窗体Form1的拷贝. 在此表单窗体, 相当于Internet Explorer的新实例,将处理导航.
在mfc中我们需要首先加入NewWindow2 事件的映射条目到视图类的事件映射宏. (不要忘记包含 ExDispID.h in, 那里有DISPID_NEWWINDOW2 定义.)
ON_EVENT(CMfcWebHostView, IDC_WEBBROWSER, DISPID_NEWWINDOW2,
OnNewWindow2, VTS_PDISPATCH VTS_PBOOL)
下一步声明OnNewWindow2 方法:
void OnNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel);
最后实现OnNewWindow2 方法以创建一个新的MfcWebHost窗口实例:
void CMfcWebHostView::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel){ // Ensure that ppDisp is not NULL. // If it is NULL, you probably specified // VT_DISPATCH for the first parameter in // the ON_EVENT
macro for NewWindow2 in // the event sink map. The correct parameter // type is VT_PDISPATCH. // ASSERT(ppDisp); if (!ppDisp) return; // Get a pointer to the application object // for this application. // CWinApp* pApp = AfxGetApp();
// Get the correct document template. // CDocTemplate* pDocTemplate; POSITION pos = pApp->GetFirstDocTemplatePosition(); pDocTemplate = pApp->GetNextDocTemplate(pos); ASSERT(pDocTemplate); // Create the new frame. CFrameWnd* pNewFrame =
pDocTemplate->CreateNewFrame(GetDocument(), (CFrameWnd*)AfxGetMainWnd()); ASSERT(pNewFrame); // Activate the frame, and set its active view. // pDocTemplate->InitialUpdateFrame(pNewFrame, NULL); CMfcWebHostView*
pWbView = (CMfcWebHostView*)pNewFrame->GetActiveView(); ASSERT(pWbView); *ppDisp = pWbView->m_webBrowser.GetApplication();}
如果你在sid或者mdi应用程序中控制一个WebBrowser控件,实现OnNewWindow2 方法是复杂的且需要知道如何解决同文档模版如何工作. 或许, 如果你在一个给予对话框的应用程序控制一个WebBrowser控件是较为容易的.此处为示例:
void CMyDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel) { m_dlgNewWB = new CMyDlg; m_dlgNewWB->Create(IDD_MYDLG_DIALOG); *ppDisp = m_dlgNewWB->m_webBrowser.GetApplication();}
记住当你完成打开的新对话框后删除(delete) m_dlgNewWB. 且不要在CMyDlg::OnInitDialog方法中导航, 因为这样代码将不会工作.
相关文章推荐
- 一些常用日期处理代码
- asp.net 一些常用的处理函数代码
- MFC一些常用消息处理
- 一些常用日期处理代码
- Jmeter中常用的一些对字符串的处理代码参考
- 字符数组的定义、初始化及引用以及一些常用的字符串处理函数
- Asp.net常用的一些代码
- WEB编程一些常用代码
- (转)金蝶 eas bos KDTable常用处理代码
- 关于一些新手MFC入门时,在vs上运行孙鑫老师代码时可能碰到的问题。
- Android 图片处理 常用代码快
- AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式
- 一些常用的代码
- 收藏一些不常用,但是有用的代码
- 一些常用代码编辑器(Vi、gedit、EditPlus、SourceInsight)的使用技巧小结
- 一些常用的Java功能代码
- 微信小程序一些常用代码(1)——tabar、页面跳转、分享、选项卡、radio
- opencv图像处理常用完整示例代码总结
- 一些web开发中常用的、做成cs文件的js代码 (转)
- 音频信号MATLAB处理的一些常用函数