From 51faca7cff4ce6b848fcbd8f7fe881f6fc59b4f3 Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期四, 27 六月 2024 16:06:03 +0800
Subject: [PATCH] add xfile

---
 jrj/xframe/adt/xarray.hpp              |  128 ++++++++++++++++
 jrj/xframe/wobject/xint.hpp            |    2 
 jrj/xframe/wobject/xutil.hpp           |   16 ++
 jrj/xframe/wobject/xaserver.hpp        |    8 
 jrj/xframe/win32/win.hpp               |   20 +
 jrj/ext-jrj/ext-jrj.vcxproj            |    7 
 jrj/project/business/quote.enquiry.cpp |  108 ++++--------
 jrj/xframe/win32/xfile.hpp             |  186 +++++++++++++++++++++++
 jrj/xframe/kobject/kapp.hpp            |    1 
 9 files changed, 394 insertions(+), 82 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 9535065..f598b94 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -169,6 +169,7 @@
     <ClInclude Include="..\project\viewobject\saleorder.view.hpp" />
     <ClInclude Include="..\project\viewobject\shoppingcart.view.hpp" />
     <ClInclude Include="..\project\viewobject\supplier.view.hpp" />
+    <ClInclude Include="..\xframe\adt\xarray.hpp" />
     <ClInclude Include="..\xframe\kobject\kapp.hpp" />
     <ClInclude Include="..\xframe\kobject\kbase.hpp" />
     <ClInclude Include="..\xframe\kobject\kcachemgr.hpp" />
@@ -198,6 +199,8 @@
     <ClInclude Include="..\xframe\vbusiness\vframe\maint.vframe.vbusiness.hpp" />
     <ClInclude Include="..\xframe\vbusiness\vframe\responsewin.vframe.vbusiness.hpp" />
     <ClInclude Include="..\xframe\vbusiness\vutil\publiccode.vutil.vbusiness.hpp" />
+    <ClInclude Include="..\xframe\win32\win.hpp" />
+    <ClInclude Include="..\xframe\win32\xfile.hpp" />
     <ClInclude Include="..\xframe\wobject\xapp.hpp" />
     <ClInclude Include="..\xframe\wobject\xaserver.hpp" />
     <ClInclude Include="..\xframe\wobject\xaserverarg.hpp" />
@@ -252,7 +255,9 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
-    <ClCompile Include="..\project\business\quote.enquiry.cpp" />
+    <ClCompile Include="..\project\business\quote.enquiry.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\project\business\Quote3.list3.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
diff --git a/jrj/project/business/quote.enquiry.cpp b/jrj/project/business/quote.enquiry.cpp
index a71d3a2..2e88c47 100644
--- a/jrj/project/business/quote.enquiry.cpp
+++ b/jrj/project/business/quote.enquiry.cpp
@@ -2188,7 +2188,7 @@
 	}
 
 	//鐒︾偣婵�娲诲鐞嗗嚱鏁�
-	int OnSetFocus(ref TEvent evt, int param)
+	int OnSetFocus(TEvent* evt, LPARAM param)
 	{
 		//閲嶇疆宸ュ叿鏉�
 		SetAgent();
@@ -2200,7 +2200,6 @@
 		xml x = ViewObject::RetrieveData(L"/sale/data/TO/template/param", L"TemplateID", id);
 
 		xml sheet ;
-		sheet.setNativePointer(x.CreateInstance());
 		sheet.loadXML(x.selectSingleNode(L"data/*").xml);
 
 		dw_cell.LoadTemplate(sheet);
@@ -2257,30 +2256,6 @@
 		return 1;
 	}
 
