コード例 #1
0
ファイル: WordPlusDoc.cpp プロジェクト: tangramfx/TANGRAM
		LRESULT CTangramWordPlusDocWnd::OOpenDoc(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& )
		{
			map<LONG, Office::_CustomTaskPane*>::iterator it = m_pWordAddin->m_mapTaskPaneMap.find((LONG)m_hWnd);
			if (it != m_pWordAddin->m_mapTaskPaneMap.end())
			{
				it->second->put_Visible(false);
				m_pWordAddin->m_mapTaskPaneMap.erase(it);
			}
			if(m_pWordAddin->m_pCurWordPlusDocWnd==NULL)
				return 0;
			CTangramWordPlusDocWnd* pWnd = m_pWordAddin->m_pCurWordPlusDocWnd;
			pWnd->m_pWordPlusDoc = (CTangramWordPlusDoc*)wParam;
			if(lParam==1&& pWnd)
			{
				CComBSTR bstrXml(L"");
				m_pWordAddin->GetTangramXml(pWnd->m_pWordPlusDoc->m_pDoc,CComBSTR(L"Tangrams"),&bstrXml);
				CString strTemplateXml =  OLE2T(bstrXml);
				pWnd->m_pWordPlusDoc->m_strDocXml = strTemplateXml;

				if (strTemplateXml != _T(""))
				{
					CTangramXmlParse m_Parse;
					if (m_Parse.LoadXml(strTemplateXml) || m_Parse.LoadFile(strTemplateXml))
					{
						CTangramXmlParse* pParse = m_Parse.GetChild(_T("TaskPaneUI"));
						if (pParse)
							pWnd->m_pWordPlusDoc->m_strTaskPaneXml = pParse->xml();
						pParse = m_Parse.GetChild(_T("DocumentUI"));
						if (pParse)
						{
							CTangramWordPlusDoc* pWordDocument = pWnd->m_pWordPlusDoc;
							theApp.m_pTangramCore->CreateTangram((LONGLONG)pWnd->m_hWnd, &pWordDocument->m_pTangram);
							if (pWordDocument->m_pTangram)
							{
								pWordDocument->m_pTangram->put_External(pWordDocument->m_pDoc);
								pWordDocument->m_pTangram->CreateFrame(CComVariant(0), CComVariant((LONGLONG)m_pWordAddin->m_pCurWordPlusDocWnd->m_hDocWnd), CComBSTR(L"Document"), &pWordDocument->m_pFrame);
								if (pWordDocument->m_pFrame)
								{
									CString strXml = pParse->xml();
									CComPtr<ITangramNode> pNode;
									pWordDocument->m_pFrame->Extend(CComBSTR(L"Default"), strXml.AllocSysString(), &pNode);
								}
							}
						}
						pParse = m_Parse.GetChild(_T("UserForms"));
						if (pParse)
						{
							int nCount = pParse->GetCount();
							if (nCount)
							{
								for (int i = 0; i < nCount; i++)
								{
									CTangramXmlParse* pParse2 = pParse->GetChild(i);
									m_pWordPlusDoc->m_mapUserFormScript[pParse2->name()] = pParse2->xml();
								}
							}
						}
					}
				}
			}
			return 0;
		}
