// ********************************************************** // get_ErrorMsg // ********************************************************** STDMETHODIMP CUndoList::get_ErrorMsg(long ErrorCode, BSTR *pVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) USES_CONVERSION; *pVal = A2BSTR(ErrorMsg(ErrorCode)); return S_OK; }
void __declspec(dllexport) __stdcall vbCSLToVariant( char **papszList, VARIANT *out_list ) { USES_CONVERSION; SAFEARRAYBOUND sBounds; SAFEARRAY *result; long i, nLength = CSLCount( papszList ); /* -------------------------------------------------------------------- */ /* Create safe array result. */ /* -------------------------------------------------------------------- */ sBounds.lLbound = 1; sBounds.cElements = nLength; result = SafeArrayCreate( VT_BSTR, 1, &sBounds ); for( i = 1; i <= nLength; i++ ) { SafeArrayPutElement( result, &i, SysAllocString( A2BSTR(papszList[i-1]) ) ); // MessageBox( NULL, papszList[i-1], "Metadata Item", MB_OK ); } /* -------------------------------------------------------------------- */ /* Assign to variant. */ /* -------------------------------------------------------------------- */ VariantClear( out_list ); out_list->vt = VT_BSTR | VT_ARRAY; out_list->parray = result; }
void UPnP::ClosePort() { if(remote_port_ == 0) return; #ifdef _MSC_VER HRESULT hr; IUPnPNAT* upnpnat; hr = CoCreateInstance (CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void**)&upnpnat); if(FAILED(hr) || !upnpnat) return; IStaticPortMappingCollection* upnpspmc = NULL; hr = upnpnat->get_StaticPortMappingCollection(&upnpspmc); if(FAILED(hr) || !upnpspmc) return; BSTR bstrProtocol = A2BSTR("TCP"); hr = upnpspmc->Remove(remote_port_, bstrProtocol); if(FAILED(hr)) LOG.getlasterror("Automatisches Entfernen des Portforwardings mit UPnP fehlgeschlagen\nFehler"); SysFreeString(bstrProtocol); if(FAILED(hr)) return; #else int hr; UPNPDev* devicelist = NULL; #ifdef UPNPDISCOVER_SUCCESS int upnperror = 0; devicelist = upnpDiscover(2000, NULL, NULL, 0, 0 /* ipv6 */, &upnperror); #else devicelist = upnpDiscover(2000, NULL, NULL, 0); #endif if(!devicelist) return; UPNPUrls urls; IGDdatas data; hr = UPNP_GetValidIGD(devicelist, &urls, &data, NULL, 0); if(hr == 1 || hr == 2) { std::stringstream p; p << remote_port_; hr = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, p.str().c_str(), "TCP", NULL); } freeUPNPDevlist(devicelist); if(hr != 0) return; #endif remote_port_ = 0; }
// ***************************************************************** // SetDrawingKey() // ***************************************************************** void CMapView::SetDrawingKey(long DrawHandle, LPCTSTR lpszNewValue) { if( IsValidDrawList (DrawHandle) ) { ::SysFreeString(_allDrawLists[DrawHandle]->key); _allDrawLists[DrawHandle]->key = A2BSTR(lpszNewValue); } else ErrorMessage(tkINVALID_DRAW_HANDLE); }
int __declspec(dllexport) __stdcall vbCStringToVB6( VARIANT *vResult, char *pszInput ) { USES_CONVERSION; VariantClear( vResult ); if( pszInput != NULL ) { vResult->vt = VT_BSTR; vResult->bstrVal = SysAllocString( A2BSTR(pszInput) ); return 0; } else return 1; }
/* ================ CSyntaxRichEditCtrl::FindNext ================ */ bool CSyntaxRichEditCtrl::FindNext(const char *find, bool matchCase, bool matchWholeWords, bool searchForward) { long selStart, selEnd, flags, search, length, start; tom::ITextRange *range; if (find[0] == '\0') { return false; } GetSel(selStart, selEnd); flags = 0; flags |= matchCase ? tom::tomMatchCase : 0; flags |= matchWholeWords ? tom::tomMatchWord : 0; if (searchForward) { m_TextDoc->Range(selEnd, GetTextLength(), &range); search = GetTextLength() - selEnd; } else { m_TextDoc->Range(0, selStart, &range); search = -selStart; } if (range->FindShit(A2BSTR(find), search, flags, &length) == S_OK) { m_TextDoc->Freeze(NULL); range->get_Start(&start); range->Release(); SetSel(start, start + length); int line = Max((int) LineFromChar(start) - 5, 0); LineScroll(line - GetFirstVisibleLine(), 0); UpdateVisibleRange(); m_TextDoc->Unfreeze(NULL); return true; } else { range->Release(); return false; } }
STDMETHODIMP CSub::GetOpName(BSTR *pOpName) { *pOpName = A2BSTR(_T("Sub")); return S_OK; }
STDMETHODIMP CPlus::GetOpName(BSTR *pOpName) { *pOpName = A2BSTR(_T("Plus")); return S_OK; }
/** * Erstellt per UPnP ein Portforwarding. * * @author FloSoft */ bool UPnP::OpenPort(const unsigned short& port) { if(remote_port_ != 0) ClosePort(); remote_port_ = port; #ifdef _MSC_VER HRESULT hr; CoInitialize(NULL); IUPnPNAT* upnpnat; hr = CoCreateInstance (CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void**)&upnpnat); if(FAILED(hr) || !upnpnat) { if(!upnpnat) hr = E_NOINTERFACE; SetLastError(hr); return false; } IStaticPortMappingCollection* upnpspmc = NULL; hr = upnpnat->get_StaticPortMappingCollection(&upnpspmc); if(FAILED(hr) || !upnpspmc) { if(!upnpspmc) hr = E_NOINTERFACE; SetLastError(hr); return false; } std::string local_address; std::vector<std::string> addresses = GetAllv4Addresses(); // if we have multiple addresses, search the private one if(addresses.size() > 1) { for(std::vector<std::string>::iterator addr = addresses.begin(); addr != addresses.end(); ++addr) { std::string ss = *addr; std::stringstream s, sc; s << ss; std::getline(s, ss, '.'); sc << ss << " "; std::getline(s, ss, '.'); sc << ss << " "; int a, b; sc >> a; sc >> b; int ab = (a << 24) | (b << 16); if( (ab & 0xff000000) == 0x0a000000 || // 10.0.0.0/8 (ab & 0xff000000) == 0x7f000000 || // 127.0.0.0/8 (ab & 0xfff00000) == 0xac100000 || // 172.16.0.0/12 (ab & 0xffff0000) == 0xc0a80000 ) // 192.168.0.0/16 local_address = *addr; } } // otherwise use the first one if(local_address == "" && !addresses.empty()) local_address = addresses.front(); // I hope we found one ... if(local_address == "") { SetLastError(E_FAIL); return false; } BSTR bstrProtocol = A2BSTR("TCP"); BSTR bstrLocalAddress = A2BSTR(local_address.c_str()); BSTR bstrDescription = A2BSTR("Return To The Roots"); IStaticPortMapping* upnpspm = NULL; hr = upnpspmc->Add(port, bstrProtocol, port, bstrLocalAddress, VARIANT_TRUE, bstrDescription, &upnpspm); SysFreeString(bstrProtocol); SysFreeString(bstrLocalAddress); SysFreeString(bstrDescription); if(SUCCEEDED(hr) && !upnpspm) hr = E_NOINTERFACE; SetLastError(hr); if(SUCCEEDED(hr) && upnpspm) return true; #else int hr; UPNPDev* devicelist = NULL; #ifdef UPNPDISCOVER_SUCCESS int upnperror = 0; devicelist = upnpDiscover(2000, NULL, NULL, 0, 0 /* ipv6 */, &upnperror); #else devicelist = upnpDiscover(2000, NULL, NULL, 0); #endif if(!devicelist) return false; UPNPUrls urls; IGDdatas data; char lanAddr[64]; hr = UPNP_GetValidIGD(devicelist, &urls, &data, lanAddr, sizeof(lanAddr)); if(hr == 1 || hr == 2) { std::stringstream p; p << port; #ifdef UPNPDISCOVER_SUCCESS hr = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, p.str().c_str(), p.str().c_str(), lanAddr, "Return To The Roots", "TCP", NULL, NULL); #else hr = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, p.str().c_str(), p.str().c_str(), lanAddr, "Return To The Roots", "TCP", NULL); #endif } freeUPNPDevlist(devicelist); if(hr == 0) return true; #endif return false; }
// -------------------------------------------------------------------------------------------- // EditierDialog anzeigen; // in ulCnt wird die Anzahl und in ppIOG werden die ObjektGeometrien der aktuell editierten // Objekte übergeben; // wenn Linienobjekte verlängert werden sollen, werden in iCloseCnt, plCloseX und plCloseY // die Anzahl und die Koordinaten der Endpunkte dieser Linienobjekte erwartet; // in piResult wird das Ergebnis der DialogBedienung (OK, Abbrechen, Fortsetzen, Inselbeginn) // zurückgegeben STDMETHODIMP CGeoEditExtension::ShowEditDialog (LPCSTR pcCapt, LPCSTR pcRegKey, ulong ulCnt, IUnknown** ppIOG, int* piGrabCnt, long* pGrabPktX, long* pGrabPktY, HRESULT hrComBorder, long lComONr, int iCloseCnt, long* plCloseX, long* plCloseY, int* piResult) { _ASSERTE (pcRegKey != NULL); _ASSERTE (piResult != NULL); // Neueditierung (true) oder Modifizierung (false), also z.B. Linienverlängerung bzw. // Inselergänzung bool bNewEdit = (0 == strcmp (g_cbGeoEditNewPoint, pcRegKey) || 0 == strcmp (g_cbGeoEditNewLine, pcRegKey) || 0 == strcmp (g_cbGeoEditNewArea, pcRegKey)); // !!!! es wird vorläufig nur EIN ppIOG-Objekt berücksichtigt !!!!! WObjektGeometrie wObj = *ppIOG; // mit implizitem QueryInterface CEditDlg sheetED (pcCapt, wObj, lComONr, piGrabCnt); // eigene Pages zum Einfügen in sheetED CEditBaseDlg pageEB (pGrabPktX, pGrabPktY, hrComBorder, iCloseCnt, plCloseX, plCloseY, bNewEdit); CEditCoordDlg pageEC (iCloseCnt, plCloseX, plCloseY); sheetED.AddPage (&pageEB); // 1. Page einfügen sheetED.AddPage (&pageEC); // nächste Page hinzufügen // zusätzliche Pages über die Registry nachladen sheetED.LoadExtPagesFromRegistry (pcRegKey, ulCnt, ppIOG); sheetED.Show(); if (piGrabCnt) *piGrabCnt = sheetED.GetGrabCnt(); *piResult = sheetED.Result(); int iMarkGr; // Markergröße Rectangle Rec; // rechteckiger Bereich, der (evtl.) gezeichnet werden soll m_wTopObjs->GetMarkerSizeBS (&iMarkGr); wObj->RectangleToDraw2 ((RECT*)&Rec, iMarkGr); HRESULT hrRet = S_OK; switch (*piResult) { case IDOK: if (bNewEdit) { BSTR bsObjName = A2BSTR(""); // noch leerer Objektname !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! hrRet = StoreNewObject (wObj, bsObjName); if (S_FALSE == hrRet) { // Objekt wurde wieder gelöscht, IDCANCEL simulieren if (piGrabCnt) *piGrabCnt = 0; DEX_RePaintRectWait (Rec); // Objekt auf Bildschirm durch Zeichnen löschen *piResult = IDCANCEL; return S_FALSE; } } // die Linienverlängerungen werden in LineElongation.cpp abgespeichert; // Flächenobjekte mit hinzugefügten Inseln werden in IslandAdd.cpp abgespeichert else if (0 != strcmp (g_cbGeoEditLineElongat, pcRegKey) && 0 != strcmp (g_cbGeoEditIslandAdd, pcRegKey)) { _ASSERTE (false); hrRet = E_UNEXPECTED; } if (piGrabCnt) *piGrabCnt = 0; // für "Insel hinzufügen" erfolgt das Zeichnen wegen evtl. Geometriefehler auf // jeden Fall in StoreAreaWithNewIsland() if (0 != strcmp (g_cbGeoEditIslandAdd, pcRegKey)) DEX_RePaintRectWait (Rec); break; case IDCANCEL: if (piGrabCnt) *piGrabCnt = 0; DEX_RePaintRectWait (Rec); // Objekt auf Bildschirm durch Zeichnen löschen break; case IDB_CONTINUE: case IDB_ISLAND: break; default: _ASSERTE (false); hrRet = E_UNEXPECTED; break; } return hrRet; } // ShowEditDialog
// -------------------------------------------------------------------------------------------- // Doppelklick auf linke Maustaste void CNewArea::LeftDoubleClick (void) { // Zeichenoperation beenden if (m_wDragObj.IsValid()) { m_wDragObj->DragTerminate(); m_wDragObj.Assign (NULL); } m_pVWnd->MouseTrap (FALSE); // letzte Kontur (evtl.) noch schließen KoOrd* plXK; KoOrd* plYK; long lCnt; long* plCnt; m_wObj->GetX ((void**)&plXK); m_wObj->GetY ((void**)&plYK); m_wObj->GetCnt (&lCnt); m_wObj->GetKCnt (&m_iKCnt); m_wObj->GetLPCnt (&plCnt); long lSPA = plCnt[m_iKCnt-1]; // Anzahl der Stützpunkte der letzten Kontur long lInd = lCnt - lSPA; // Index des Anfangspunktes der letzten Kontur if (lSPA >= 2 && (plXK[lInd] != plXK[lCnt-1] || // Kontur ist noch nicht plYK[lInd] != plYK[lCnt-1])) // zugezogen m_wObj->AddPunkt (plXK[lInd], plYK[lInd], -1, m_iKCnt-1); // zuziehen ulong ulLastIdent = DEX_GetLastIdent(); // Bereich neu zeichnen vorbereiten int iMarkGr; // Markergröße Rectangle Rec; // umschließendes Rechteck des aktuell editierten Objektes m_wTopObjs->GetMarkerSizeBS (&iMarkGr); m_wObj->RectangleToDraw2 ((RECT*)&Rec, iMarkGr); if (0 != ulLastIdent && (ulong)-1 != ulLastIdent) // in der Projekt-INI steht ein gültiger Identifikator { // Identifikator sowie Objektname hinzufügen und neues Objekt speichern m_wObj->SetIdent (ulLastIdent); BSTR bsObjName = A2BSTR(""); // noch leerer Objektname !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! m_wEdExSite->StoreNewObject (m_wObj, bsObjName); } else // in der Projekt-INI steht kein gültiger Identifikator ShowDialogForArea(); // Bereich neu zeichnen m_wTopObjs->DeleteTopicalObjectGeometry (m_wObj); m_wObj.Assign (NULL); DEX_RePaintRectWait (Rec); m_pVWnd->Update(); // sofort zeichnen if (m_wRestrLine1.IsValid() || m_wRestrLine2.IsValid()) DEX_ChangeActiveTool (ID_TOOL_DESIGNSTOP); // DesignMode beenden /* Können die nachfolgenden Zeilen wegen des am 24.02.99 in CGeoEditExtension::WindowsNotification (GeoEdit.cpp) eingefügten "case WM_MOUSEMOVE:" jetzt wegfallen ???????? CursForm CF; // wieder Erläuterung der aktuellen CursorForm in Statuszeile m_wEdExSite->GetCursor (&CF); m_wEdExSite->SetCursor (CF, TRUE); */ } // LeftDoubleClick
LRESULT CLXWebSiteApp::OnFileNewSite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { // USES_CONVERSION; CComPtr<ILXFrameworkFrame> lxframe; m_spAddinSite->GetFrame(&lxframe); CComQIPtr<IUIWnd> wnd = lxframe; HWND hWnd; wnd->get_hwnd(&hWnd); if (TRUE) { CPropertySheet* sheet = new CPropertySheet("New Site", 0, hWnd); // sheet->SetWizardMode(); // sheet->m_psh.dwFlags |= PSH_WIZARD97; sheet->SetWatermark(MAKEINTRESOURCE(IDB_NEWSITE_WATERMARK)); CNewSiteData data; CNewSiteBeginDlg begindlg; begindlg.m_psp.dwFlags |= PSP_HIDEHEADER; begindlg.SetHeaderTitle("LocalSite"); CNewSiteFinishDlg finishdlg; finishdlg.m_psp.dwFlags |= PSP_HIDEHEADER; finishdlg.SetHeaderTitle("LocalSite"); CNewSiteSingleWorkgroupDlg singleworkdlg; singleworkdlg.m_data = &data; singleworkdlg.m_nWorkgroup = 0; singleworkdlg.SetHeaderTitle("SingleWorkgroup"); CNewSiteLocalSiteOptionsDlg localsitedlg; localsitedlg.m_data = &data; localsitedlg.m_nLocalSite = 0; localsitedlg.SetHeaderTitle("LocalSite"); CNewSiteLocalNameDlg localnamedlg; localnamedlg.m_data = &data; localnamedlg.SetHeaderTitle("LocalName"); CNewSiteFTPDlg ftpdlg; ftpdlg.m_data = &data; ftpdlg.SetHeaderTitle("FTP"); CNewSiteWorkgroupOptionsDlg workoptionsdlg; workoptionsdlg.m_data = &data; workoptionsdlg.SetHeaderTitle("FTP"); CNewSiteWorkgroupLogonDlg worklogondlg; worklogondlg.m_data = &data; worklogondlg.m_server = L"213.115.5.39"; worklogondlg.m_username = L"Sigurd"; worklogondlg.m_password = L"testing"; worklogondlg.SetHeaderTitle("Workgroup Logon"); sheet->AddPage(begindlg); sheet->AddPage(singleworkdlg); sheet->AddPage(localsitedlg); sheet->AddPage(localnamedlg); sheet->AddPage(ftpdlg); sheet->AddPage(finishdlg); sheet->AddPage(workoptionsdlg); sheet->AddPage(worklogondlg); sheet->DoModal(); if (singleworkdlg.m_nWorkgroup == 0) { if (localnamedlg.m_localSitePath.GetLength() && localnamedlg.m_siteName.GetLength()) { CComObject<CWebSite>* pWebSite; CComObject<CWebSite>::CreateInstance(&pWebSite); if (pWebSite) { pWebSite->AddRef(); pWebSite->SetApp(this); HRESULT hr = pWebSite->m_webSite.CoCreateInstance(CLSID_LXLocalWebSite); if (SUCCEEDED(hr)) { HRESULT hr = pWebSite->m_webSite->NewDocument(A2BSTR(localnamedlg.m_localSitePath), A2BSTR(localnamedlg.m_siteName)); if (SUCCEEDED(hr)) { CComQIPtr<IEFrame> eframe = lxframe; pWebSite->ShowViews(eframe); return 0; } else { // TODO, use IErrorInfo etc MessageBox(hWnd, "Failed to create Local WebSite", "LXWebSite", MB_OK); } } pWebSite->Release(); } } } else if (singleworkdlg.m_nWorkgroup == 1) { #if 0 COAUTHIDENTITY cauthid; cauthid.User = worklogondlg.m_username; cauthid.UserLength = worklogondlg.m_username.length(); cauthid.Domain = L"WORKGROUP"; cauthid.DomainLength = wcslen(cauthid.Domain); cauthid.Password = worklogondlg.m_password; cauthid.PasswordLength = worklogondlg.m_password.length(); cauthid.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; COAUTHINFO cauthi; cauthi.dwAuthnSvc = RPC_C_AUTHN_WINNT; cauthi.dwAuthzSvc = RPC_C_AUTHZ_NONE; cauthi.pwszServerPrincName = NULL; cauthi.dwAuthnLevel = RPC_C_AUTHN_LEVEL_CONNECT; cauthi.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE; cauthi.pAuthIdentityData = &cauthid; cauthi.dwCapabilities = EOAC_NONE; COSERVERINFO csi; csi.dwReserved1 = 0; csi.pwszName = worklogondlg.m_server; csi.pAuthInfo = &cauthi; csi.dwReserved2 = 0; MULTI_QI qi; qi.pIID = &XMILLWEBLib::IID_IXmillWebSite; qi.pItf = NULL; qi.hr = 0; HRESULT hr = CoCreateInstanceEx(XMILLWEBLib::CLSID_XmillWebSite, NULL, CLSCTX_SERVER/*CLSCTX_ALL*/, &csi, 1, &qi); if (SUCCEEDED(qi.hr)) { XMILLWEBLib::IXmillWebSitePtr webSite;//(L"XMillWeb.WebSite"); CComQIPtr<IClientSecurity> csec = qi.pItf; hr = CoSetProxyBlanket(qi.pItf, cauthi.dwAuthnSvc, cauthi.dwAuthzSvc, cauthi.pwszServerPrincName, cauthi.dwAuthnLevel, cauthi.dwImpersonationLevel, cauthi.pAuthIdentityData, cauthi.dwCapabilities); webSite = qi.pItf; qi.pItf->Release(); try { CComPtr<ILDOMDocument> document; document.CoCreateInstance(CLSID_LDOMDocument); VARIANT_BOOL bsuccess; document->loadXML(L"<website/>", &bsuccess); CComPtr<ILDOMElement> documentElement; document->get_documentElement(&documentElement); documentElement->setAttribute(L"name", L"TestSite1"); BSTR bxml; document->saveXML(NULL, &bxml); _bstr_t xml = _bstr_t(bxml, false); long websiteID = webSite->NewWebSite(xml); } catch (_com_error &e) { ComError(e); } } #endif } } return 0; }
STDMETHODIMP CMapiWrapper::GetProfilelist(VARIANT *Profiles,BSTR *statusmessage) { // TODO: Add your implementation code here dlog.trace(L" Begin Mapiwrapper GetProfilelist"); HRESULT hr = S_OK; CComBSTR status = L""; hr = MAPIInitialize(NULL); if( hr != S_OK) { LPCSTR temp = format_error(hr).c_str(); status.AppendBSTR(L" MapiInitialize error "); status.AppendBSTR(A2BSTR(temp)); dlog.err(status); *statusmessage = status; return hr; } Zimbra::Mapi::Memory::SetMemAllocRoutines(NULL, MAPIAllocateBuffer, MAPIAllocateMore, MAPIFreeBuffer); vector<string> vProfileList; hr = exchadmin->GetAllProfiles(vProfileList); if( hr != S_OK) { LPCSTR temp = format_error(hr).c_str(); status.AppendBSTR(L" GetAllProfiles error "); status.AppendBSTR(A2BSTR(temp)); dlog.err(status); *statusmessage = status; return hr; } if(vProfileList.size() == 0) { dlog.err(L"No profiles returned for GetAllProfiles"); status = L"No profiles"; *statusmessage = status; status.Detach(); return S_OK; } vector<CComBSTR> tempvectors; std::vector<string>::iterator its; for (its = (vProfileList.begin()); its != vProfileList.end(); its++) { string str = (*its).c_str(); CComBSTR temp = SysAllocString(str_to_wstr(str).c_str()); tempvectors.push_back(temp); } VariantInit(Profiles); Profiles->vt = VT_ARRAY | VT_BSTR; SAFEARRAY *psa; SAFEARRAYBOUND bounds = { (ULONG)vProfileList.size(), 0 }; psa = SafeArrayCreate(VT_BSTR, 1, &bounds); BSTR *bstrArray; SafeArrayAccessData(psa, (void **)&bstrArray); std::vector<CComBSTR>::iterator it; int i = 0; for (it = (tempvectors.begin()); it != tempvectors.end(); it++, i++) bstrArray[i] = SysAllocString((*it).m_str); SafeArrayUnaccessData(psa); Profiles->parray = psa; *statusmessage = status; status.Detach(); MAPIUninitialize(); dlog.trace(L" End Mapiwrapper GetProfilelist"); return hr; }
STDMETHODIMP CSVNStatus::get_name(BSTR *pVal) { *pVal = A2BSTR(pszName); return S_OK; }
LRESULT CLXWebSiteApp::OnFileServers(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { CComPtr<ILXFrameworkFrame> lxframe; m_spAddinSite->GetFrame(&lxframe); CComQIPtr<IUIWnd> wnd = lxframe; HWND hWnd; wnd->get_hwnd(&hWnd); CServersDlg dlg; for (int i = 0; i < m_servers.GetSize(); i++) { CComObject<CServer>* pServer; CComObject<CServer>::CreateInstance(&pServer); pServer->AddRef(); *pServer = *m_servers[i]; dlg.m_servers.Add(pServer); } if (dlg.DoModal() == IDOK) { int i; for (i = 0; i < m_servers.GetSize(); i++) { m_servers[i]->Release(); } m_servers.RemoveAll(); for (i = 0; i < dlg.m_servers.GetSize(); i++) { CComObject<CServer>* pServer; CComObject<CServer>::CreateInstance(&pServer); pServer->AddRef(); *pServer = *dlg.m_servers[i]; m_servers.Add(pServer); } TCHAR appdata[MAX_PATH]; SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata); TCHAR pathname[MAX_PATH]; _makepath(pathname, NULL, appdata, "LXFramework", NULL); _mkdir(pathname); TCHAR filename[MAX_PATH]; _makepath(filename, NULL, pathname, "servers.xml", NULL); CComPtr<ILDOMDocument> xmldocument; if (SUCCEEDED(xmldocument.CoCreateInstance(CLSID_LDOMDocument))) { VARIANT_BOOL success; xmldocument->loadXML(L"<servers/>", &success); if (success) { CComPtr<ILDOMElement> documentElement; xmldocument->get_documentElement(&documentElement); for (int i = 0; i < m_servers.GetSize(); i++) { CServer* pServer = m_servers[i]; CComPtr<ILDOMElement> element; xmldocument->createElement(L"server", &element); if (element) { element->setAttribute(L"name", pServer->m_name); element->setAttribute(L"serverName", pServer->m_serverName); element->setAttribute(L"userName", pServer->m_userName); element->setAttribute(L"password", pServer->m_password); element->setAttribute(L"directory", pServer->m_directory); documentElement->appendChild(element, NULL); } } xmldocument->save(A2BSTR(filename), &success); if (success) { return 0; } } } MessageBox(hWnd, "Failed to save servers configuration", "LXWebSite", MB_OK); } return 0; }
LRESULT CLXWebSiteApp::OnFileOpenSite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { CComPtr<ILXFrameworkFrame> lxframe; m_spAddinSite->GetFrame(&lxframe); CComQIPtr<IUIWnd> wnd = lxframe; HWND hWnd; wnd->get_hwnd(&hWnd); static LPCTSTR FilesFilter = _T( "All Files\0*.*\0" "Site (*.lxsite)\0*.lxsite\0" ); TCHAR sbuffer[4096]; strcpy(sbuffer, ""); // Initial filename TCHAR curdir[MAX_PATH]; GetCurrentDirectory(sizeof(curdir), curdir); OPENFILENAME ofn = {0}; ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.hInstance = _Module.m_hInst; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrFile = sbuffer; ofn.nMaxFile = sizeof(sbuffer); ofn.lpstrInitialDir = curdir; ofn.lpstrFilter = FilesFilter; ofn.nFilterIndex = 2; if (GetOpenFileName(&ofn)) { CComObject<CWebSite>* pWebSite; CComObject<CWebSite>::CreateInstance(&pWebSite); if (pWebSite) { pWebSite->AddRef(); pWebSite->SetApp(this); HRESULT hr = pWebSite->LoadDocument(A2BSTR(sbuffer)); if (SUCCEEDED(hr)) { CComQIPtr<IEFrame> eframe = lxframe; pWebSite->ShowViews(eframe); return 0; } else { MessageBox(hWnd, "Failed to open website", "LXWebSite", MB_OK); } pWebSite->Release(); } else { MessageBox(hWnd, "Failed to create website document", "LXWebSite", MB_OK); } } return 0; }
STDMETHODIMP CLXWebSiteApp::SetSite(ILXAddinSite* pSite) { m_spAddinSite = pSite; { TCHAR appdata[MAX_PATH]; SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata); TCHAR pathname[MAX_PATH]; _makepath(pathname, NULL, appdata, "LXFramework", NULL); TCHAR filename[MAX_PATH]; _makepath(filename, NULL, pathname, "servers.xml", NULL); CComPtr<ILDOMDocument> xmldocument; if (SUCCEEDED(xmldocument.CoCreateInstance(CLSID_LDOMDocument))) { VARIANT_BOOL success; xmldocument->load(A2BSTR(filename), &success); CComPtr<ILDOMElement> documentElement; xmldocument->get_documentElement(&documentElement); if (documentElement) { CComPtr<ILDOMNode> node; documentElement->get_firstChild(&node); while (node) { CComQIPtr<ILDOMElement> element = node; if (element) { CComBSTR tagName; element->get_tagName(&tagName); if (!wcscmp(tagName, L"server")) { CComObject<CServer>* pServer; CComObject<CServer>::CreateInstance(&pServer); pServer->AddRef(); element->getAttribute(L"name", &pServer->m_name); element->getAttribute(L"serverName", &pServer->m_serverName); element->getAttribute(L"directory", &pServer->m_directory); element->getAttribute(L"userName", &pServer->m_userName); element->getAttribute(L"password", &pServer->m_password); m_servers.Add(pServer); } } CComPtr<ILDOMNode> nextSibling; node->get_nextSibling(&nextSibling); node = nextSibling; } } } } if (m_spAddinSite) { CComPtr<ILXFrameworkFrame> lxframe; m_spAddinSite->GetFrame(&lxframe); CComQIPtr<IUIFrame> frame = lxframe; CComPtr<IUIManager> uiManager; m_spAddinSite->GetUIManager((IUnknown**)&uiManager); { CComPtr<IUIMenuDlg> menuDlg; uiManager->CreateMenuDlg(&menuDlg); CComPtr<IMenuItem> menuItem; uiManager->FindMenu(_Module.GetResourceInstance(), IDR_MAINFRAME, &menuItem); CComPtr<IMenuItem> menuItem0 = menuItem; //menuItem->GetSubMenu(0, &menuItem0); menuDlg->InitMenu(menuItem0, this/*CComQIPtr<ICommandTarget>(GetFrame())*/, -1); CComPtr<IUIDlgSite> dlgsite; uiManager->CreateDlgSite(L"MenuBar", NULL, menuDlg, &dlgsite); frame->FloatControlBar(dlgsite, CPoint(0,0), CBRS_SIZE_DYNAMIC); } #if 0 { CComPtr<IUIRegisteredDlg> rdlg; uiManager->RegisterDlg(70/*TODO?IDR_MAINFRAME*/, L"Menubar", 0, &rdlg); CComPtr<IUIDlg> dlg; rdlg->CreateDlg(&dlg); CComPtr<IUIDlgSite> dlgsite; uiManager->CreateDlgSite(dlg, &dlgsite); frame->FloatControlBar(dlgsite, CPoint(0,0), CBRS_SIZE_DYNAMIC); } #endif } return S_OK; }