Пример #1
0
bool CFYSPrintDoc::SendXmlDoc(CString strURL)
{
	CComPtr<IWebBrowser2> pBrowser;
	HRESULT hr = pBrowser.CoCreateInstance(_bstr_t("InternetExplorer.Application"));
	if (hr != S_OK)
	{
		SetError("Failed to start IE!.");
		return false;
	}
	
	CString strSendFile = m_strFYSTempPath + FORYOURSOUL_TXT;
	CHTTPClient *pHttpClient = new CHTTPClient(pBrowser);
	pHttpClient->AddPostArguments("File1", strSendFile, true);
	BOOL bRetVal = pHttpClient->Request(strURL, CHTTPClient::RequestPostMethodMultiPartsFormData);
	//pHttpClient->Request("http://localhost/simpleupload/Receiver.aspx", CHTTPClient::RequestPostMethodMultiPartsFormData);

	VARIANT_BOOL bBusy = true;
	int ix = 300;
	while (bBusy)
	{
		::Sleep(100);
		pBrowser->get_Busy(&bBusy);
		if (--ix <= 0)
			break;
	}

	if (!bRetVal)
	{
		m_strErrorMsg.Format("Failed to send project to the website.");
		return false;
	}

	CComPtr<IDispatch> spDisp;

	hr = pBrowser->get_Document(&spDisp);
	if (FAILED(hr) || !spDisp)
	{
		delete pHttpClient;
		return false;
	}

	CComQIPtr<IHTMLDocument2> spDoc(spDisp);
	if (!spDoc)
	{
		m_strErrorMsg.Format("Invalid response from website after sending project successfully.");
		delete pHttpClient;
		return false;
	}
	
	CComPtr<IHTMLElement> spElem;
	hr = spDoc->get_body(&spElem);
	if (FAILED(hr) || !spDisp)
	{
		m_strErrorMsg.Format("Invalid response from website after sending project successfully.");
		delete pHttpClient;
		return false;
	}

	CString strTxt;
	CComBSTR bstr;
	spElem->get_innerHTML(&bstr);
	strTxt = bstr;

#ifdef _DEBUG
	spElem->get_innerText(&bstr);
	strTxt = bstr;
#endif

	delete pHttpClient;

	if (strTxt.Find("<FYS_DATASTREAMACKNOWLEDGMENT") < 0)
	{
		m_strErrorMsg.Format("Invalid response from website after sending project successfully.");
		return false;
	}

	strTxt = strTxt.Mid(strTxt.Find("<FYS_DATASTREAMACKNOWLEDGMENT"));

	CString strSrchPtrn("//FYS_DATASTREAMACKNOWLEDGMENT");
	CXMLDocument* pXMLDoc = new CXMLDocument;
	pXMLDoc->LoadString(strTxt);
	pXMLDoc->RegisterCallback(MyXMLCallback, (LPARAM)this);
	if (pXMLDoc->WalkTree(strSrchPtrn) != S_OK)
	{
		pXMLDoc->SetFYSError();
		m_strErrorMsg = pXMLDoc->GetErrorMsg();
		delete pXMLDoc;
		return false;
	}

	delete pXMLDoc;
	return true;
}
Пример #2
0
void CPhotoManager::Callback(IDispatch* pDisp1, IDispatch* pDisp2, DISPID id, VARIANT* pVarResult)
{
	if (!pDisp1)
		return;

	HRESULT hr = S_OK;
	if (id == DISPID_MOUSEOVER)
	{
		CComQIPtr<IHTMLElement2> spElem2(pDisp1);
		if (!spElem2)
			return;

		hr = spElem2->focus();
		
	}
	else
	if (id == DISPID_MOUSEDOWN)
	{
		CComQIPtr<IHTMLElement> spElem(pDisp1);
		if (!spElem)
			return;
		
		CComPtr<IDispatch> spDisp;
		spElem->get_document(&spDisp);
		CComQIPtr<IHTMLDocument2> spDoc(spDisp);
		if (FAILED(hr) || !spDoc)
			return;
		
		CComPtr<IHTMLWindow2> spWnd;
		HRESULT hr = spDoc->get_parentWindow(&spWnd);
		if (FAILED(hr) || !spWnd)
			return;
		
		CComPtr<IHTMLEventObj> spEventObj;
		hr = spWnd->get_event(&spEventObj);
		if (FAILED(hr) || !spEventObj)
			return;
		
		long lVal;
		spEventObj->get_button(&lVal);
		if ( lVal == 1) // 1 = left button is pressed 		
			hr = spElem->click();		
	}
	else
	if (id == DISPID_MYCLICK)
	{
		CComQIPtr<IHTMLElement> spElem(pDisp1);
		if (!spElem)
			return;

		CComQIPtr<IHTMLImgElement> spImgElem(pDisp1);
		if (!spImgElem)
			return;

		CComPtr<IDispatch> spDisp;
		hr = spElem->get_document(&spDisp);
		if (FAILED(hr) || !spDisp)
			return;

		CComQIPtr<IHTMLDocument2> spDoc(spDisp);
		if (!spDoc)
			return;

		CString strFileName;
		bool bOK = AddAPhoto((IHTMLDocument2*)spDoc, strFileName);
		if (!bOK)
			return;
		
		CComQIPtr<IMarkupServices2> spMarkup2 = spDoc;
		if (spMarkup2)
			hr = spMarkup2->BeginUndoUnit(L"Add a Photo");

		long lElemWidth = 0;
		long lElemHeight = 0;
		GetElemSize(spElem, lElemWidth, lElemHeight);
		if (!lElemWidth && !lElemHeight)
		{
			GetImgElemSize(spImgElem, lElemWidth, lElemHeight);
			SetElemSize(spElem, lElemWidth, lElemHeight);
		}

		long lImageWidth = 0;
		long lImageHeight = 0;
		CImage Image(strFileName);
		Image.GetNativeImageSize(lImageWidth, lImageHeight);

		#define SHIFT (GetAsyncKeyState(VK_SHIFT) < 0)
		if (SHIFT)
			::MessageBox(NULL, "The photo will be embedded in the email message.", g_szAppName, MB_OK);
		else
		{
			CString strURL = m_strHost + "/cgi-bin/flashalbum/cmaddaphoto.pl";

			// strFormDataPairs is a string of name/value pairs as follows "name1:value1|\nname2:value2|\n"
			CString strFormDataPairs;
			strFormDataPairs += "inputfile:~" + strFileName + "|\n";

			CUploadImages Upload(ULI_NOUPSIZE /*| ULI_LEAVETEMP | ULI_DEBUG*/);
			CString strResult;
			Upload.UploadImages(strURL, strFormDataPairs, lElemWidth, lElemHeight, 70/*nQuality*/, strResult);
			if (strResult.Find("error") < 0 && strResult.Find("http") >= 0)
			{
				GetImageHost(strResult);
				strFileName = strResult;
				//::MessageBox(NULL, String("The photo was uploaded first to %s.", strFileName), g_szAppName, MB_OK);
			}
			else
			{
				CString szMsg;
				szMsg.LoadString(IDS_ADDAPHOTO_ERROR);
				::MessageBox(NULL, szMsg, g_szAppName, MB_OK);
				if (spMarkup2)
					hr = spMarkup2->EndUndoUnit();
				return;
			}
		}

		if (lImageWidth && lImageHeight)
		{
			ScaleToFit(&lElemWidth, &lElemHeight, lImageWidth, lImageHeight, true/*bUseSmallerFactor*/);
			SetImgElemSize(spImgElem, lElemWidth, lElemHeight);
			SetElemStyle(spElem, lElemWidth, lElemHeight);
		}

		hr = spImgElem->put_src(CComBSTR(strFileName));

		if (spMarkup2)
		{
			hr = spMarkup2->EndUndoUnit();
			CComQIPtr<IMarkupContainer2> spMarkupCont2 = spMarkup2;
			if (spMarkupCont2)
			{
				long l = spMarkupCont2->GetVersionNumber();
				l += 0;
			}
		}

		if (FAILED(hr))
			return;
	}
}
Пример #3
0
void CFlashManager::FlashCallback(IDispatch * pDisp1, IDispatch * pDisp2, DISPID id, VARIANT* pVarResult)
{
	CFuncLog log(g_pLog, "CFlashManager::FlashCallback()");
	
	if (!pDisp1)
		return;

	if (id == DISPID_MOUSEOVER)
	{
		// Play flash
		//Flash_Play(pDisp2); // Interferes with interactive flash, i.e. Care Bear game

		// Set contentEditable false (true if alt key pressed)
		CComQIPtr<IHTMLElement> spElem(pDisp1);
		if (!spElem)
			return;
			
		HRESULT hr = S_OK;
		CComPtr<IDispatch> spDisp;
		hr = spElem->get_document(&spDisp);
		if (FAILED(hr) || !spDisp)
			return;

		CComQIPtr<IHTMLDocument2> spDoc(spDisp);
		if (!spDoc)
			return;

		CComPtr<IHTMLWindow2> spWnd;
		hr = spDoc->get_parentWindow(&spWnd);
		if (FAILED(hr) || !spWnd)
			return;
		
		CComPtr<IHTMLEventObj> spEventObj;
		hr = spWnd->get_event(&spEventObj);
		if (FAILED(hr) || !spEventObj)
			return;
		
		VARIANT_BOOL bVal;
		spEventObj->get_altKey(&bVal);

		if ( bVal ) 
			SetContentEditable(pDisp1, TRUE);
		else
			SetContentEditable(pDisp1, FALSE);	
	}
	else if (id == DISPID_MOUSEDOWN)
	{
		CComQIPtr<IHTMLElement> spElem(pDisp1);
		if (!spElem)
			return;
		
		CComPtr<IDispatch> spDisp;
		HRESULT hr = spElem->get_document(&spDisp);
		CComQIPtr<IHTMLDocument2> spDoc(spDisp);
		if (FAILED(hr) || !spDoc)
			return;
		
		CComPtr<IHTMLWindow2> spWnd;
		hr = spDoc->get_parentWindow(&spWnd);
		if (FAILED(hr) || !spWnd)
			return;
		
		CComPtr<IHTMLEventObj> spEventObj;
		hr = spWnd->get_event(&spEventObj);
		if (FAILED(hr) || !spEventObj)
			return;
		
		long lVal;
		spEventObj->get_button(&lVal);
		if ( lVal == 1) // 1 = left button is pressed 		
			hr = spElem->click();		
	}
	else if (id == DISPID_DRAGEND)
	{
		// New flash elements added, re-enable.
		CComQIPtr<IHTMLElement> spElem(pDisp1);
		if (!spElem)
			return;

		HRESULT hr = S_OK;
		CComPtr<IDispatch> spDisp;
		hr = spElem->get_document(&spDisp);
		if (FAILED(hr) || !spDisp)
			return;

		CComQIPtr<IHTMLDocument2> spDoc(spDisp);
		if (!spDoc)
			return;
		
		Enable(spDoc, FALSE);
	}
	else if (id == DISPID_PASTE) 
	{
		CComQIPtr<IHTMLDocument2> spDoc(pDisp1);
		if (!spDoc)
			return;

		if (m_bPasteTimerInUse)
			return;

		m_pPrePasteTimerDoc = spDoc;
		SetTimer(IDT_PASTE_TIMER, 300, NULL);
		m_bPasteTimerInUse = true;
	}
	else if (id == DISPID_DOCMOUSEDOWN) 
	{
		CComQIPtr<IHTMLDocument2> spDoc(pDisp1);
		if (!spDoc)
			return;

		CComPtr<IHTMLWindow2> spWnd;
		HRESULT hr = spDoc->get_parentWindow(&spWnd);
		if (FAILED(hr) || !spWnd)
			return;
		
		CComPtr<IHTMLEventObj> spEventObj;
		hr = spWnd->get_event(&spEventObj);
		if (FAILED(hr) || !spEventObj)
			return;
		
		VARIANT_BOOL bVal = VARIANT_FALSE;
		spEventObj->get_ctrlKey(&bVal);

		if (bVal) 
			Activate((IHTMLDocument2*)spDoc, true, true);

	}
}