コード例 #2
0
ファイル: NodeWnd.cpp プロジェクト: SmallMrKong/TANGRAM
LRESULT CNodeWnd::OnTangramMsg(WPARAM wParam, LPARAM lParam)
{	
	if (wParam == 0 && lParam)//Create CLRCtrl Node
	{
		CString strCnnID = (LPCTSTR)lParam;
		if (strCnnID.Find(_T(","))!=-1&&theApp.m_pCloudAddinCLRProxy)
		{
			m_pWndNode->m_pDisp = theApp.m_pCloudAddinCLRProxy->TangramCreateObject(strCnnID.AllocSysString(), (long)::GetParent(m_hWnd), m_pWndNode);

			if (m_pWndNode->m_pDisp)
			{
				CString strName = theApp.m_pCloudAddinCLRProxy->m_strObjTypeName;
				CWndNode* pNode = m_pWndNode->m_pRootObj;
				CWndNode* pParent = m_pWndNode->m_pParentObj;
				if (pParent)
				{
					strName = pParent->m_strName + _T("_") + strName;
				}
				auto it = pNode->m_mapLayoutNodes.find(strName);
				if (it != pNode->m_mapLayoutNodes.end())
				{
					BOOL bGetNew = false;
					int nIndex = 0;
					while (bGetNew == false)
					{
						CString strNewName = _T("");
						strNewName.Format(_T("%s%d"), strName, nIndex);
						it = pNode->m_mapLayoutNodes.find(strNewName);
						if (it == pNode->m_mapLayoutNodes.end())
						{
							strName = strNewName;
							break;
						}
						nIndex++;
					}
				}
				m_pWndNode->put_Attribute(CComBSTR(L"name"), strName.AllocSysString());
				m_pWndNode->m_strName = strName;
				m_pWndNode->m_pRootObj->m_mapLayoutNodes[strName] = m_pWndNode;
				m_pWndNode->m_nViewType = CLRCtrl;
				CAxWindow m_Wnd;
				m_Wnd.Attach(m_hWnd);
				CComPtr<IUnknown> pUnk;
				m_Wnd.AttachControl(m_pWndNode->m_pDisp, &pUnk);
				CComQIPtr<IOleInPlaceActiveObject> pIOleInPlaceActiveObject(m_pWndNode->m_pDisp);
				if (pIOleInPlaceActiveObject)
					m_pOleInPlaceActiveObject = pIOleInPlaceActiveObject.Detach();
				m_Wnd.Detach();
			}
		}
		else
		{
			BOOL bWebCtrl = false;
			CString strURL = _T("");
			strCnnID.MakeLower();
			auto nPos = strCnnID.Find(_T("http:"));
			if (nPos == -1)
				nPos = strCnnID.Find(_T("https:"));
			if (m_pWndNode->m_pFrame)
			{
				CComBSTR bstr;
				m_pWndNode->get_Attribute(CComBSTR("InitInfo"), &bstr);
				CString str = _T("");
				str += bstr;
				if (str != _T("") && m_pWndNode->m_pPage)
				{
					LRESULT hr = ::SendMessage(m_pWndNode->m_pPage->m_hWnd, WM_GETNODEINFO, (WPARAM)OLE2T(bstr), (LPARAM)::GetParent(m_hWnd));
					if (hr)
					{
						CString strInfo = _T("");
						CWindow m_wnd;
						m_wnd.Attach(::GetParent(m_hWnd));
						m_wnd.GetWindowText(strInfo);
						strCnnID += strInfo;
						m_wnd.Detach();
					}
				}
			}

			if (strCnnID.Find(_T("http://")) != -1 || strCnnID.Find(_T("https://")) != -1)
			{
				bWebCtrl = true;
				strURL = strCnnID;
				strCnnID = _T("shell.explorer.2");
			}

			if (strCnnID.Find(_T("res://")) != -1 || ::PathFileExists(strCnnID))
			{
				bWebCtrl = true;
				strURL = strCnnID;
				strCnnID = _T("shell.explorer.2");
			}

			if (strCnnID.CompareNoCase(_T("about:blank")) == 0)
			{
				bWebCtrl = true;
				strURL = strCnnID;
				strCnnID = _T("shell.explorer.2");
			}

			if (m_pWndNode->m_pDisp == NULL)
			{
				CComPtr<IDispatch> pDisp;
				HRESULT hr = pDisp.CoCreateInstance(CComBSTR(strCnnID));
				if (hr == S_OK)
				{
					m_pWndNode->m_pDisp = pDisp.Detach();
				}
			}
			if (m_pWndNode->m_pDisp)
			{
				m_pWndNode->m_pRootObj->m_mapLayoutNodes[m_pWndNode->m_strName] = m_pWndNode;
				m_pWndNode->m_nViewType = ActiveX;
				CAxWindow m_Wnd;
				m_Wnd.Attach(m_hWnd);
				CComPtr<IUnknown> pUnk;
				m_Wnd.AttachControl(m_pWndNode->m_pDisp, &pUnk);
				CComQIPtr<IWebBrowser2> pWebDisp(m_pWndNode->m_pDisp);
				if (pWebDisp)
				{
					bWebCtrl = true;
					m_pWndNode->m_strURL = strURL;
					if (m_pWndNode->m_strURL == _T(""))
						m_pWndNode->m_strURL = strCnnID;
					if (m_pWndNode->m_pFrame)
					{
						if (m_pWndNode->m_pPage)
							m_pWndNode->m_pPage->m_nWebViewCount++;

						m_pWndNode->m_pTangramNodeWBEvent = new CWndNodeWBEvent(m_pWndNode);
					}
					CComPtr<IAxWinAmbientDispatch> spHost;
					LRESULT hr = m_Wnd.QueryHost(&spHost);
					if (SUCCEEDED(hr))
					{
						CComBSTR bstr;
						m_pWndNode->get_Attribute(CComBSTR("scrollbar"), &bstr);
						CString str = OLE2T(bstr);
						if (str == _T("1"))
							spHost->put_DocHostFlags(DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);//DOCHOSTUIFLAG_DIALOG|
						else
							spHost->put_DocHostFlags(/*DOCHOSTUIFLAG_DIALOG|*/DOCHOSTUIFLAG_SCROLL_NO | DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);

						if (m_pWndNode->m_strURL != _T(""))
						{
							pWebDisp->Navigate2(&CComVariant(m_pWndNode->m_strURL), &CComVariant(navNoReadFromCache | navNoWriteToCache), NULL, NULL, NULL);
							m_pWndNode->m_bWebInit = true;
						}
					}
				}
				CComQIPtr<IOleInPlaceActiveObject> pIOleInPlaceActiveObject(m_pWndNode->m_pDisp);
				if (pIOleInPlaceActiveObject)
					m_pOleInPlaceActiveObject = pIOleInPlaceActiveObject.Detach();
				m_Wnd.Detach();
			}
		}
		return 0;
	}
	CTangramXmlParse* pNewNXmlode = (CTangramXmlParse*)wParam;
	if (pNewNXmlode == nullptr)
	{
		return 0;
	}
	CString str = (LPCTSTR)lParam;
	CString strID = pNewNXmlode->attr(_T("id"), _T(""));
	IWndNode* _pNode = nullptr;
	CWndNode* pOldNode = (CWndNode*)m_pWndNode;
	if (m_pWndNode->m_hHostWnd == 0)
	{
		RECT rc;
		::GetClientRect(m_hWnd, &rc);
		m_pWndNode->m_hHostWnd = ::CreateWindowEx(NULL, L"Tangram Window Class", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0, 0, rc.right, rc.bottom, m_hWnd, NULL, AfxGetInstanceHandle(), NULL);
		m_pWndNode->m_hChildHostWnd = ::CreateWindowEx(NULL, L"Tangram Window Class", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0, 0, rc.right, rc.bottom, m_pWndNode->m_hHostWnd, NULL, AfxGetInstanceHandle(), NULL);
		IWndFrame* pFrame = nullptr;
		CString strName = pNewNXmlode->attr(_T("name"), _T(""))+_T("frame");
		m_pWndNode->m_pPage->CreateFrame(CComVariant(0), CComVariant((long)pOldNode->m_hChildHostWnd), strName.AllocSysString(), &pFrame);
		IWndNode* pNode = nullptr;
		pFrame->Extend(CComBSTR(L""),str.AllocSysString(),&pNode);
		m_bEraseBkgnd = false;

		((CWndNode*)pNode)->m_pRootObj = m_pWndNode->m_pRootObj;
		((CWndNode*)pNode)->m_pParentObj = m_pWndNode->m_pParentObj;
		m_pWndNode->m_pRootObj->m_mapLayoutNodes[((CWndNode*)pNode)->m_strName] = (CWndNode*)pNode;
		CString strXml = ((CWndNode*)pNode)->m_pHostParse->xml();
		CTangramXmlParse* pNew = ((CWndNode*)pNode)->m_pHostParse;
		CTangramXmlParse* pOld = pOldNode->m_pHostParse;
		CTangramXmlParse* pParent = m_pWndNode->m_pHostParse->m_pParentParse;
		CTangramXmlParse* pRet = nullptr;
		if (pParent)
		{
			pRet = pParent->ReplaceNode(pOld, pNew, _T(""));
			CString str = pRet->xml();
			int nCount = pRet->GetCount();
			((CWndNode*)pNode)->m_pHostParse = pRet;
			m_pWndNode->m_pHostParse = pRet;

			CWndNode* pChildNode = nullptr;
			for (auto it2 : ((CWndNode*)pNode)->m_vChildNodes)
			{
				pChildNode = it2;
				pChildNode->m_pRootObj = m_pWndNode->m_pRootObj;
				CString strName = pChildNode->m_strName;
				for (int i = 0; i < nCount; i++)
				{
					CTangramXmlParse* child = pRet->GetChild(i);
					CString _strName = child->attr(_T("name"),_T(""));
					if (_strName.CompareNoCase(strName) == 0)
					{
						pChildNode->m_pHostParse = child;
						break;
					}
				}
			}
			m_pWndNode->m_vChildNodes.push_back(((CWndNode*)pNode));
		}

		strXml = m_pWndNode->m_pRootObj->m_pTangramParse->xml();
		theApp.m_pHostDesignUINode = m_pWndNode->m_pRootObj;
		if (theApp.m_pHostDesignUINode)
		{
			CTangramHtmlTreeWnd* pTreeCtrl = theApp.m_pDocDOMTree;
			pTreeCtrl->DeleteItem(theApp.m_pDocDOMTree->m_hFirstRoot);

			if (pTreeCtrl->m_pHostXmlParse)
			{
				delete pTreeCtrl->m_pHostXmlParse;
			}
			pTreeCtrl->m_pHostXmlParse = new CTangramXmlParse();
			pTreeCtrl->m_pHostXmlParse->LoadXml(strXml);
			pTreeCtrl->m_hFirstRoot = pTreeCtrl->LoadXmlFromXmlParse(pTreeCtrl->m_pHostXmlParse);
			pTreeCtrl->ExpandAll();
		}
	}
	return -1;
}