MFC里NewWindow2Explorer1的一些常用处理代码
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方法中導航, 因為這樣代碼將不會工作.
?
總結
以上是生活随笔為你收集整理的MFC里NewWindow2Explorer1的一些常用处理代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于用Delphi开发的一些基本的套路
- 下一篇: typedef让p去除了普通变量的C++