xj qian
2024-06-25 47d903f3ed61cd1abc33c723a30fe53c829f9c07
update product
已修改7个文件
602 ■■■■■ 文件已修改
jrj/ext-jrj/ext-jrj.vcxproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/Product.list.cpp 437 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/viewobject/productlibrary.view.hpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/viewobject/shoppingcart.view.hpp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/win32/win.hpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/wobject/xwin.hpp 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/xcontrol/xcheckbox.hpp 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
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;
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;
    }
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;
jrj/xframe/win32/win.hpp
@@ -33,6 +33,7 @@
#define PostMessage PostMessageW
#define GetWindowLong GetWindowLongW 
#define SetWindowLong SetWindowLongW
#define MessageBox    MessageBoxW
extern "C"
{
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);
    }
};
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()