From 47d903f3ed61cd1abc33c723a30fe53c829f9c07 Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期二, 25 六月 2024 23:28:12 +0800
Subject: [PATCH] update product

---
 jrj/project/viewobject/shoppingcart.view.hpp   |   14 
 jrj/project/business/Product.list.cpp          |  437 +++++++++++++++++++--------------------
 jrj/xframe/xcontrol/xcheckbox.hpp              |  125 ----------
 jrj/project/viewobject/productlibrary.view.hpp |    6 
 jrj/xframe/wobject/xwin.hpp                    |   15 +
 jrj/xframe/win32/win.hpp                       |    1 
 jrj/ext-jrj/ext-jrj.vcxproj                    |    4 
 7 files changed, 246 insertions(+), 356 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index e4ce77e..74854f9 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -223,7 +223,7 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Product.list.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Product.maint.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
@@ -236,7 +236,7 @@
     </ClCompile>
     <ClCompile Include="..\project\business\SO3.list.cpp" />
     <ClCompile Include="..\project\business\SO3.maint.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier.maint.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
diff --git a/jrj/project/business/Product.list.cpp b/jrj/project/business/Product.list.cpp
index e8c86e3..ba30975 100644
--- a/jrj/project/business/Product.list.cpp
+++ b/jrj/project/business/Product.list.cpp
@@ -22,8 +22,8 @@
 	xdwgrid	dwc_list;
 
 	//产品缓存对象
-	xdataset g_xdoc_product;
-	xdataset g_xdoc_shoppingcart;
+	//xdataset g_xdoc_product;
+	//xdataset g_xdoc_shoppingcart;
 
 	xcombobox  cbx_goodscar;
 	//是否多选
@@ -34,6 +34,14 @@
 	KXMLDOMElement imageElement;
 	xstring m_customer;
 
+public:
+	ProductLibrary4Win(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ProductLibrary4Win* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ProductLibrary4Win* pWin = new ProductLibrary4Win(implPtr, (HWND)hWnd);
+		return pWin;
+	}
 public:
 	int FillGoodsCarList()
 	{
@@ -88,7 +96,7 @@
 	{
 		if (row < 1) row = dwc_list.GetRow();
 		if (row < 1 || row > dwc_list.GetRowCount()) return 0;
-		KXMLDOMElement e = g_xdoc_shoppingcart.getRowElement(L"data/Item", row);
+		KXMLDOMElement e = dw_list.GetRowElement(row);
 		return e;
 	}
 
@@ -172,7 +180,7 @@
 		xs.SetContent(html);
 		xs.Redraw();
 
-		xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
+		xstring id = dw_list.GetGuid(row);
 		OnShowImage(id);
 		trace(id);
 		return 1;
@@ -189,8 +197,8 @@
 		xs.Redraw();
 		if (m_customer)
 		{
-			xstring id = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID");
-			xstring customerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CustomerItemNo");
+			xstring id = dw_list.GetItemString(row, L"SKUID");
+			xstring customerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
 			OnShowImage(id, customerItemNo);
 		}
 
@@ -203,7 +211,7 @@
 		int MB_OKCANCEL = 1;
 		int MB_ICONQUESTION = 32;
 		if (MessageBoxW(GetHWND(), L"确认删除指定的项,删除后将不能恢复?", L"提示", MB_OKCANCEL | MB_ICONQUESTION) != IDOK) return 1;
-		xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
+		xstring id = dw_list.GetGuid(row);
 
 		if (ProductLibraryView::DeleteItem(id) == 1)	dw_list.DeleteRow(0);
 		return 1;
@@ -278,7 +286,7 @@
 
 	xstring makeHtml(int row)
 	{
-		xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
+		xstring id = dw_list.GetItemString(row, L"@guid");
 		xml x = GetGoodsPropList(id);
 		xml x1 = GetGoodsPropListEx(id);
 
@@ -310,7 +318,7 @@
 			{
 				name = fieldsEx.item(i).selectSingleNode(L"@name").text();
 				label = fieldsEx.item(i).selectSingleNode(L"@label").text();
-				ls_item += L"<td>" + label + L"</td>" + L"<td style='text-align:center'>" + g_xdoc_product.getData(0, L"data/Item", row, name) + L"</td>";
+				ls_item += L"<td>" + label + L"</td>" + L"<td style='text-align:center'>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
 				cnt++;
 				i++;
 				if (i == len)break;
@@ -345,7 +353,7 @@
 					if (i >= len)count = 2;
 					continue;
 				}
-				else if (g_xdoc_product.getData(0, L"data/Item", row, name) == L"")
+				else if (dw_list.GetItemString( row, (LPCTSTR)name) == L"")
 				{
 					KXMLDOMNodeList options = fields.item(i).selectNodes(L"item");
 					int tlen = options.length();
@@ -362,7 +370,7 @@
 				}
 				else
 				{
-					ls_item = L"<td>" + label + L"</td>" + L"<td>" + g_xdoc_product.getData(0, L"data/Item", row, name) + L"</td>";
+					ls_item = L"<td>" + label + L"</td>" + L"<td>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
 					count++;
 				}
 				i++;
@@ -391,11 +399,11 @@
 			html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row, L"PackTerm") + L"</span></div>";
 		}
 
-		if (g_xdoc_product.getData(0, L"data/Item", row, L"Remark") != L"")
+		if (dw_list.GetItemString( row, L"Remark") != L"")
 		{
 			//html +=  L"<div style='height:12px'/>";
 			html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >备注:</span></div>";
-			html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + g_xdoc_product.getData(0, L"data/Item", row, L"Remark") + L"</span></div>";
+			html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString( row, L"Remark") + L"</span></div>";
 		}
 
 		html += L"<div style='height:24px'/>";
@@ -479,24 +487,24 @@
 			if (i == 0)
 				html += L"<td rowspan='" + xstring(len) + L"'>" + No + L"</td><td >" + label + L"</td><td >" + L"</td>";
 			else
-				html += L"<td >" + label + L"</td><td >" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, name) + L"</td>";
+				html += L"<td >" + label + L"</td><td >" +dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
 			html += L"</tr>";
 		}
 
 		html += L"<tr>";
-		html += L"<td rowspan='3'>" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"PackCode") + L"</td><td >包装方式</td><td >" +
-			g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CPack") + L"</td>";
+		html += L"<td rowspan='3'>" +dw_list.GetItemString( row, L"PackCode") + L"</td><td >包装方式</td><td >" +
+			dw_list.GetItemString(row, L"CPack") + L"</td>";
 		html += L"</tr>";
 		html += L"<tr height='48'>";
