#pragma once #include "xview.hpp" #include "kobject/kcontrol.hpp" #include "kobject/kwin.hpp" #include "win32/win.hpp" #include "wobject/xnode.hpp" #include "wobject/xurl.hpp" using kwin=Hxsoft::XFrame::IXFWin; using kcontrol = Hxsoft::XFrame::IXFControl; using knode = Hxsoft::XFrame::IXNode; 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() { SetArg(GetWinParam()); } public: xwin(void * impl, HWND hWnd):xview(impl,hWnd){} public: kwin* getKWin() { return (Hxsoft::XFrame::IXFWin*)GetNativePtr(); } public: bool AttachEvent(const wchar_t* ctrlname,const wchar_t* msg, FEvent fnEvt, xwin* pthis) { return getKWin()->AttachEvent((LPTSTR)ctrlname,(LPTSTR)msg,*(Hxsoft::XFrame::FEvent*)&fnEvt,pthis); } bool AttachEvent(const wchar_t* msg, FEvent fnEvt, xwin* pthis) { return getKWin()->AttachEvent((LPTSTR)msg,*(Hxsoft::XFrame::FEvent*)&fnEvt,pthis); } bool AttachEvent(const wchar_t* ctrlname,const wchar_t* msg, FEvent fnEvt) { return getKWin()->AttachEvent((LPTSTR)ctrlname,(LPTSTR)msg,*(Hxsoft::XFrame::FEvent*)&fnEvt,this); } bool AttachEvent(const wchar_t* msg, FEvent fnEvt) { return getKWin()->AttachEvent((LPTSTR)msg,*(Hxsoft::XFrame::FEvent*)&fnEvt,this); } kcontrol* GetControl(const wchar_t* ctrlname) { return getKWin()->GetControl(ctrlname); } string GetServerUrl() { return getKWin()->GetServerUrl(); } xwin* OpenWindow(string url) { 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); 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; } knode * GetAgentNode(string path) { return getKWin()->GetAgentNode(path); } HWND GetHWND() { return getKWin()->GetHWND(); } xnode SetAgentNode(xnode node, string val) { return xnode(getKWin()->SetAgentNodeContent((knode*)node.getNativePointer(), val)); } xnode SetAgentNode(xnode node,xnode val) { return xnode(getKWin()->SetAgentNodeContent((knode*)node.getNativePointer(), (knode*)val.getNativePointer())); } LPARAM GetWinParam() { return (LPARAM)getKWin()->GetParam(); } bool SetWinParam(LPARAM pParam) { return getKWin()->SetParam((void*)pParam); } LPARAM GetFrameParam() { return (LPARAM)getKWin()->GetFrameParam(); } bool SetFrameParam(LPARAM pParam) { return getKWin()->SetFrameParam((void*)pParam); } int Redraw() { return getKWin()->Redraw(); } int openUrl(xstring aurl, xaserverarg* 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 { xaserverarg* arg = (xaserverarg*)para; 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 (config != L"")arg->AddArg(L"config", config); 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(xstring aurl) { xaserverarg* arg = new xaserverarg(); return openUrl(aurl, arg); } KXMLDOMElement GetElement() { 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); } };