-
-	static stdcall int GetModuleFileName(int hModule, xstring lpFileName, int nSize) native from "kernel32.dll" alias "GetModuleFileNameW";
-	static stdcall int PathRemoveFileSpec(xstring lpFileName) native from "shlwapi.dll" alias "PathRemoveFileSpecW";
-
-	xstring GetModulePath()
-	{
-		xstring str = L"";
-		str = str.space(255);
-		GetModuleFileName(0, str, 250);
-		PathRemoveFileSpec(str);
-		return str;
-	}
-
-	xstring GetModuleTmpPath()
-	{
-		xstring str = L"";
-		str = str.space(255);
-		GetModuleFileName(0, str, 250);
-		PathRemoveFileSpec(str);
-		xstring tmp = str + L"\\Temp";
-		xaserver::CreateDirectory(tmp);
-		return tmp;
-	}
-
 	xstring UploadImage(xstring guid)
 	{
 		return UploadImage(guid, L"");
@@ -2290,12 +2265,12 @@
 	{
 		xstring name = guid + L".jpg";
 		xstring str = name.mid(0, 2);
-		str = str.upper();
+		str = str.toUpper();
 		int ret = 1;
 		if (filename != L"")
-			ret = xaserver::Upload(L"product" + str, name, filename, this.GetHWND(), L"", false);
+			ret = xaserver::Upload(L"product" + str, name, filename, GetHWND(), L"", false);
 		else
-			ret = xaserver::Upload(L"product" + str, name, this.GetHWND(), L"", false);
+			ret = xaserver::Upload(L"product" + str, name.c_str(), GetHWND(), L"", false);
 		if (ret == -1) return L"";
 		if (ret == 0)
 		{
@@ -2315,7 +2290,7 @@
 		}
 
 		xutil::SmallImage(appPath+L"\\"+name,appPath+L"\\"+L"x_"+name,120,120);
-		int ret_1 = xaserver::Upload(L"product"+str, L"x_"+name,appPath+L"\\x_"+name, this.GetHWND(),L"",false);
+		int ret_1 = xaserver::Upload(L"product"+str, L"x_"+name,appPath+L"\\x_"+name, GetHWND(),L"",false);
 		//xaserver::DeleteFile(appPath+L"x_"+name);
 		//xaserver::DeleteFile(appPath+name);
 		if(ret_1 != 1)
@@ -2331,12 +2306,12 @@
 	{
 		xstring name = guid + L".jpg";
 		xstring str = name.mid(0, 2);
-		str = str.upper();
+		str = str.toUpper();
 		int ret = 1;
 		if (filename != L"")
-			ret = xaserver::Upload(L"product" + str, name, filename, this.GetHWND(), L"", false);
+			ret = xaserver::Upload(L"product" + str, name, filename, GetHWND(), L"", false);
 		else
-			ret = xaserver::Upload(L"product" + str, name, this.GetHWND(), L"", false);
+			ret = xaserver::Upload(L"product" + str, name, GetHWND(), L"", false);
 		if (ret == -1) return L"";
 		if (ret == 0)
 		{
@@ -2354,7 +2329,7 @@
 		}
 
 		xutil::SmallImage(appPath + L"\\" + name, appPath + L"\\" + L"x_" + name, 120, 120);
-		int ret_1 = xaserver::Upload(L"product" + str, L"x_" + name, appPath + L"\\x_" + name, this.GetHWND(), L"", false);
+		int ret_1 = xaserver::Upload(L"product" + str, L"x_" + name, appPath + L"\\x_" + name, GetHWND(), L"", false);
 		//xaserver::DeleteFile(appPath+L"x_"+name);
 		//xaserver::DeleteFile(appPath+name);
 		if (ret_1 != 1)
@@ -2617,24 +2592,23 @@
 		//		"JPEG 鏂囦欢(*.jpg)\0*.jpg;*.jpeg;*.png;*.gif;*.bmp\0鍏ㄩ儴鏂囦欢(*.*)\0*.*\0",
 		//		"jpg");		
 
-		char[]  szFileName = new char[4096];
-		char[]  szPath = new char[4096];
+		wchar_t  szFileName[4096];
+		wchar_t szPath[4096];
 		szFileName[0] = 0;
 		szPath[0] = 0;
 
 		if (initFileName != L"")
 		{
 			int len = initFileName.length();
-			char[] tmp = initFileName;
+			const wchar_t* tmp = initFileName.c_str();
 			for (int i = 0; i < len + 1; i++)
 			{
-				//szFileName[i] = tmp[i];
 				szPath[i] = tmp[i];
 			}
 		}
 
 		int	 nFilterIndex = 1;
-		ref OPENFILENAMEW ofn = new OPENFILENAMEW;
+		OPENFILENAMEW ofn;
 
 		ofn.lStructSize = 88;//sizeof(ofn);
 		ofn.hwndOwner = 0;
@@ -3121,7 +3095,7 @@
 		return 1;
 	}
 
-	int OnCellSelectChanged(ref TNotifyEvent evt, int p)
+	int OnCellSelectChanged(TEvent*, LPARAM p)
 	{
 		/*ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
 		xstring colname=hdr.colname;
@@ -3132,7 +3106,7 @@
 		return 1;
 	}
 
-	int OnItemChanged(ref TNotifyEvent evt, int p)
+	int OnItemChanged(TEvent*, LPARAM p)
 	{
 		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
 		xstring colname = hdr.colname;
@@ -3289,14 +3263,14 @@
 		xstring res = L"/sale/data/productlibrary3/pref/picture/imagelistskuno";
 		if (xurl::get(res, arg_pic.GetString(), xp) != 1)
 		{
-			trace(xp.GetXml());
+			trace(xp.xml());
 			return 1;
 		}
 		else
 		{
-			//alert(xp.GetXml());
+			//alert(xp.xml());
 			ClearImageTerm(row, L"customer-photo");
-			//alert(xp.GetXml());
+			//alert(xp.xml());
 			KXMLDOMNodeList nlistp = xp.selectNodes(L"ImageList/image");
 			int lenp = nlistp.length();
 			int ip = 0;
@@ -3349,13 +3323,13 @@
 		xstring res = L"/sale/data/ProductLibrary3/pref/picture/imagelistItemNo";
 		if (xurl::get(res, arg_pic.GetString(), xp) != 1)
 		{
-			trace(xp.GetXml());
+			trace(xp.xml());
 			return 1;
 		}
 		else
 		{
 			ClearImageTerm(row, L"customer-photo");
-			//alert(xp.GetXml());
+			//alert(xp.xml());
 			KXMLDOMNodeList nlistp = xp.selectNodes(L"ImageList/image");
 			int lenp = nlistp.length();
 			int ip = 0;
@@ -3735,7 +3709,7 @@
 	xstring GetExchangeRate(xstring pcur, xstring pdate)
 	{
 
-		if (pcur.upper() == L"RMB") return L"1";
+		if (pcur.toUpper() == L"RMB") return L"1";
 		xstring exchangeRate = L"";
 		if (exchangeRate == L"") {
 			xml x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"cryrate");
@@ -3792,9 +3766,9 @@
 		return 1;
 	}
 
-	int OnRowChanged(ref TNotifyEvent evt, int p)
+	int OnRowChanged(TEvent* evt, LPARAM p)
 	{
-		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		DWNMHDR&  hdr = *(DWNMHDR * )evt->notify.pnmh;
 		int row = hdr.row;
 
 		return OnQuoteLineChanged(row);
@@ -3803,7 +3777,7 @@
 	int OnQuoteLineChanged(int row)
 	{
 		ximageview im = GetControl(L"im1");
-		im.ResetEx();
+		im.Reset();
 		//xstring skuno = dw_goods.GetItemString(row,L"SKUNo");
 		//OnShowImage(skuno,row);
 		//im.Redraw();
@@ -3827,9 +3801,7 @@
 		ximageview im = GetControl(L"im1");
 
 		xml xp ;
-		xp.setNativePointer(xml::CreateInstance());
 		xaserverarg arg_pic ;
-		arg_pic.setNativePointer(arg_pic.CreateInstance());
 		arg_pic.AddArg(L"SKUNo", skuno);
 
 		xstring res = L"/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
@@ -3846,7 +3818,7 @@
 		bool hasIamge = false;
 		if (xurl::get(res, arg_pic.GetString(), xp) != 1)
 		{
-			trace(xp.GetXml());
+			trace(xp.xml());
 			return 1;
 		}
 		else
@@ -3869,18 +3841,18 @@
 			res = L"/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
 			if (xurl::get(res, arg_pic.GetString(), xp) != 1)
 			{
-				trace(xp.GetXml());
+				trace(xp.xml());
 				return 1;
 			}
 			else
 			{
-				nlistp = xp.selectNodes(L"ImageList/image");
-				lenp = nlistp.length();
-				for (ip = 0; ip < lenp; ip++)
+				KXMLDOMNodeList nlistp = xp.selectNodes(L"ImageList/image");
+				long lenp = nlistp.length();
+				for (int ip = 0; ip < lenp; ip++)
 				{
-					xitem = nlistp.item(ip);
-					picname = xitem.selectSingleNode(L"PicPath").text();
-					goodno = xitem.selectSingleNode(L"GoodsNo").text();
+					KXMLDOMNode xitem = nlistp.item(ip);
+					xstring picname = xitem.selectSingleNode(L"PicPath").text();
+					xstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
 					if (picname == L"/business/products/Thumbs//")
 						picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
 					im.AddImages(picname, goodno);
@@ -3920,7 +3892,7 @@
 	int OnUpdateProcessed()
 	{
 		int ret = ProcessSendMessage(L"/task/quote/update-processed", taskid, L"", L"", false);
-		win32::PostMessage(GetFrameWindow().GetHWND(), 0x401, L"xmRefreshTask", 0);
+		PostMessage(GetFrameWindow().GetHWND(), 0x401, (WPARAM)L"xmRefreshTask", 0);
 		return ret;
 	}
 
@@ -3993,9 +3965,8 @@
 		if (filename == L"" || saveas)
 		{
 			xaserverarg arg ;
-			
 			arg.AddArg(L"src", myurl);
-			OpenWindow(L"dev:xpage[trade.document.saveas.vx]", cast(arg as int));
+			OpenWindow(L"dev:xpage[trade.document.saveas.vx]", arg);
 			if (arg.GetArgString(L"result") == L"ok")
 			{
 				sfilename = arg.GetArgString(L"filename");
@@ -4009,7 +3980,7 @@
 		xstring sguid = publiccode::GetGuid();
 		xstring sname = sguid;
 		xstring str = sname.mid(0, 2);
-		str = str.upper();
+		str = str.toUpper();
 		xstring suri = L"attachment" + str;
 		int ret = xaserver::UploadData(suri, sguid + L".jpg", content);
 		if (ret < 0)
@@ -4019,7 +3990,6 @@
 		}
 
 		xml x ;
-		
 		xaserverarg args ;
 		args.setNativePointer(args.CreateInstance());
 		args.AddArg(L"myurl", myurl);
@@ -4040,7 +4010,7 @@
 		else
 		{
 			filename = sfilename;
-			win32::SetWindowText(GetHWND(), L"鎶ヤ环鏂囦欢:" + filename);
+			SetWindowText(GetHWND(), L"鎶ヤ环鏂囦欢:" + filename);
 			alert(x.text());
 		}
 
@@ -4049,11 +4019,11 @@
 
 	int SendCtrlCmd(xcontrol xc, xstring cmd)
 	{
-		win32::SendMessage(xc.GetId(), 0x401, cmd, 0);
+		SendMessage(xc.GetHWND(), 0x401, cmd, 0);
 		return 1;
 	}
 
-	int OnCellClicked(ref TNotifyEvent evt, int p)
+	int OnCellClicked(TEvent*, LPARAM p)
 	{
 		ref DWNMHDR dwhdr = cast(evt.pnmh as ref DWNMHDR);
 		int row = dwhdr.row;
@@ -4259,7 +4229,7 @@
 	}
 
 
-	int OnCellClicked1(ref TNotifyEvent evt, int p)
+	int OnCellClicked1(TEvent*, LPARAM p)
 	{
 		ref DWNMHDR dwhdr = cast(evt.pnmh as ref DWNMHDR);
 		int row = dwhdr.row;
diff --git a/jrj/xframe/adt/xarray.hpp b/jrj/xframe/adt/xarray.hpp
new file mode 100644
index 0000000..63346d6
--- /dev/null
+++ b/jrj/xframe/adt/xarray.hpp
@@ -0,0 +1,128 @@
+#pragma once
+
+#include "system/base.hpp"
+#include "wobject/xobject.hpp"
+#include "wobject/xstring.hpp"
+
+template<class T>
+class xarray : public xobject
+{
+public:
+	xarray(length_(0), capacity_(0),itemms(nullptr){
+	}
+public:
+	xarray*push_back(T t)
+	{
+		sure_space();
+
+		items[length_] = t;
+		++length_;
+		return this;
+	}
+
+	xarray* pop_back()
+	{
+		if (length() > 0)
+			erase(length() - 1);
+		return this;
+	}
+
+	xarray* erase(int index)
+	{
+		if (index < 0 || index > length_ - 1)
+		{
+			//throw("...");
+			return this;
+		}
+		//move data
+		for (int i = index; i < length_ - 1; i++)items[i] = items[i + 1];
+		--length_;
+		return this;
+	}
+
+	xarray* insert_before(int index, T t)
+	{
+		sure_space();
+
+		if (index < 0)
+		{
+			for (int i = 0; i < length_ - 1; i++)items[i] = items[i + 1];
+			items[0] = t;
+			return this;
+		}
+		if (index >= length_)
+		{
+			items[length_] = t;
+			++length_;
+		}
+		return this;
+	}
+
+	xarray* insert_after(int index, T t)
+	{
+		return insert_before(index + 1, t);
+	}
+
+	T back()
+	{
+		if (length_)
+			return items[length_ - 1];
+		return 0;
+	}
+
+	T front()
+	{
+		if (length_)
+			return items[0];
+		return 0;
+	}
+
+	int length()
+	{
+		return length_;
+	}
+
+	T item(int index)
+	{
+		if (index >= 0 && index < length_) return items[index];
+		return 0;
+	}
+
+	int find(T t)
+	{
+		for (int i = 0; i < length_; i++)
+		{
+			if (items[i] == t) return i;
+		}
+		return -1;
+	}
+private:
+	bool sure_space()
+	{
+		if (length_ == capacity_)
+		{
+			if (!items)
+			{
+				items = new T[2];
+				capacity_ = 2;
+			}
+			else
+			{
+				capacity_ = capacity_ * 2;
+				T* temp = new T[capacity_];
+				//可以优化为拷贝操作
+				for (int i = 0; i < length_; ++i)
+				{
+					temp[i] = items[i];
+				}
+				delete items;
+				items = temp;
+			}
+		}
+		return true;
+	}
+private:
+	T* items;
+	int length_;
+	int capacity_;
+};
\ No newline at end of file
diff --git a/jrj/xframe/kobject/kapp.hpp b/jrj/xframe/kobject/kapp.hpp
index 1e6619a..567a03c 100644
--- a/jrj/xframe/kobject/kapp.hpp
+++ b/jrj/xframe/kobject/kapp.hpp
@@ -30,5 +30,6 @@
 		static int trace(LPCTSTR pstr);
 	public:
 		int Run();
+
     };
 }}
\ No newline at end of file
diff --git a/jrj/xframe/win32/win.hpp b/jrj/xframe/win32/win.hpp
index e32f9d2..1fca858 100644
--- a/jrj/xframe/win32/win.hpp
+++ b/jrj/xframe/win32/win.hpp
@@ -29,12 +29,6 @@
 
 #define WINAPI   __stdcall
 
-#define SendMessage SendMessageW
-#define PostMessage PostMessageW
-#define GetWindowLong GetWindowLongW 
-#define SetWindowLong SetWindowLongW
-#define MessageBox	MessageBoxW
-
 extern "C"
 {
 	void WINAPI SysFreeString(BSTR str);//OleAut32.dll
@@ -111,9 +105,20 @@
 	
 	int WINAPI GetTempPathW(int NAME_LEN,string & OutPath) ;//native from "kernel32.dll" alias "GetTempPathW";
 	int WINAPI GetModuleHandleW(string lpModuleName) ;//native from "kernel32.dll" alias "GetModuleHandleW";
-	int WINAPI GetModuleFileName(int hModule ,string & lpFileName ,int nSize ) ;//native from "kernel32.dll" alias "GetModuleFileName";
+	int WINAPI GetModuleFileNameW(int hModule ,string lpFileName, int nSize);//native from "kernel32.dll" alias "GetModuleFileNameW";
 	void WINAPI GetLocalTime(SYSTEMTIME& lpSystemTime) ;//native from "kernel32.dll" alias "GetLocalTime";
+	int WINAPI PathRemoveFileSpecW(xstring lpFileName);// native from "shlwapi.dll" alias "PathRemoveFileSpecW";
+
 }
+#define SendMessage SendMessageW
+#define PostMessage PostMessageW
+#define GetWindowLong GetWindowLongW 
+#define SetWindowLong SetWindowLongW
+#define MessageBox	MessageBoxW
+#define GetModuleFileName GetModuleFileNameW
+#define PathRemoveFileSpec PathRemoveFileSpecW
+#define SetWindowText SetWindowTextW
+#define GetWindowText GetWindowTextW
 
 #if 0
 namespace win32
@@ -193,5 +198,6 @@
 	int GetModuleHandleW(string lpModuleName) ;//native from "kernel32.dll" alias "GetModuleHandleW";
 	int GetModuleFileName(int hModule ,string & lpFileName ,int nSize ) ;//native from "kernel32.dll" alias "GetModuleFileName";
 	void GetLocalTime(SYSTEMTIME& lpSystemTime) ;//native from "kernel32.dll" alias "GetLocalTime";
+
 }
 #endif
\ No newline at end of file
diff --git a/jrj/xframe/win32/xfile.hpp b/jrj/xframe/win32/xfile.hpp
new file mode 100644
index 0000000..aa59820
--- /dev/null
+++ b/jrj/xframe/win32/xfile.hpp
@@ -0,0 +1,186 @@
+#pragma once
+
+#include "system/base.hpp"
+#include "win.hpp"
+
+#define CALLBACK    __stdcall
+#define MAX_PATH    260
+typedef unsigned short WORD;
+typedef unsigned int UINT;
+typedef char CHAR;
+typedef unsigned char BYTE;
+typedef wchar_t WCHAR;
+typedef void* HANDLE;
+typedef const char* LPCSTR;
+typedef void* LPVOID;
+typedef DWORD* LPDWORD;
+typedef const void* LPCVOID;
+
+typedef void* LPSECURITY_ATTRIBUTES;
+typedef UINT_PTR(CALLBACK* LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+struct OPENFILENAMEW
+{
+	DWORD        lStructSize;
+	HWND         hwndOwner;
+	HINSTANCE    hInstance;
+	LPCWSTR      lpstrFilter;
+	LPWSTR       lpstrCustomFilter;
+	DWORD        nMaxCustFilter;
+	DWORD        nFilterIndex;
+	LPWSTR       lpstrFile;
+	DWORD        nMaxFile;
+	LPWSTR       lpstrFileTitle;
+	DWORD        nMaxFileTitle;
+	LPCWSTR      lpstrInitialDir;
+	LPCWSTR      lpstrTitle;
+	DWORD        Flags;
+	WORD         nFileOffset;
+	WORD         nFileExtension;
+	LPCWSTR      lpstrDefExt;
+	LPARAM       lCustData;
+	LPOFNHOOKPROC lpfnHook;
+	LPCWSTR      lpTemplateName;
+
+	void* pvReserved;
+	DWORD        dwReserved;
+	DWORD        FlagsEx;
+};
+
+//FILETIME结构持有的64位无符号的文件的日期和时间值。头文件: WINDEF.H
+struct FILETIME
+{
+	int dwLowDateTime; // 低 32 位  
+	int dwHighDateTime; // 高 32 位  
+};
+
+#if 0
+struct fileinfo : public xstruct
+{
+	char[128] szFileTitle; //文件的标题名
+	int dwFileAttributes; //文件的属性
+	FILETIME ftCreationTime; //文件的创建时间
+	FILETIME ftLastAccessTime; //文件的最后访问时间
+	FILETIME ftLastWriteTime; //文件的最后修改时间
+	int nFileSizeHigh; //文件大小的高位双字
+	int nFileSizeLow; //文件大小的低位双字
+	int dwReserved0; //保留,为0
+	int dwReserved1; //保留,为0
+};
+#endif
+
+typedef struct _WIN32_FIND_DATAW {
+	DWORD dwFileAttributes;
+	FILETIME ftCreationTime;
+	FILETIME ftLastAccessTime;
+	FILETIME ftLastWriteTime;
+	DWORD nFileSizeHigh;
+	DWORD nFileSizeLow;
+	DWORD dwReserved0;
+	DWORD dwReserved1;
+	WCHAR  cFileName[MAX_PATH];
+	WCHAR  cAlternateFileName[14];
+} WIN32_FIND_DATAW;
+
+typedef struct _OVERLAPPED {
+	ULONG_PTR Internal;
+	ULONG_PTR InternalHigh;
+	union {
+		struct {
+			DWORD Offset;
+			DWORD OffsetHigh;
+		} DUMMYSTRUCTNAME;
+		LPVOID Pointer;
+	} DUMMYUNIONNAME;
+
+	HANDLE  hEvent;
+} OVERLAPPED, * LPOVERLAPPED;
+
+
+#define OFS_MAXPATHNAME 128
+typedef struct _OFSTRUCT {
+	BYTE cBytes;
+	BYTE fFixedDisk;
+	WORD nErrCode;
+	WORD Reserved1;
+	WORD Reserved2;
+	CHAR szPathName[OFS_MAXPATHNAME];
+} OFSTRUCT;
+
+extern "C"
+{
+	bool  WINAPI GetSaveFileNameW(OPENFILENAMEW &);//native from "comdlg32.dll" alias "GetSaveFileNameW";
+	bool  WINAPI GetOpenFileNameW(OPENFILENAMEW&);//native from "comdlg32.dll" alias "GetOpenFileNameW";
+
+	HANDLE WINAPI FindFirstFileW(const WCHAR * lpFileName, WIN32_FIND_DATAW&  lpFindFileData); //native from "kernel32.dll" alias "FindFirstFileW";	//根据文件名查找文件,一旦不再需要,应该用FindClose函数关闭这个句柄
+	HANDLE WINAPI FindNextFileW(HANDLE hFindFile, WIN32_FIND_DATAW&  lpFindFileData); //native from "kernel32.dll" alias "FindNextFileW";	//继续查找FindFirstFile函数搜索后的文件 ,HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件。非零表示成功,零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES
+	bool  WINAPI FindClose(HANDLE hFindFile); //native from "kernel32.dll" alias "FindClose";	//关闭由FindFirstFile函数创建的一个搜索句柄。返回非零表示成功,零表示失败。会设置GetLastError 
+
+	int  WINAPI CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); //native from "kernel32.dll" alias "CreateFileW";
+	int  WINAPI  OpenFile(LPCSTR lpFileName, OFSTRUCT lpReOpenBuff, UINT wStyle); //native from "kernel32.dll" alias "OpenFile";
+	int  WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod); //native from "kernel32.dll" alias "SetFilePointer";
+	int  WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile";
+	int  WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile";
+	int  WINAPI CloseHandle(HANDLE hFile); //native from "kernel32.dll" alias "CloseHandle";
+	int  WINAPI GetFileSize(HANDLE hFile, int lpFileSizeHigh); //native from "kernel32.dll" alias "GetFileSize";
+	int  WINAPI GetKeyState(HANDLE nVirtKey); //native from "user32.dll" alias "GetKeyState";
+}
+
+class xfile
+{
+	bool  WINAPI GetSaveFileName(OPENFILENAMEW& OpenFileName)
+	{
+		return GetSaveFileNameW(OpenFileName);
+	}
+	bool  WINAPI GetOpenFileName(OPENFILENAMEW& SaveFileName)
+	{
+		return GetOpenFileName(SaveFileName);
+	}
+
+	HANDLE WINAPI FindFirstFile(const WCHAR* lpFileName, WIN32_FIND_DATAW& lpFindFileData)
+	{
+		return FindFirstFileW(lpFileName, lpFindFileData);
+	}
+
+	HANDLE WINAPI FindNextFile(HANDLE hFindFile, WIN32_FIND_DATAW& lpFindFileData)
+	{
+		return FindNextFileW(hFindFile, lpFindFileData);
+	}
+	bool  WINAPI FindClose(HANDLE hFindFile)
+	{
+		return FindClose(hFindFile);
+	}
+
+	int  WINAPI CreateFile(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
+	{
+		return CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
+	}
+
+	int  WINAPI  OpenFile(LPCSTR lpFileName, OFSTRUCT lpReOpenBuff, UINT wStyle)
+	{
+		return OpenFile(lpFileName, lpReOpenBuff, wStyle);
+	}
+	int  WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod)
+	{
+		return SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod);
+	}
+	int  WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
+	{
+		return ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
+	}
+	int  WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
+	{
+		return WriteFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
+	}
+	int  WINAPI CloseHandle(HANDLE hFile)
+	{
+		return  CloseHandle(hFile);
+	}
+	int  WINAPI GetFileSize(HANDLE hFile, int lpFileSizeHigh)
+	{
+		return GetFileSize(hFile, lpFileSizeHigh);
+	}
+	int  WINAPI GetKeyState(HANDLE nVirtKey)
+	{
+		return GetKeyState(nVirtKey);
+	}
+};
diff --git a/jrj/xframe/wobject/xaserver.hpp b/jrj/xframe/wobject/xaserver.hpp
index fac0301..0378f58 100644
--- a/jrj/xframe/wobject/xaserver.hpp
+++ b/jrj/xframe/wobject/xaserver.hpp
@@ -170,9 +170,9 @@
         return kxaserver::UploadEx((LPTSTR)pUri, (LPTSTR)pName,m_hWnd, (LPTSTR)pSource,bCompress);
 
     }
-    static int Upload(LPTSTR pUri,LPTSTR pName,HWND m_hWnd,LPTSTR pSource=NULL,BOOL bCompress=false)
+    static int Upload(LPCTSTR pUri,LPCTSTR pName,HWND m_hWnd,LPCTSTR pSource=NULL,BOOL bCompress=false)
     {
-        return kxaserver::Upload(pUri,pName,m_hWnd,pSource,bCompress);
+        return kxaserver::Upload((LPTSTR)pUri,(LPTSTR)pName,m_hWnd, (LPTSTR)pSource,bCompress);
     }
 
     static int Upload(LPCTSTR pUri,LPCTSTR pName,LPCTSTR pPath,HWND m_hWnd,LPCTSTR pSource=NULL,BOOL bCompress=false)
@@ -188,11 +188,11 @@
     {
         return kxaserver::UploadFile((LPTSTR)pUri,(LPTSTR)pName,m_hWnd,(LPTSTR)pSource,bCompress);
     }
-    static int __DeleteFile(LPTSTR pName)
+    static int DeleteFile(LPTSTR pName)
     {
         return kxaserver::__DeleteFile(pName);
     }
-    static int __CreateDirectory(LPCTSTR pName)
+    static int CreateDirectory(LPCTSTR pName)
     {
         return kxaserver::__CreateDirectory((LPTSTR)pName);
     }
diff --git a/jrj/xframe/wobject/xint.hpp b/jrj/xframe/wobject/xint.hpp
index 02ad9fd..0a27cfc 100644
--- a/jrj/xframe/wobject/xint.hpp
+++ b/jrj/xframe/wobject/xint.hpp
@@ -18,5 +18,5 @@
 public:
 	operator int() { return value; }
 	double toDouble() { return (double)value; }
-	xstring toString() { return (xstring(value); }
+	xstring toString() { return xstring(value); }
 };
\ No newline at end of file
diff --git a/jrj/xframe/wobject/xutil.hpp b/jrj/xframe/wobject/xutil.hpp
index e20ef30..8ce0f0e 100644
--- a/jrj/xframe/wobject/xutil.hpp
+++ b/jrj/xframe/wobject/xutil.hpp
@@ -53,4 +53,20 @@
         return Hxsoft::XUtil::FormatDecimalString(str, format, bfree);
     }
 
+public:
+    static xstring GetModulePath()
+    {
+        wchar_t buf[255];
+        GetModuleFileName(0, buf, 255);
+        PathRemoveFileSpec(buf);
+        return xstring(buf);
+    }
+
+    static xstring GetModuleTmpPath()
+    {
+        xstring tmp = GetModulePath() + L"\\Temp";
+        xaserver::CreateDirectory(tmp);
+        return tmp;
+    }
+
 };
\ No newline at end of file

--
Gitblit v1.9.3