-		html += L"<td >包装要求</td><td >" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"PackQualityTerm") + L"</td>";
+		html += L"<td >包装要求</td><td >" +dw_list.GetItemString( row, L"PackQualityTerm") + L"</td>";
 		html += L"</tr>";
 		html += L"<tr>";
 		html += L"<td >侧唛</td><td ></td>";
 		html += L"</tr>";
 
 		html += L"<tr height='72'>";
-		html += L"<td>" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
-			g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"QualityTerm") + L"</td>";
+		html += L"<td>" +dw_list.GetItemString( row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
+			dw_list.GetItemString(row, L"QualityTerm") + L"</td>";
 		html += L"</tr>";
 
 		html += L"</table>";
@@ -523,9 +531,9 @@
 		if (row < 1) row = dw_list.GetRow();
 		if (row < 1 || row > dw_list.GetRowCount()) return 0;
 
-		KXMLDOMElement e = g_xdoc_product.getRowElement(L"data/Item", row);
-		xstring skuid = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
-		xstring SKUNo = g_xdoc_product.getData(0, L"data/Item", row, L"SKUNo");
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		xstring skuid = dw_list.GetItemString( row, L"@guid");
+		xstring SKUNo = dw_list.GetItemString( row, L"SKUNo");
 		xstring id = ViewObject::GetGuid();
 		xstring ret1 = Up(id);
 		if (ret1 == L"-1") return -1;
@@ -544,13 +552,13 @@
 		// 图片名加入数据库
 		xml x ;
 		x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
-			"<ProductPictureID>" + id + L"</ProductPictureID>" +
-			"<OriginFile>" + originfile + L"</OriginFile>" +
-			"<FileExt>" + ext + L"</FileExt>" +
-			"<SKUID>" + skuid + L"</SKUID>" +
-			"<Name>[" + SKUNo.trim() + L"]</Name>" +
-			"<FileName>" + id + L".jpg</FileName>" +
-			"</Item>"
+			L"<ProductPictureID>" + id + L"</ProductPictureID>" +
+			L"<OriginFile>" + originfile + L"</OriginFile>" +
+			L"<FileExt>" + ext + L"</FileExt>" +
+			L"<SKUID>" + skuid + L"</SKUID>" +
+			L"<Name>[" + SKUNo.trim() + L"]</Name>" +
+			L"<FileName>" + id + L".jpg</FileName>" +
+			L"</Item>"
 		);
 
 		xaserverarg arg;
@@ -572,11 +580,11 @@
 		if (row < 1) row = dwc_list.GetRow();
 		if (row < 1 || row > dwc_list.GetRowCount()) return 0;
 
-		KXMLDOMElement e = g_xdoc_shoppingcart.getRowElement(L"data/Item", row);
-		xstring skuid = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID");
-		xstring SKUNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID/@__displaystring");
+		KXMLDOMElement e = dw_list.GetRowElement( row);
+		xstring skuid =dw_list.GetItemString( row, L"SKUID");
+		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
 		xstring CustomerID = m_customer;
-		xstring CustomerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CustomerItemNo");
+		xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
 		xstring id = ViewObject::GetGuid();
 		xstring ret1 = Up(id);
 		if (ret1 == L"-1") return -1;
@@ -638,19 +646,18 @@
 
 		int MB_OKCANCEL = 0x00000001;
 		int IDOK = 1;
