Duilib中加载MFC等其它框架开发的OCX崩溃的解决方案
duilib开源库内部封装了ActiveX控件,可以很方便的加载使用第三方开发的Com组件,使用方式参考CFlashUI控件的实现。 控件加载Flash、IEWebBrowser等都没有问题,但是加载其它第三方Com的时候却经常失败,无法使用。有如下两个方案可以解决: 第一、抛开内部的ActiveX控件,直接根据自己OCX来封装成一个带句柄的控件嵌入到Duilib中使用,使用方式如下:
class CWndUI: public CControlUI { public: CWndUI() { m_hWnd = NULL; } public: void SetVisible(bool bVisible = true) { CControlUI::SetVisible(bVisible); ::ShowWindow(m_hWnd, bVisible); } void SetInternVisible(bool bVisible = true) { CControlUI::SetInternVisible(bVisible); ::ShowWindow(m_hWnd, bVisible); } void SetPos(RECT rc, bool bNeedUpdate) { CControlUI::SetPos(rc, bNeedUpdate); ::SetWindowPos(m_hWnd, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER | SWP_NOACTIVATE); } BOOL Attach(HWND hWndNew) { if (!::IsWindow(hWndNew)) { return FALSE; } m_hWnd = hWndNew; return TRUE; } HWND Detach() { HWND hWnd = m_hWnd; m_hWnd = NULL; return hWnd; } protected: HWND m_hWnd; };
第二、使用我修改过的duilib_ultimate源码,使用问题请联系Troy (QQ:656067418),代码托管地址:
https://github.com/qdtroy/DuiLib_Ultimate
https://git.oschina.net/qdtroy/DuiLib_Ultimate.git