From 03ef0b51103c735077c784c7df81ae2bcc1599ab Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期四, 13 二月 2025 18:33:56 +0800
Subject: [PATCH] update

---
 jrj/xframe/wobject/xwin.hpp |  129 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 120 insertions(+), 9 deletions(-)

diff --git a/jrj/xframe/wobject/xwin.hpp b/jrj/xframe/wobject/xwin.hpp
index 6de68fc..12a740e 100644
--- a/jrj/xframe/wobject/xwin.hpp
+++ b/jrj/xframe/wobject/xwin.hpp
@@ -6,15 +6,46 @@
 #include "win32/win.hpp"
 #include "wobject/xnode.hpp"
 #include "wobject/xurl.hpp"
+#include "wobject/xpage.hpp"
+#include "wobject/xnode.hpp"
 
 using kwin=Hxsoft::XFrame::IXFWin;
 using kcontrol = Hxsoft::XFrame::IXFControl;
 using knode = Hxsoft::XFrame::IXNode;
 
+#define export __declspec(dllexport) 
+#define DeclWinObject_(ty,pty) class __declspec(dllexport) ty :  public pty
+#define CreateWinObject_(ty,pty) \
+public:\
+	ty(void* impl,HWND hWnd):pty(impl,hWnd){}\
+public:\
+	static ty * CreateInstance(void* impl,void* hWnd)\
+	{\
+		return new ty(impl,(HWND)hWnd);\
+	}
+
 class xwin: public xview
 {
 public:
+	xaserverarg m_xaserverarg;
+public:
+	xaserverarg& GetArg() { return m_xaserverarg; }
+	void SetArg(LPARAM p)
+	{
+		m_xaserverarg = *(xaserverarg*)p;
+	}
+	void SetArg(xaserverarg & p)
+	{
+		m_xaserverarg = p;
+	}
+	void SetArg()
+	{
+		if(GetWinParam()) SetArg(GetWinParam());
+	}
+public:
 	xwin(void * impl, HWND hWnd):xview(impl,hWnd){}
+	xwin(kwin* kw) :xview(kw ? kw : nullptr, kw ? kw->GetHWND() : 0) {}
+	const xwin& operator =(kwin* kw) { this->SetNativePtr(kw ? kw : nullptr); this->SetHandle(kw ? kw->GetHWND() : 0); return *this; }
 public:
 	kwin* getKWin()
 	{
@@ -53,20 +84,24 @@
 
 	xwin* OpenWindow(string url)
 	{
-		int WS_OVERLAPPEDWINDOW = 0x00cf0000 ;
-		kwin* w = kwin::OpenWindow(GetServerUrl(),url,getKWin(),0/*param*/,0/*CmdWind*/,0,WS_OVERLAPPEDWINDOW,0);
+		int WS_OVERLAPPEDWINDOW_ = 0x00cf0000 ;
+		kwin* w = kwin::OpenWindow(GetServerUrl(),url,getKWin(),0/*param*/,0/*CmdWind*/,0,WS_OVERLAPPEDWINDOW_,0);
 		if(!w) return 0; //response
 		return (xwin*)GetPropW(w->GetHWND(),L"AttachObject");
 	}
 	
 	xwin* OpenWindow(string url,LPARAM p)
 	{
-		int WS_OVERLAPPEDWINDOW = 0x00cf0000;
-		kwin* w= kwin::OpenWindow(GetServerUrl(),url,getKWin(),p,0/*CmdWind*/,0/*dwStyleEx*/,WS_OVERLAPPEDWINDOW,0);
+		int WS_OVERLAPPEDWINDOW_ = 0x00cf0000;
+		kwin* w= kwin::OpenWindow(GetServerUrl(),url,getKWin(),p,0/*CmdWind*/,0/*dwStyleEx*/,WS_OVERLAPPEDWINDOW_,0);
 		if(!w) return 0; //response
 		return (xwin*)GetPropW(w->GetHWND(),L"AttachObject");
 	}
-	
+	xwin* OpenWindow(string url, xaserver& arg)
+	{
+		return OpenWindow(url, (LPARAM)&arg);
+	}
+
 	int trace(string info)
 	{
 		return 1;
@@ -92,14 +127,30 @@
 		return xnode(getKWin()->SetAgentNodeContent((knode*)node.getNativePointer(), (knode*)val.getNativePointer()));
 	}
 
-	LPARAM GetParam()
+	xnode GetXNode()
+	{
+		return xnode(getKWin()->GetXNode());
+	}
+
+	Hxsoft::XFrame::IXPage* GetXPage()
+	{
+		return getKWin()->GetXPage();
+	}
+
+	LPARAM GetWinParam()
 	{
 		return (LPARAM)getKWin()->GetParam();
 	}
-	bool  SetParam(LPARAM pParam)
+	bool  SetWinParam(LPARAM pParam)
 	{
 		return getKWin()->SetParam((void*)pParam);
 	}
+	xstring GetParamString()
+	{
+		if (!GetWinParam())return xstring();
+		return xstring(GetWinParam(), true);
+	}
+
 	LPARAM GetFrameParam()
 	{
 		return (LPARAM)getKWin()->GetFrameParam();
@@ -113,7 +164,7 @@
 		return getKWin()->Redraw();
 	}
 
-	int openUrl(string aurl, xaserverarg* para)
+	int openUrl(xstring aurl, xaserverarg* para)
 	{
 		KXMLDOMDocument x;
 		
@@ -149,12 +200,47 @@
 		return -1;
 	}
 
+	int openUrl(xstring aurl, LPARAM para)
+	{
+		KXMLDOMDocument x;
+
+		xurl::get(GetServerUrl(), aurl, L"", x);
+		KXMLDOMNode n = x.selectSingleNode(L"//resource/@src");
+		if (n)
+		{
+			string xq = n.text();
+			OpenWindow(xq, (LPARAM)para);
+			return 1;
+		}
+		else
+		{
+			n = x.selectSingleNode(L"//resource[@vface!='' and @view!='']");
+			if (n)
+			{
+				xstring vface = n.selectSingleNode(L"@vface").text();
+				xstring view = n.selectSingleNode(L"@view").text();
+				xstring config = n.selectSingleNode(L"@config").text();
+
+				if (vface == L"." || vface == L"")
+				{
+					string v = n.selectSingleNode(L"@url").text();
+					xstring burl = xstring(aurl).mid(0, xstring(aurl).find(v, 0));
+					return openUrl(burl + view, para);
+				}
+				else
+					return openUrl(vface + L"/" + view, para);
+			}
+		}
+		return -1;
+	}
+
+
 	int CloseWindow()
 	{
 		return getKWin()->CloseWindow();
 	}
 
-	int openUrl(string aurl)
+	int openUrl(xstring aurl)
 	{
 		xaserverarg* arg = new xaserverarg();
 		return openUrl(aurl, arg);
@@ -164,4 +250,29 @@
 	{
 		return getKWin()->GetElement();
 	}
+
+	xwin GetFrameWindow()
+	{
+		kwin* kw = getKWin()->GetFrameWindow();
+		return xwin(kw, kw->GetHWND());
+	}
+
+	void SwitchLayer(LPCTSTR pStrLayerSheet, LPCTSTR pStrLayerFrame)
+	{
+		return getKWin()->SwitchLayer((LPTSTR)pStrLayerSheet, (LPTSTR)pStrLayerFrame);
+	}
+
+	xpage GetChildXPage(string name)
+	{
+		xnode tnode = GetXNode().GetNodeByName(name);
+		if (!tnode) return 0;
+		return tnode.GetXPage();
+	}
+
+	kwin* GetChildWin(string name)
+	{
+		xpage tpage = GetChildXPage(name);
+		if (!tpage) return nullptr;
+		return tpage.GetWin();
+	}
 };

--
Gitblit v1.9.3