-		if (win32::MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
+		if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
 
-		xstring id = images.item(index).selectSingleNode(L"@guid").text;
+		xstring id = images.item(index).selectSingleNode(L"@guid").text();
 
-		xml x = new xml;
-		x.setNativePointer(xml::CreateInstance());
-		xaserverarg arg = new xaserverarg;
+		xml x ;
+		xaserverarg arg;
 		arg.setNativePointer(arg.CreateInstance());
 		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
 		arg.AddArg(L"content", str);
-		if (url::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
+		if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
 		{
-			alert(x.text);
+			alert(x.text());
 			return -1;
 		}
 		if (count == 1)
@@ -659,10 +666,10 @@
 			dwc_list.Redraw();
 		}
 
-		xstring skuid = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID");
-		xstring SKUNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID/@__displaystring");
+		xstring skuid =dw_list.GetItemString( row, L"SKUID");
+		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
 		xstring CustomerID = m_customer;
-		xstring CustomerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CustomerItemNo");
+		xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
 		OnShowImage(skuid, CustomerItemNo);
 
 		return 1;
@@ -682,24 +689,22 @@
 		if (count < 1) return 1;
 
 		KXMLDOMNodeList images = imageElement.selectNodes(L"image");
-		int length = images.length;
+		int length = images.length();
 		if (length < index) return 1;
 
 		int MB_OKCANCEL = 0x00000001;
 		int IDOK = 1;
-		if (win32::MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
+		if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
 
-		xstring id = images.item(index).selectSingleNode(L"@guid").text;
+		xstring id = images.item(index).selectSingleNode(L"@guid").text();
 
-		xml x = new xml;
-		x.setNativePointer(xml::CreateInstance());
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
+		xml x;
+		xaserverarg arg;
 		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
 		arg.AddArg(L"content", str);
-		if (url::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
+		if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
 		{
-			alert(x.text);
+			alert(x.text());
 			return -1;
 		}
 		if (count == 1)
@@ -708,7 +713,7 @@
 			dw_list.Redraw();
 		}
 
-		KXMLDOMElement e1 = g_xdoc_product.getRowElement(L"data/Item", row);
+		KXMLDOMElement e1 = dw_list.GetRowElement(row);
 		xstring skuid = e1.getAttribute(L"guid");
 		OnShowImage(skuid);
 
@@ -719,32 +724,29 @@
 		int row = dw_list.GetNextSelectRow(1);
 		if (row < 1) row = dw_list.GetRow();
 		if (row < 1 || row > dw_list.GetRowCount()) return 0;
-		KXMLDOMElement e = g_xdoc_product.getRowElement(L"data/Item", row);
+		KXMLDOMElement e = dw_list.GetRowElement(row);
 		//KXMLDOMElement e = dw_list.GetRowElement(row);
 		//alert(e.xml);
-		xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
+		xstring id = dw_list.GetItemString( row, L"@guid");
 		//alert(id);
 
-		int hItem = tv_folder.GetSelectedItem();
-		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
-		xstring categoryid = e1.selectSingleNode(L"@guid").text;
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		KXMLDOMElement& e1 = *(KXMLDOMElement * )tv_folder.GetItemData(hItem);
+		xstring categoryid = e1.selectSingleNode(L"@guid").text();
 		//alert(categoryid);
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
-		arg.AddArg(L"SKUID", id);
-		arg.AddArg(L"CategoryID", categoryid);
+		xaserverarg* arg = new xaserverarg;
+		arg->AddArg(L"SKUID", id);
+		arg->AddArg(L"CategoryID", categoryid);
 
-
-		int pr = trust(arg as int); //g_xdoc_product
-		OpenWindow(L"dev:xpage[PictureView.Product3.vx]", pr);
+		OpenWindow(L"dev:xpage[PictureView.Product3.vx]", (LPARAM)arg);
 
 		return 1;
 	}
 
 	int ItemMaint()
 	{
-		int hItem = tv_folder.GetSelectedItem();
-		KXMLDOMElement e = tv_folder.GetItemData(hItem);
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		KXMLDOMElement& e = *(KXMLDOMElement * )tv_folder.GetItemData(hItem);
 		//xstring no = e.getAttribute(L"no");
 		//if(no==L"") return 1;
 		xstring guid = e.getAttribute(L"guid");
@@ -762,20 +764,20 @@
 		*/
 		//KXMLDOMElement ele = g_xdoc_product.getRowElement(L"data/Item", 1);
 		//alert(ele.xml);
-
+#ifdef shouldfinished
 		int pr = g_xdoc_product;
 		OpenWindow(L"dev:xpage[ProductLibraryItemMaint3.vx]", pr);
-
+#endif
 		return 1;
 	}
 
 	int ItemAdd()
 	{
-		int hItem = tv_folder.GetSelectedItem();
-		int hTopItem = LookupTopFolder(hItem);
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
 		xstring name = tv_folder.GetItemLabel(hTopItem);
 
-		KXMLDOMElement e = tv_folder.GetItemData(hItem);
+		KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
 		//alert(e.xml);
 		/*xstring no = e.getAttribute(L"no");
 		if(no==L"") return 1;
@@ -789,7 +791,7 @@
 		}*/
 		xstring guid = e.getAttribute(L"guid");
 		if (guid == L"") return 1;
-		xaserverarg arg = new xaserverarg;
+		xaserverarg arg;
 		arg.setNativePointer(arg.CreateInstance());
 		arg.AddArg(L"guid", e.getAttribute(L"guid"));
 		if (name == L"个人产品")
@@ -802,8 +804,7 @@
 		if (Name == L"") Name = e.getAttribute(L"cname");
 		arg.AddArg(L"No", No);
 		arg.AddArg(L"CName", Name);
-		int p = arg;
-		OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", p);
+		OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", (LPARAM)&arg);
 
 		if (arg.GetArgString(L"data.modify") == L"1")RetrieveData();
 
@@ -812,20 +813,20 @@
 
 	int OnAddFolder()
 	{
-		int hItem = tv_folder.GetSelectedItem();
-		int hTopItem = LookupTopFolder(hItem);
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
 		xstring name = tv_folder.GetItemLabel(hTopItem);
 		xstring selectname = tv_folder.GetItemLabel(hItem);
 
-		xaserverarg arg = ViewObject::MakeArg();
+		xaserverarg arg;
 		if (hItem != hTopItem)
 		{
-			KXMLDOMElement e = tv_folder.GetItemData(hItem);
+			KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
 			xstring folder = e.getAttribute(L"guid");
 			if (folder != L"")
 			{
 				arg.AddArg(L"parentCategoryID", folder);
-				OpenWindow(L"dev:xpage[UserFolderMaint.vx]", cast(arg as int));
+				OpenWindow(L"dev:xpage[UserFolderMaint.vx]",(LPARAM)&arg);
 				/*if(arg.GetArgString(L"FolderID")!=L"")
 				{
 					int child = tv_folder.GetChildItem(hItem);
@@ -848,28 +849,27 @@
 
 	int OnMaintFolder()
 	{
-		int hItem = tv_folder.GetSelectedItem();
-		int hTopItem = LookupTopFolder(hItem);
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
 		xstring name = tv_folder.GetItemLabel(hTopItem);
 		xstring selectname = tv_folder.GetItemLabel(hItem);
 
-		xaserverarg arg = ViewObject::MakeArg();
+		xaserverarg arg;
 		if (name == L"个人库" && selectname == L"新产品" && tv_folder.GetParentItem(hItem) == hTopItem) return 1;
 		if (hItem != hTopItem)
 		{
-			KXMLDOMElement e = tv_folder.GetItemData(hItem);
+			KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
 			xstring folder = e.getAttribute(L"guid");
 			if (folder != L"")
 			{
 				arg.AddArg(L"CategoryID", folder);
-				OpenWindow(L"dev:xpage[UserFolderMaint.vx]", cast(arg as int));
+				OpenWindow(L"dev:xpage[UserFolderMaint.vx]", (LPARAM)&arg);
 				if (arg.GetArgString(L"label") != L"")
 				{
 					tv_folder.SetItemLabel(hItem, arg.GetArgString(L"label"));
 				}
 			}
 		}
-
 		return 1;
 	}
 
@@ -902,7 +902,9 @@
 		}
 		else if (comdid == L"xmCarGoodsMaint")
 		{
+#ifdef shouldfinish
 			OpenWindow(L"dev:xpage[ShoppingCartProductMaint.vx]", trust(g_xdoc_shoppingcart as int));
+#endif
 			return 1;
 		}
 		else if (comdid == L"xmCarMaint")
@@ -917,52 +919,48 @@
 			while (rw > 0)
 			{
 				KXMLDOMElement xe = OnGetCarListRowElement(rw);
-				content += xe.xml;
+				content += xe.xml();
 				rw = dwc_list.GetNextSelectRow(rw + 1);
 
 			}
 			content += L"</data>";
-			xaserverarg carg = new xaserverarg;
+			xaserverarg carg;
 			carg.setNativePointer(carg.CreateInstance());
 			carg.AddArg(L"content", content);
-			int newArg2 = carg.ptr_native_;
-			OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", newArg2);
+			OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", (LPARAM) & carg);
 			return 1;
 		}
 		else if (comdid == L"xmEnquiry")
 		{
-			rw = dwc_list.GetNextSelectRow(1);
-			content = L"<data>";
+			int rw = dwc_list.GetNextSelectRow(1);
+			xstring content = L"<data>";
 			while (rw > 0)
 			{
-				xe = OnGetCarListRowElement(rw);
-				content += xe.xml;
+				KXMLDOMElement xe = OnGetCarListRowElement(rw);
+				content += xe.xml();
 				rw = dwc_list.GetNextSelectRow(rw + 1);
 			}
 			content += L"</data>";
-			carg = new xaserverarg;
+			xaserverarg carg;
 			carg.setNativePointer(carg.CreateInstance());
 			carg.AddArg(L"content", content);
-			newArg2 = carg.ptr_native_;
-			OpenWindow(L"dev:xpage[Enquiry.Import.vx]", newArg2);
+			OpenWindow(L"dev:xpage[Enquiry.Import.vx]", (LPARAM)&carg);
 			return 1;
 		}
 		else if (comdid == L"xmPurchar")
 		{
-			rw = dwc_list.GetNextSelectRow(1);
-			content = L"<data>";
+			int rw = dwc_list.GetNextSelectRow(1);
+			xstring content = L"<data>";
 			while (rw > 0)
 			{
-				xe = OnGetCarListRowElement(rw);
-				content += xe.xml;
+				KXMLDOMElement xe = OnGetCarListRowElement(rw);
+				content += xe.xml();
 				rw = dwc_list.GetNextSelectRow(rw + 1);
 			}
 			content += L"</data>";
-			carg = new xaserverarg;
-			carg.setNativePointer(carg.CreateInstance());
+			xaserverarg carg ;
 			carg.AddArg(L"content", content);
-			newArg2 = carg.ptr_native_;
-			OpenWindow(L"dev:xpage[PO.Import.vx]", newArg2);
+			OpenWindow(L"dev:xpage[PO.Import.vx]", (LPARAM)&carg);
 			return 1;
 		}
 		else if (comdid == L"xmSearch")
@@ -972,20 +970,18 @@
 		}
 		else if (comdid == L"xmQuote")
 		{
-			rw = dwc_list.GetNextSelectRow(1);
-			content = L"<data>";
+			int rw = dwc_list.GetNextSelectRow(1);
+			xstring content = L"<data>";
 			while (rw > 0)
 			{
-				xe = OnGetCarListRowElement(rw);
-				content += xe.xml;
+				KXMLDOMElement xe = OnGetCarListRowElement(rw);
+				content += xe.xml();
 				rw = dwc_list.GetNextSelectRow(rw + 1);
 			}
 			content += L"</data>";
-			carg = new xaserverarg;
-			carg.setNativePointer(carg.CreateInstance());
+			xaserverarg carg;
 			carg.AddArg(L"content", content);
-			newArg2 = carg.ptr_native_;
-			OpenWindow(L"dev:xpage[Quote.Import.vx]", newArg2);
+			OpenWindow(L"dev:xpage[Quote.Import.vx]",  (LPARAM) & carg);
 			return 1;
 		}
 		else if (comdid == L"xmAdd")
@@ -996,9 +992,9 @@
 		{
 			int row = dw_list.GetRow();
 			if (row < 1) return 1;
-			xstring skuid = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
+			xstring skuid = dw_list.GetItemString( row, L"@guid");
 			xml skuid_x = ViewObject::RetrieveData(L"/sale/data/ProductLibrary3/ProductNumberone", L"SKUID", skuid);
-			xstring  skuidEx = skuid_x.text;
+			xstring  skuidEx = skuid_x.text();
 			int  skuid1 = skuidEx.toInt();
 			if (skuid1)
 			{
@@ -1015,9 +1011,8 @@
 		}
 		else if (comdid == L"xmCarAdd")
 		{
-			hCursor = xutil::SetCursorWait();
-
-			name = GetControl(L"frame:ed_goodscar").GetText();
+			HCURSOR hCursor = xutil::SetCursorWait();
+			name = xcontrol(GetControl(L"frame:ed_goodscar")).GetText();
 			if (name != L"")
 			{
 				if (ShoppingCartView::AddCar(name) == 1)
@@ -1047,8 +1042,10 @@
 		}
 		else if (comdid == L"xmPropConfigure")
 		{
+#ifdef shouldfinish
 			int r = cast(g_xdoc_product.getData(L"data/Item", L"@guid") as int);
 			OpenWindow(L"dev:xpage[Product.ItemProp.Maint.vx]", r);
+#endif
 			return 1;
 		}
 		else if (comdid == L"xmRertieve")
@@ -1064,7 +1061,7 @@
 		}
 		else if (comdid == L"xmToCar")
 		{
-			name = GetControl(L"frame:cbx_goodscar").GetText();
+			name = xcontrol(GetControl(L"frame:cbx_goodscar")).GetText();
 			if (name == L"==选择购物车==L")
 			{
 				alert(L"请选择购物车");
@@ -1075,7 +1072,7 @@
 			xstring html = L"<data>";
 			while (xrow > 0)
 			{
-				KXMLDOMElement e = g_xdoc_product.getRowElement(L"data/Item", xrow);
+				KXMLDOMElement e =dw_list.GetRowElement(xrow);
 				goodsid = ProductLibraryView::GetElementString(e, L"@guid");
 				html += L"<item goodid='" + goodsid + L"' id ='" + ProductLibraryView::GetGuid() + L"'/>";
 				xrow = dw_list.GetNextSelectRow(xrow + 1);
@@ -1092,35 +1089,35 @@
 	}
 
 	//命令处理事件
-	int OnXCommand(ref TXCommandEvent evt, int param)
+	int OnXCommand(TEvent* evt, int param)
 	{
-		return OnCmdDispatch(evt.pStrID);
+		return OnCmdDispatch(evt->xcommand.pStrID);
 	}
 
 	//查找当前树项的顶级目录
-	int LookupTopFolder(int hItem)
+	HTREEITEM LookupTopFolder(HTREEITEM hItem)
 	{
-		int hRoot = tv_folder.GetRootItem();
+		HTREEITEM hRoot = tv_folder.GetRootItem();
 		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
 		return hItem;
 	}
 
 	//插入产品类项的子项
-	int MakeGoodsFolderItem(int hItem, xstring sno)
+	int MakeGoodsFolderItem(HTREEITEM hItem, xstring sno)
 	{
 		xml x = ProductLibraryView::GetTreeChildItems3(sno);
 		if (!x) return 0;
 
-		KXMLDOMNodeList nlist = x.SelectNodes(L"//Item");
-		int len = nlist.length;
+		KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
+		int len = nlist.length();
 		for (int i = 0; i < len; i++)
 		{
-			KXMLDOMElement e = nlist.item(i);
+			KXMLDOMElement& e = *new KXMLDOMElement(nlist.item(i));
 			xstring name = e.getAttribute(L"CName");
 			xstring no = e.getAttribute(L"CategoryNo");
 			xstring label = no.trim() + L" " + name;
 
-			int h = tv_folder.InsertChildItem(hItem, label, trust(e as int), 15);
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, (LPARAM)& e, 15);
 			xstring child = e.getAttribute(L"Childs");
 			if (child == L"")
 				tv_folder.SetItemChild(h, 1);
@@ -1131,21 +1128,21 @@
 	}
 
 	//插入新产品目录子项
-	int MakeUserGoodsFolderItem(int hItem, xstring sno)
+	int MakeUserGoodsFolderItem(HTREEITEM hItem, xstring sno)
 	{
 		xml x = ProductLibraryView::GetTreeUserChildItems3(sno);
 		if (!x) return 0;
 
-		KXMLDOMNodeList nlist = x.SelectNodes(L"//Item");
-		int len = nlist.length;
+		KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
+		int len = nlist.length();
 		for (int i = 0; i < len; i++)
 		{
-			KXMLDOMElement e = nlist.item(i);
+			KXMLDOMElement& e = * new KXMLDOMElement(nlist.item(i));
 			xstring name = e.getAttribute(L"CName");
 			xstring no = e.getAttribute(L"CategoryNo");
 			xstring label = no.trim() + L" " + name;
 
-			int h = tv_folder.InsertChildItem(hItem, label, trust(e as int), 15);
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, (LPARAM)&e, 15);
 			xstring child = e.getAttribute(L"Childs");
 			if (child == L"")
 				tv_folder.SetItemChild(h, 1);
@@ -1156,55 +1153,55 @@
 	}
 
 	//插入购物车项
-	int ExpandCatChildFolder(int hItem, KXMLDOMElement ele, int image)
+	int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
 	{
-		KXMLDOMNodeList nlist = ele.SelectNodes(L"item");
-		int len = nlist.length;
+		KXMLDOMNodeList nlist = ele.selectNodes(L"item");
+		int len = nlist.length();
 		if (len > 0) tv_folder.SetItemChild(hItem, 1);
 		for (int i = 0; i < len; i++)
 		{
-			KXMLDOMElement e = nlist.item(i);
+			KXMLDOMElement& e = *new KXMLDOMElement(nlist.item(i));
 			xstring name = e.getAttribute(L"name");
-			int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), image);
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM) & e, image);
 			ExpandCatChildFolder(h, e, 35);
 		}
 		return 1;
 	}
-	int MakeGoodCarFolderItem(int hItem)
+	int MakeGoodCarFolderItem(HTREEITEM hItem)
 	{
 		xml x = ShoppingCartView::GetRoleList();
 		if (!x) return 0;
-		KXMLDOMNodeList nlist = x.SelectNodes(L"/data/item");
-		int len = nlist.length;
+		KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
+		int len = nlist.length();
 		for (int i = 0; i < len; i++)
 		{
-			KXMLDOMElement e = nlist.item(i);
+			KXMLDOMElement& e = *new KXMLDOMElement(nlist.item(i));
 			xstring name = e.getAttribute(L"name");
-			int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), 35);
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM)&e, 35);
 			ExpandCatChildFolder(h, e, 35);
 		}
 		return 1;
 	}
 
-	int ExpandItem(int hItem)
+	int ExpandItem(HTREEITEM hItem)
 	{
-		int hTopItem = LookupTopFolder(hItem);
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
 		xstring name = tv_folder.GetItemLabel(hTopItem);
-		int child = tv_folder.GetChildItem(hItem);
+		HTREEITEM child = tv_folder.GetChildItem(hItem);
 		xstring no = L"";
-		KXMLDOMElement e;
+		KXMLDOMElement* e=nullptr;
 		if (name == L"公司库" && !child)
 		{
 			no = L"";
 			if (hTopItem != hItem)
 			{
-				e = tv_folder.GetItemData(hItem);
-				no = e.getAttribute(L"categoryid");
+				e = (KXMLDOMElement * )tv_folder.GetItemData(hItem);
+				no = e->getAttribute(L"categoryid");
 			}
 			else
 			{
-				e = tv_folder.GetItemData(hItem);
-				no = e.getAttribute(L"categoryid");
+				e = (KXMLDOMElement*)tv_folder.GetItemData(hItem);
+				no = e->getAttribute(L"categoryid");
 			}
 			MakeGoodsFolderItem(hItem, no);
 		}
@@ -1213,8 +1210,8 @@
 			no = L"";
 			if (hTopItem != hItem)
 			{
-				e = tv_folder.GetItemData(hItem);
-				no = e.getAttribute(L"categoryid");
+				e = (KXMLDOMElement*)tv_folder.GetItemData(hItem);
+				no = e->getAttribute(L"categoryid");
 				MakeUserGoodsFolderItem(hItem, no);
 			}
 		}
@@ -1228,8 +1225,8 @@
 	//树展开
 	int OnTreeExpanding(TEvent * evt, int p)
 	{
-		ref NMTREEVIEW nmtv = evt.pnmh;
-		int hItem = nmtv.itemNew.hItem;
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
 		return ExpandItem(hItem);
 	}
 
@@ -1244,11 +1241,11 @@
 		return 1;
 	}
 
-	int LookupCustomerFolder(int hItem)
+	HTREEITEM LookupCustomerFolder(HTREEITEM hItem)
 	{
 		while (true)
 		{
-			KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
+			KXMLDOMElement& e1 = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
 			xstring str = e1.getAttribute(L"no");
 			if (str.find(L"Customer:") >= 0) return hItem;
 			hItem = tv_folder.GetParentItem(hItem);
@@ -1257,20 +1254,20 @@
 		return 0;
 	}
 
-	xstring LookupCustomer(int hItem)
+	xstring LookupCustomer(HTREEITEM hItem)
 	{
 		hItem = LookupCustomerFolder(hItem);
-		if (hItem == 0) return "";
-		KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
+		if (hItem == 0) return L"";
+		KXMLDOMElement& e1 = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
 		xstring str = e1.getAttribute(L"no");
-		return str.mid(L"Customer:".length(), 9999);
+		return str.mid(xstring(L"Customer:").length(), 9999);
 	}
 
 	int RetrieveData()
 	{
 		ximageview im = GetControl(L"im1");
-		int hItem = tv_folder.GetSelectedItem();
-		int hTopItem = LookupTopFolder(hItem);
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
 		xstring name = tv_folder.GetItemLabel(hTopItem);
 		xstring selectname = tv_folder.GetItemLabel(hItem);
 
@@ -1286,24 +1283,24 @@
 			dwc_list.SetReadOnly(true);
 			dwc_list.Redraw();
 
-			im.ResetEx();
+			im.Reset();
 			im.Redraw();
 
 
-			htmlctrl xs1 = GetControl(L"html_detail");
+			xshtml xs1 = GetControl(L"html_detail");
 			xs1.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
 
 			if (name != L"公司库") return 1;
 		}
 		//return 1;
 
-		int hCursor = xutil::SetCursorWait();
+		HCURSOR hCursor = xutil::SetCursorWait();
 
 		if (name == L"购物车")
 		{
 			if (selectname != name)
 			{
-				KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
+				KXMLDOMElement& e1 = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
 				xstring str = e1.getAttribute(L"no");
 				alert(str);
 				if (str.find(L"Customer:") == 0 || str.find(L"SO:") == 0)
@@ -1315,15 +1312,15 @@
 						dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodssolist");
 					dwc_list.Reset();
 					dwc_list.SetReadOnly(true);
-					g_xdoc_shoppingcart.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
+					dw_list.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
 				}
 				else if (e1.getAttribute(L"categoryid") != L"")
 				{
 					xstring categoryid = e1.getAttribute(L"categoryid");
-					dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid).GetXmlDoc());
+					dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid));
 					dwc_list.SetReadOnly(true);
 					dwc_list.Reset();
-					g_xdoc_shoppingcart.Retrieve(ProductLibraryView::GetMaintList3(categoryid, queryString, L""));
+					dw_list.Retrieve(ProductLibraryView::GetMaintList3(categoryid, queryString, L""));
 					dwc_list.Redraw();
 				}
 				else
@@ -1331,27 +1328,26 @@
 					dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
 					dwc_list.SetReadOnly(true);
 					dwc_list.Reset();
-					g_xdoc_shoppingcart.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
+					dw_list.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
 				}
-				dwc_list.PostRetrieve();
+				//dwc_list.PostRetrieve();
 				dwc_list.Redraw();
 
+				xshtml xs = GetControl(L"html_detail");
 				if (dwc_list.GetRowCount() >= 1)
 				{
-					htmlctrl xs = GetControl(L"html_detail");
 					xs.SetContent(makeGoodscarHtml(1));
 
 					if (m_customer != L"")
 					{
-						xstring skuid = g_xdoc_shoppingcart.getData(0, L"data/Item", 1, L"SKUID");
-						xstring customerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", 1, L"CustomerItemNo");
+						xstring skuid =dw_list.GetItemString( 1, L"SKUID");
+						xstring customerItemNo =dw_list.GetItemString( 1, L"CustomerItemNo");
 						OnShowImage(skuid, customerItemNo);
 					}
 				}
 				else
 				{
-
-					im.ResetEx();
+					im.Reset();
 					im.Redraw();
 
 					xs = GetControl(L"html_detail");
@@ -1370,7 +1366,7 @@
 
 				if (hItem != hTopItem)
 				{
-					KXMLDOMElement e = tv_folder.GetItemData(hItem);
+					KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
 					no = e.getAttribute(L"guid");
 				}
 
@@ -1381,36 +1377,35 @@
 				*/
 
 				if (name == L"个人库")
-					g_xdoc_product.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
+					dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
 				else
 				{
 					if (queryString != L"")
 					{
 
 						if (no == L"N000005")
-							g_xdoc_product.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
+							dw_list.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
 						else
-							g_xdoc_product.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
+							dw_list.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
 					}
 					else
-						g_xdoc_product.Retrieve(ProductLibraryView::GetMaintList3(no));
+						dw_list.Retrieve(ProductLibraryView::GetMaintList3(no));
 				}
-				dw_list.PostRetrieve();
+				//dw_list.PostRetrieve();
 				dw_list.Redraw();
 
+				xshtml xs = GetControl(L"html_detail");
 				if (dw_list.GetRowCount() > 0)
 				{
-					xs = GetControl(L"html_detail");
 					xs.SetContent(makeHtml(1));
-					xstring id = g_xdoc_product.getData(0, L"data/Item", 1, L"@guid");
+					xstring id = dw_list.GetItemString( 1, L"@guid");
 					OnShowImage(id);
 				}
 				else
 				{
-					im.ResetEx();
+					im.Reset();
 					im.Redraw();
 
-					xs = GetControl(L"html_detail");
 					xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
 				}
 				xs.Redraw();
@@ -1423,9 +1418,9 @@
 
 	int OnTreeSelChanged(TEvent * evt, int p)
 	{
-		ref NMTREEVIEW nmtv = cast(evt.pnmh as NMTREEVIEW);
-		int hItem = nmtv.itemNew.hItem;
-		int hTopItem = LookupTopFolder(hItem);
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
 		xstring name = tv_folder.GetItemLabel(hTopItem);
 		xstring selectname = tv_folder.GetItemLabel(hItem);
 		ximageview im = GetControl(L"im1");
@@ -1445,23 +1440,23 @@
 				ResetAgent(L"goodslib");
 		}
 		//RetrieveData();
-		win32::PostMessage(GetHWND(), 0x401, L"xmRefresh", 0);
+		PostMessage(GetHWND(), 0x401, (WPARAM)L"xmRefresh", 0);
 
 		return 1;
 	}
 
-	int  ExpandChildFolder(int hItem, KXMLDOMElement pElement)
+	int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
 	{
-		KXMLDOMNodeList nlist = pElement.SelectNodes(L"Item");
-		int len = nlist.length;
+		KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
+		int len = nlist.length();
 		for (int i = 0; i < len; i++)
 		{
-			KXMLDOMElement e = nlist.item(i);
+			KXMLDOMElement& e = * new KXMLDOMElement(nlist.item(i));
 			xstring name = e.getAttribute(L"cname");
 			xstring sImage = e.getAttribute(L"image");
 			int image = 15;
 			//if(sImage) image = sImage.toInt();
-			int h = tv_folder.InsertChildItem(tv_folder.GetId(), hItem, name, trust(e as int), image);
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM) & e, image);
 			tv_folder.SetItemChild(h, 1);
 			ExpandChildFolder(h, e);
 		}
@@ -1476,11 +1471,11 @@
 		return 1;
 	}
 
-	int OnViewZoomChange(ref TCommandEvent evt, int lParam)
+	int OnViewZoomChange(TEvent* evt, int lParam)
 	{
 		ximageview im = GetControl(L"im1");
 		xcombobox xc = GetControl(L"precent");
-		xstring text = xcombobox::GetLBText(xc.GetId());
+		xstring text = xc.GetLBText();
 		int p = text.toInt();
 		if (p == 0) p = 100;
 		im.Preview(p);
@@ -1490,18 +1485,20 @@
 	int OnAttachEvent()
 	{
 		//绑定工具条点击事件
-		AttachEvent(L"WM_XCOMMAND", OnXCommand);
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ProductLibrary4Win::OnXCommand);
 		//获取焦点事件,用于重置工具条
-		AttachEvent(L"WM_SETFOCUS", OnSetFocus);
-		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", OnRowChanged);
-		AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", OnGoodsCarRowChanged);
-		AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", OnTreeExpanding);
-		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", OnTreeSelChanged);
-		AttachEvent(L"WM_COMMAND", OnCkbCLick);	//checkbox打钩事件
-		AttachEvent(L"WM_COMMAND", OnCkbCLick2);	//checkbox打钩事件	
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ProductLibrary4Win::OnSetFocus);
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnRowChanged);
+		AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnGoodsCarRowChanged);
+		AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ProductLibrary4Win::OnTreeExpanding);
+		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ProductLibrary4Win::OnTreeSelChanged);
+		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick);	//checkbox打钩事件
+		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick2);	//checkbox打钩事件	
 
