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