xj qian
2024-07-17 0b8444d0eef50d1ee4e0d0b51e174fa5b447d802
jrj/xframe/wobject/xwin.hpp
@@ -11,6 +11,16 @@
using kcontrol = Hxsoft::XFrame::IXFControl;
using knode = Hxsoft::XFrame::IXNode;
#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:
@@ -69,16 +79,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");
   }
@@ -120,6 +130,12 @@
   {
      return getKWin()->SetParam((void*)pParam);
   }
   xstring GetParamString()
   {
      if (!GetWinParam())return xstring();
      return xstring(GetWinParam(), true);
   }
   LPARAM GetFrameParam()
   {
      return (LPARAM)getKWin()->GetFrameParam();
@@ -169,6 +185,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();