-		AttachEvent(L"im1", L"IMG_LDBCLICK", OnImgDBClicked);
-		AttachEvent(L"precent", L"CBN_SELCHANGE", OnViewZoomChange);
+		AttachEvent(L"im1", L"IMG_LDBCLICK", (FEvent)&ProductLibrary4Win::OnImgDBClicked);
+		AttachEvent(L"precent", L"CBN_SELCHANGE", (FEvent)&ProductLibrary4Win::OnViewZoomChange);
+
+		return 1;
 	}
 
 	int onload()
@@ -1518,18 +1515,7 @@
 
 		InitialFolder();
 
-		g_xdoc_product = new xdataset;
-		g_xdoc_product.Init();
-		xbind bindproduct = new xbind;
-		bindproduct.bindEx(dw_list, g_xdoc_product, L"");
-
-		g_xdoc_shoppingcart = new xdataset;
-		g_xdoc_shoppingcart.Init();
-
-		xbind bindcart = new xbind;
-		bindcart.bindEx(dwc_list, g_xdoc_shoppingcart, L"");
-
-		dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L"").GetXmlDoc());
+		dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L""));
 		dw_list = GetControl(L"dw_list");
 		dw_list.SetReadOnly(true);
 
@@ -1538,7 +1524,7 @@
 
 		if (dw_list.GetRowCount())
 		{
-			htmlctrl xs = GetControl(L"html_detail");
+			xshtml xs = GetControl(L"html_detail");
 			xs.SetContent(makeHtml(1));
 		}
 
