| 1059 | typedef HRESULT (__stdcall *DllGetClassObjectFunc)(REFCLSID rclsid, REFIID riid, LPVOID* ppv); |
| 1060 | |
| 1061 | bool CActiveXUI::DoCreateControl() |
| 1062 | { |
| 1063 | ReleaseControl(); |
| 1064 | // At this point we'll create the ActiveX control |
| 1065 | m_bCreated = true; |
| 1066 | IOleControl* pOleControl = NULL; |
| 1067 | |
| 1068 | HRESULT Hr = -1; |
| 1069 | if( !m_sModuleName.IsEmpty() ) { |
| 1070 | HMODULE hModule = ::LoadLibrary((LPCTSTR)m_sModuleName); |
| 1071 | if( hModule != NULL ) { |
| 1072 | IClassFactory* aClassFactory = NULL; |
| 1073 | DllGetClassObjectFunc aDllGetClassObjectFunc = (DllGetClassObjectFunc)::GetProcAddress(hModule, "DllGetClassObject"); |
| 1074 | Hr = aDllGetClassObjectFunc(m_clsid, IID_IClassFactory, (LPVOID*)&aClassFactory); |
| 1075 | if( SUCCEEDED(Hr) ) { |
| 1076 | Hr = aClassFactory->CreateInstance(NULL, IID_IOleObject, (LPVOID*)&pOleControl); |
| 1077 | } |
| 1078 | aClassFactory->Release(); |
| 1079 | } |
| 1080 | } |
| 1081 | if( FAILED(Hr) ) { |
| 1082 | Hr = ::CoCreateInstance(m_clsid, NULL, CLSCTX_ALL, IID_IOleControl, (LPVOID*)&pOleControl); |
| 1083 | } |
| 1084 | ASSERT(SUCCEEDED(Hr)); |
| 1085 | if( FAILED(Hr) ) return false; |
| 1086 | pOleControl->QueryInterface(IID_IOleObject, (LPVOID*) &m_pUnk); |
| 1087 | pOleControl->Release(); |
| 1088 | if( m_pUnk == NULL ) return false; |
| 1089 | // Create the host too |
| 1090 | m_pControl = new CActiveXCtrl(); |
| 1091 | m_pControl->m_pOwner = this; |
| 1092 | // More control creation stuff |
| 1093 | DWORD dwMiscStatus = 0; |
| 1094 | m_pUnk->GetMiscStatus(DVASPECT_CONTENT, &dwMiscStatus); |
| 1095 | IOleClientSite* pOleClientSite = NULL; |
| 1096 | m_pControl->QueryInterface(IID_IOleClientSite, (LPVOID*) &pOleClientSite); |
| 1097 | CSafeRelease<IOleClientSite> RefOleClientSite = pOleClientSite; |
| 1098 | // Initialize control |
| 1099 | if( (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) != 0 ) m_pUnk->SetClientSite(pOleClientSite); |
| 1100 | IPersistStreamInit* pPersistStreamInit = NULL; |
| 1101 | m_pUnk->QueryInterface(IID_IPersistStreamInit, (LPVOID*) &pPersistStreamInit); |
| 1102 | if( pPersistStreamInit != NULL ) { |
| 1103 | Hr = pPersistStreamInit->InitNew(); |
| 1104 | pPersistStreamInit->Release(); |
| 1105 | } |
| 1106 | if( FAILED(Hr) ) return false; |
| 1107 | if( (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) == 0 ) m_pUnk->SetClientSite(pOleClientSite); |
| 1108 | // Grab the view... |
| 1109 | Hr = m_pUnk->QueryInterface(IID_IViewObjectEx, (LPVOID*) &m_pControl->m_pViewObject); |
| 1110 | if( FAILED(Hr) ) Hr = m_pUnk->QueryInterface(IID_IViewObject2, (LPVOID*) &m_pControl->m_pViewObject); |
| 1111 | if( FAILED(Hr) ) Hr = m_pUnk->QueryInterface(IID_IViewObject, (LPVOID*) &m_pControl->m_pViewObject); |
| 1112 | // Activate and done... |
| 1113 | m_pUnk->SetHostNames(OLESTR("UIActiveX"), NULL); |
| 1114 | if( m_pManager != NULL ) m_pManager->SendNotify((CControlUI*)this, DUI_MSGTYPE_SHOWACTIVEX, 0, 0, false); |
| 1115 | if( (dwMiscStatus & OLEMISC_INVISIBLEATRUNTIME) == 0 ) { |
| 1116 | Hr = m_pUnk->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, pOleClientSite, 0, m_pManager->GetPaintWindow(), &m_rcItem); |
| 1117 | //::RedrawWindow(m_pManager->GetPaintWindow(), &m_rcItem, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_INTERNALPAINT | RDW_FRAME); |
| 1118 | } |
nothing calls this directly
no test coverage detected