From a4d2315ee4ca3f6177b4fb2526bed2feff3d89be Mon Sep 17 00:00:00 2001
From: lifan <2308045698@qq.com>
Date: 星期三, 22 十月 2025 16:52:58 +0800
Subject: [PATCH] update
---
jrj/xframe/wobject/xwin.hpp | 90 ++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 85 insertions(+), 5 deletions(-)
diff --git a/jrj/xframe/wobject/xwin.hpp b/jrj/xframe/wobject/xwin.hpp
index a1afa9b..12a740e 100644
--- a/jrj/xframe/wobject/xwin.hpp
+++ b/jrj/xframe/wobject/xwin.hpp
@@ -6,10 +6,23 @@
#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
{
@@ -27,10 +40,12 @@
}
void SetArg()
{
- SetArg(GetWinParam());
+ 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()
{
@@ -69,16 +84,16 @@
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");
}
@@ -112,6 +127,16 @@
return xnode(getKWin()->SetAgentNodeContent((knode*)node.getNativePointer(), (knode*)val.getNativePointer()));
}
+ xnode GetXNode()
+ {
+ return xnode(getKWin()->GetXNode());
+ }
+
+ Hxsoft::XFrame::IXPage* GetXPage()
+ {
+ return getKWin()->GetXPage();
+ }
+
LPARAM GetWinParam()
{
return (LPARAM)getKWin()->GetParam();
@@ -120,6 +145,12 @@
{
return getKWin()->SetParam((void*)pParam);
}
+ xstring GetParamString()
+ {
+ if (!GetWinParam())return xstring();
+ return xstring(GetWinParam(), true);
+ }
+
LPARAM GetFrameParam()
{
return (LPARAM)getKWin()->GetFrameParam();
@@ -169,6 +200,41 @@
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();
@@ -195,4 +261,18 @@
{
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