@@ -1556,21 +1542,20 @@
 
 	int OnImgDBClicked(TEvent * evt, int pr)
 	{
-		ref IMGNNMHDR nmtv = evt.pnmh;
+		IMGNNMHDR& nmtv = *(IMGNNMHDR*)evt->notify.pnmh;
 		xstring src = nmtv.path;
 		/*if(src.length() > 60)
 			src = src.right(44);
 		else
 			src=src.mid(src.find(L"Thumbs", 0)+6, 50);
 		*/
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
+		xaserverarg& arg = *new xaserverarg;
 		//arg.AddArg(L"src",L"/business/products/chanpin"+src);	
 		arg.AddArg(L"src", src);
 
 		//win::OpenWindow(L"dev:xpage[BigPicture.vx]",arg);	
 
-		int h = openUrl(L"/sale/view/ProductLibrary/xpage/bigpictureview", arg);
+		int h = openUrl(L"/sale/view/ProductLibrary/xpage/bigpictureview", &arg);
 		return 1;
 		/*
 		xwin x = new xwin;
diff --git a/jrj/project/viewobject/productlibrary.view.hpp b/jrj/project/viewobject/productlibrary.view.hpp
index 59f8aa9..bb47c68 100644
--- a/jrj/project/viewobject/productlibrary.view.hpp
+++ b/jrj/project/viewobject/productlibrary.view.hpp
@@ -7,7 +7,7 @@
 #include <wobject/xurl.hpp>
 #include <xcontrol/xdwgrid.hpp>
 #include <xcontrol/xdwtable.hpp>
-#include <view.base.hpp>
+#include <viewobject/view.base.hpp>
 
 class ProductLibraryView: public ViewObject
 {
@@ -30,10 +30,10 @@
     }
 public:
     //鍒犻櫎鍟嗗搧椤�
-    static int DeleteItem(string id)
+    static int DeleteItem(xstring id)
     {
         //if(RetrieveData(L"/sale/data/SO/goods/usegoods/delete",L"guid",id)) return 1;
-        string str = "<Item update.modify='1' update.delete='1' guid='"+id+L"'/>";
+        string str = L"<Item update.modify='1' update.delete='1' guid='"+id+L"'/>";
         if(RetrieveData(L"/sale/data/ProductLibrary3/update/product",L"content",str)) return 1;
         return -1;
     }
diff --git a/jrj/project/viewobject/shoppingcart.view.hpp b/jrj/project/viewobject/shoppingcart.view.hpp
index 3f9dc97..3af90bb 100644
--- a/jrj/project/viewobject/shoppingcart.view.hpp
+++ b/jrj/project/viewobject/shoppingcart.view.hpp
@@ -18,37 +18,37 @@
         return RetrieveData(L"/sale/data/ProductLibrary/shoppingcart/rolelist");
     }
     
-    static KXMLDOMDocument  GetRoleList(string CustomerID)
+    static KXMLDOMDocument  GetRoleList(xstring CustomerID)
     {
         return RetrieveData(L"/sale/data/ProductLibrary3/shoppingcart/rolelistex",L"CustomerID",CustomerID);
     }
     
-    static KXMLDOMDocument  GetSupplierRoleList(string SupplierID)
+    static KXMLDOMDocument  GetSupplierRoleList(xstring SupplierID)
     {
         return RetrieveData(L"/sale/data/ProductLibrary3/shoppingcart/supplier.rolelist",L"SupplierID",SupplierID);
     }
-    static KXMLDOMDocument  GetRoleListForSO(string CustomerID)
+    static KXMLDOMDocument  GetRoleListForSO(xstring CustomerID)
     {
         return RetrieveData(L"/sale/data/ProductLibrary3/shoppingcart/so/rolelistex",L"CustomerID",CustomerID);
     }
     
-    static KXMLDOMDocument  GetGoodsList(string name)
+    static KXMLDOMDocument  GetGoodsList(xstring name)
     {
         return RetrieveData(L"/sale/data/ProductLibrary/shoppingcart/goodslist",L"name",name);
     }	
     
-    static KXMLDOMDocument  GetGoodsList(string name,string QueryText)
+    static KXMLDOMDocument  GetGoodsList(xstring name,xstring QueryText)
     {
         return RetrieveData(L"/sale/data/ProductLibrary3/shoppingcart/goodslistex",L"name",name,L"QueryText",QueryText);
     }	
 
-    int AddCar(string name)
+    static int AddCar(xstring name)
     {
         if(RetrieveData(L"/sale/data/SO/goods/goodscar/add",L"name",name)) return 1;
         return -1;
     }
     
-    int GoodsImport(string name,string content)
+    static int GoodsImport(xstring name,xstring content)
     {
         if(RetrieveData(L"/sale/data/ProductLibrary/shoppingcart/import",L"name",name,L"content",content)) return 1;
         return -1;
diff --git a/jrj/xframe/win32/win.hpp b/jrj/xframe/win32/win.hpp
index 1d2439a..e32f9d2 100644
--- a/jrj/xframe/win32/win.hpp
+++ b/jrj/xframe/win32/win.hpp
@@ -33,6 +33,7 @@
 #define PostMessage PostMessageW
 #define GetWindowLong GetWindowLongW 
 #define SetWindowLong SetWindowLongW
+#define MessageBox	MessageBoxW
 
 extern "C"
 {
diff --git a/jrj/xframe/wobject/xwin.hpp b/jrj/xframe/wobject/xwin.hpp
index 6de68fc..6b58a9f 100644
--- a/jrj/xframe/wobject/xwin.hpp
+++ b/jrj/xframe/wobject/xwin.hpp
@@ -113,7 +113,7 @@
 		return getKWin()->Redraw();
 	}
 
-	int openUrl(string aurl, xaserverarg* para)
+	int openUrl(xstring aurl, xaserverarg* para)
 	{
 		KXMLDOMDocument x;
 		
@@ -154,7 +154,7 @@
 		return getKWin()->CloseWindow();
 	}
 
-	int openUrl(string aurl)
+	int openUrl(xstring aurl)
 	{
 		xaserverarg* arg = new xaserverarg();
 		return openUrl(aurl, arg);
@@ -164,4 +164,15 @@
 	{
 		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);
+	}
 };
diff --git a/jrj/xframe/xcontrol/xcheckbox.hpp b/jrj/xframe/xcontrol/xcheckbox.hpp
index 10059a8..6a133e8 100644
--- a/jrj/xframe/xcontrol/xcheckbox.hpp
+++ b/jrj/xframe/xcontrol/xcheckbox.hpp
@@ -3,144 +3,37 @@
 #include "wobject/xcontrol.hpp"
 #include "win32/win.hpp"
 
-typedef struct _TREEITEM{} *HTREEITEM;
-
-#define TVI_ROOT                ((HTREEITEM)(ULONG_PTR)-0x10000)
-#define TVI_FIRST               ((HTREEITEM)(ULONG_PTR)-0x0FFFF)
-#define TVI_LAST                ((HTREEITEM)(ULONG_PTR)-0x0FFFE)
-#define TVI_SORT                ((HTREEITEM)(ULONG_PTR)-0x0FFFD)
-
-#define TVIF_TEXT               0x0001
-#define TVIF_IMAGE              0x0002
-#define TVIF_PARAM              0x0004
-#define TVIF_STATE              0x0008
-#define TVIF_HANDLE             0x0010
-#define TVIF_SELECTEDIMAGE      0x0020
-#define TVIF_CHILDREN           0x0040
-#define TVIF_INTEGRAL           0x0080
-
-#define TVIF_STATEEX            0x0100
-#define TVIF_EXPANDEDIMAGE      0x0200
-
-#define TVIS_SELECTED           0x0002
-#define TVIS_CUT                0x0004
-#define TVIS_DROPHILITED        0x0008
-#define TVIS_BOLD               0x0010
-#define TVIS_EXPANDED           0x0020
-#define TVIS_EXPANDEDONCE       0x0040
-#define TVIS_EXPANDPARTIAL      0x0080
-
-#define TVIS_OVERLAYMASK        0x0F00
-#define TVIS_STATEIMAGEMASK     0xF000
-#define TVIS_USERMASK           0xF000
-
-#define TVGN_ROOT               0x0000
-#define TVGN_NEXT               0x0001
-#define TVGN_PREVIOUS           0x0002
-#define TVGN_PARENT             0x0003
-#define TVGN_CHILD              0x0004
-#define TVGN_FIRSTVISIBLE       0x0005
-#define TVGN_NEXTVISIBLE        0x0006
-#define TVGN_PREVIOUSVISIBLE    0x0007
-#define TVGN_DROPHILITE         0x0008
-#define TVGN_CARET              0x0009
-#define TVGN_LASTVISIBLE        0x000A
-#define TVGN_NEXTSELECTED       0x000B
-
- #define TV_FIRST 0x1100 
-
-struct SCROLLINFO 
-{
-    int cbSize;
-    int fMask;
-    int  nMin;
-    int  nMax;
-    int nPage;
-    int  nPos;
-    int  nTrackPos;
-};
-
-struct tvitem 
-{
-    int mask;
-    HTREEITEM hItem;
-    int state;
-    int stateMask;
-    string pszText;
-    int cchTextMax;
-    int iImage;
-    int iSelectedImage;
-    int cChildren;
-    LPARAM lParam;
-};
-
-struct tvinsertstruct 
-{
-    HTREEITEM hParent;
-    HTREEITEM hInsertAfter;
-    tvitem  item;
-};
-    
-
-struct NMTREEVIEW : public NMHDR
-{
-    int action;
-    tvitem itemOld;
-    tvitem itemNew;
-    xpoint ptDrag;
-};
-
-
-struct TVNNMHDR : public NMHDR
-{
-    HTREEITEM FromItem;
-    HTREEITEM ToItem;
-    xpoint pt;
-    string PopupMenu;
-};	
-
-struct NMTVDISPINFO : public NMHDR
-{
-    tvitem 	item;
-};	
-
-struct TVHITTESTINFO {
-    xpoint     pt;
-    int      flags;
-    HTREEITEM hItem;
-};
-
 class xcheckbox:  public xcontrol
 {
 public:
     xcheckbox() :xcontrol(nullptr) {}
     xcheckbox(void* implptr) :xcontrol(implptr) {}
 
-    static int SetCheck(int wid)
+    static int SetCheck(HWND wid)
     {
         int BM_SETCHECK = 0x00F1;
         int BST_CHECKED = 0x1;
         SendMessage(wid, BM_SETCHECK, BST_CHECKED, 0);
         return 1;
     }
-    static int SetUnCheck(int wid)
+    static int SetUnCheck(HWND wid)
     {
         int BM_SETCHECK = 0x00F1;
         int BST_UNCHECKED = 0x0;
-        win32::SendMessage(wid, BM_SETCHECK, BST_UNCHECKED, 0);
+        SendMessage(wid, BM_SETCHECK, BST_UNCHECKED, 0);
         return 1;
     }
-    static int SetText(int wid, string txt)
+    static int SetText(HWND wid, string txt)
     {
         int WM_SETTEXT = 0x000C;
-        win32::SendMessage(wid, WM_SETTEXT, 0, txt);
+        SendMessage(wid, WM_SETTEXT, 0, (LPARAM)txt);
         return 1;
     }
-    static int GetCheck(int wid)
+    static int GetCheck(HWND wid)
     {
         int BM_GETCHECK = 0x00F0;
         int BM_GETSTATE = 0x00F2;
-        int r = win32::SendMessage(wid, BM_GETSTATE, 0, 0);
+        int r = SendMessage(wid, BM_GETSTATE, 0, 0);
         if (r == 8 || r == 0 || r == 520) return -1;
         else return 1;
     }
@@ -160,10 +53,10 @@
         return 1;
     }
 
-    int SetText(, string txt)
+    int SetText(string txt)
     {
         int WM_SETTEXT = 0x000C;
-        SendMessage(GetHWND(), WM_SETTEXT, 0, txt);
+        SendMessage(GetHWND(), WM_SETTEXT, 0, (LPARAM)txt);
         return 1;
     }
     int GetCheck()

--
Gitblit v1.9.3