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方法中导航, 因为这样代码将不会工作.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值