RSS 2.0 Feed
2007-07 Entries
摘要: Visual Studio 2008 Beta2中的Class Designer终于支持C++了,上面是一个MFC程序的类图,可以看到已经支持扩展MFC的宏了,可惜只能看不能重构代码。尽管Class Designer这功能相当不错,但是设计师们可能还是更习惯IBM 的Rational Rose Developer for Visual Studio和UML。我用Class Designer的C#支持的时候也就是加加注释而已,重构我更习惯用DevExpress提供的工具Refactor来做,类则用XSD.exe生成,因为Class Designer生成的属性只会扔NotImplementedException异常。 CSDN Tags: C++, Class Designer, Visual Studio 2008, Rational Rose, UML, C#, DevExpress, Refactor Visual C++项目组在做下一个版本的市场调查,有兴趣的可以去提提要求。...[阅读全文]

posted @ | Feedback (4) |

摘要:截至MFC 9.0(Visual Studio 2008)Beta1版本为止CHtmlView还不支持Windows XP SP2中IE新增的NewWindow3事件,但是在atlmfc\src\viewhtml.cpp源代码里面已经有了其他事件的处理代码,要加上NewWindow3的支持也很简单。 添加下面几行到你对CHtmlView的派生类的声明内 (在此示例中姑且名为CHtmlViewTestView) void NewWindow3(              IDispatch **ppDisp,        VARIANT_BOOL *Cancel,        DWORD dwFlags,        BSTR bstrUrlContext,        BSTR bstrUrl    ); DECLARE_EVENTSINK_MAP() 添加下面几行到你对CHtmlViewTestView的实现源文件 #include <exdisp.h> //For IWebBrowser2* and others#include <exdispid.h>#include <Mshtml.h>#include <Mshtmdid.h>#include <shobjidl.h> BEGIN_EVENTSINK_MAP(CHtmlViewTestView, CHtmlView)    ON_EVENT(CHtmlViewTestView, AFX_IDW_PANE_FIRST,DISPID_NEWWINDOW3,NewWindow3,VTS_PDISPATCH VTS_PBOOL VTS_I4 VTS_BSTR VTS_BSTR)END_EVENTSINK_MAP() void CHtmlViewTestView::NewWindow3(          IDispatch **ppDisp,    VARIANT_BOOL *Cancel,    DWORD dwFlags,    BSTR bstrUrlContext,    BSTR bstrUrl){    CDocTemplate* pDocTemplate=GetDocument()->GetDocTemplate();    CDocument* pDocument=pDocTemplate->OpenDocumentFile(NULL);    POSITION pos= pDocument->GetFirstViewPosition();    CHtmlViewTestView* pNewView=(CHtmlViewTestView*)pDocument->GetNextView(pos);    pNewView->SetRegisterAsBrowser(TRUE);    *ppDisp=pNewView->GetApplication();} 在CHtmlView派生类里面处理ShowHtmlDialog比较麻烦一点,需要扩展控件站点,但是MFC对控件站点的扩展是不可复用的。MFC里面的两个浏览器控件封装类 CHtmlView和CDHtmlDialog甚至没有共享任何代码,而是使用几乎相同的代码来做完全一样的事情:重定向IDocHostUIHandler 的方法。CHtmlView用的扩展叫做 CHtmlControlSite,甚至都不在MFC头文件里面,而CDHtmlDialog用的 CBrowserControlSite在afxdhtml.h这个文件里面,暴露了GetInterfaceHook,留下了一点扩展的空间。 现在回到CHtmlView。要创建一个控件站点的扩展,你需要重载CWnd::CreateControlSite。这个函数是在MFC 7.0里面为扩展浏览器空间量身定做的,但是在MFC 8.0里面也被用于嵌入.Net里面的Windows Forms控件。 BOOL CHtmlViewTestView::CreateControlSite(COleControlContainer* pContainer,    COleControlSite** ppSite, UINT /* nID */, REFCLSID /* clsid */){    ASSERT(ppSite != NULL);    *ppSite = new......[阅读全文]

posted @ | Feedback (6) |