MCPcopy Create free account
hub / github.com/cinience/RedisStudio / DoCreateControl

Method DoCreateControl

DuiLib/Control/UIActiveX.cpp:1061–1126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1059typedef HRESULT (__stdcall *DllGetClassObjectFunc)(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
1060
1061bool 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 }

Callers

nothing calls this directly

Calls 7

IsEmptyMethod · 0.80
SendNotifyMethod · 0.80
DoVerbMethod · 0.80
GetPaintWindowMethod · 0.80
SetSiteMethod · 0.80
ReleaseMethod · 0.45
QueryInterfaceMethod · 0.45

Tested by

no test coverage detected