Bläddra i källkod

Merge branch 'master' of https://gitserver.xunjoy.com/zhangyang/zhipuzi_pos_windows

# Conflicts:
#	bin/Win32/Debug/zhipuzi_pos_windows/db/pos.db
zhangyang 6 år sedan
förälder
incheckning
d7b7f45c0e

+ 2 - 1
bin/Win32/Debug/zhipuzi_pos_windows/skin/login.xml

@@ -2,7 +2,8 @@
 <Window size="520,360" caption="0,0,0,36" roundcorner="4,4" >
 	<VerticalLayout bkimage="file='Dialog_BG2.png' corner='4,48,4,4'" >
 		<HorizontalLayout height="44">
-			<Label text="智铺子收银软件V1.0" width="150" height="44" valign="center" padding="10,0,0,0" textcolor="#FFFFFFFF"/>
+			<Label text="智铺子收银软件" width="90" height="44" valign="center" padding="10,0,0,0" textcolor="#FFFFFFFF"/>
+			<Label name="login_version" text="" width="120" height="44" valign="center" padding="10,0,0,0" textcolor="#FFFFFFFF"/>
 			<Control />
 			<Button name="closebtn" width="42" height="18" padding="0,6,0,0" tooltip="关闭收银软件" normalimage="file='frame_btn_close_normal.bmp' mask='#FFFF00FF'" hotimage="file='frame_btn_close_hot.bmp' mask='#FFFF00FF'" pushedimage="file='frame_btn_close_down.bmp' mask='#FFFF00FF'"/>
 		</HorizontalLayout>

+ 1 - 1
bin/Win32/Debug/zhipuzi_pos_windows/skin/setting.xml

@@ -92,7 +92,7 @@
 					<Control height="300" />
 					<Label text="智铺子收银软件" align="center">
 					</Label>
-					<Label text="版本号:V1.0" align="center">
+					<Label name="setting_version" text="版本号:V1.0" align="center">
 					</Label>
 					<HorizontalLayout align="center">
 						<Control />

+ 24 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/waimai_order_fail_reason_dlg.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="600,300" caption="0,0,0,36" roundcorner="4,4" >
+	<VerticalLayout bkimage="file='Dialog_BG1.png' corner='4,50,4,4'">
+		<HorizontalLayout height="40" inset="10,2,10,0">
+			<Label name="waimai_order_fail_dlg_title" text="填写订单失败原因" width="100" />
+			<Control />
+			<Button name="waimai_order_fail_dlg_closebtn" padding="0,4,0,0" width="22" height="22" tooltip="关闭" normalimage="file='Login_TopBar_Close_Btn.png'" hotimage="file='Login_TopBar_Close_Btn_Hover.png'" pushedimage="file='Login_TopBar_Close_Btn_Click.png'"/>
+		</HorizontalLayout>
+		<VerticalLayout inset="15,0,15,15" vscrollbar="true" >
+			<Control height="20" />
+
+			<HorizontalLayout height="56">
+				<Label text="订单商标原因" width="160"/>
+				<Edit name="waimai_order_fail_dlg_reason" width="400" height="32" padding="0,12,0,12" normalimage="file='Chat_InputBox_BG.png' corner='4,4,4,4'" hotimage="file='Chat_InputBox_BG_Hover.png' corner='4,4,4,4'" />
+			</HorizontalLayout>
+		</VerticalLayout>
+		
+		<HorizontalLayout height="56" valign="center" padding="0,30,0,20">
+			<Control />
+			<Button name="waimai_order_fail_dlg_save" align="center" width="280" height="44" text="保存" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+			<Control />
+		</HorizontalLayout>
+	</VerticalLayout>
+</Window>

BIN
bin/Win32/Debug/zhipuzi_pos_windows/zhipuzi_pos_windows.exe


BIN
bin/Win32/Debug/zhipuzi_pos_windows_server/icon.ico


BIN
bin/Win32/Debug/zhipuzi_pos_windows_server/zhipuzi_pos_windows_server.exe


+ 35 - 0
zhipuzi_pos_windows/helper/CSystem.h

@@ -13,6 +13,17 @@ public:
     //程序休眠X秒
     static void my_sleep(int second);
 
+	static std::wstring getExePath()
+	{
+		wchar_t exeFullPath[MAX_PATH]; // Full path
+		std::wstring strPath = L"";
+
+		GetModuleFileName(NULL, exeFullPath, MAX_PATH);
+		strPath = (wstring)exeFullPath;    // Get full path of the file
+
+		return strPath;
+	}
+
     static std::wstring GetProgramDir()
     {
         wchar_t exeFullPath[MAX_PATH]; // Full path
@@ -88,5 +99,29 @@ public:
         DWORD dwAttrib = GetFileAttributes(csPath.c_str());
         return INVALID_FILE_ATTRIBUTES != dwAttrib;
     }
+
+    static std::string GetVersion()
+    {
+        std::string r = "";
+
+        UINT sz = GetFileVersionInfoSize(getExePath().c_str(), 0);
+        if(sz != 0)
+        {
+            r.resize(sz, 0);
+            char* pBuf = NULL;
+            pBuf = new char[sz];
+            VS_FIXEDFILEINFO* pVsInfo;
+            if(GetFileVersionInfo(getExePath().c_str(), 0, sz, pBuf))
+            {
+                if(VerQueryValue(pBuf, L"\\", (void**)&pVsInfo, &sz))
+                {
+                    sprintf(pBuf, "%d.%d.%d.%d", HIWORD(pVsInfo->dwFileVersionMS), LOWORD(pVsInfo->dwFileVersionMS), HIWORD(pVsInfo->dwFileVersionLS), LOWORD(pVsInfo->dwFileVersionLS));
+                    r = pBuf;
+                }
+            }
+            delete pBuf;
+        }
+        return r;
+    }
 };
 

+ 1 - 0
zhipuzi_pos_windows/pch/pch.h

@@ -45,6 +45,7 @@ using namespace std;
  **/
 #ifdef _WIN32
 #include <windows.h>
+#include<io.h>
 #else
 #include <unistd.h>
 #include <sys/sysinfo.h>

BIN
zhipuzi_pos_windows/resource/zhipuzi_pos_windows.aps


BIN
zhipuzi_pos_windows/resource/zhipuzi_pos_windows.rc


+ 1 - 1
zhipuzi_pos_windows/wnd/CChufangSettingWnd.h

@@ -18,7 +18,7 @@ public:
 
     LPCTSTR GetWindowClassName() const
     {
-        return _T("UILoginFrame");
+        return _T("UIChufangSettingFrame");
     };
 
     UINT GetClassStyle() const

+ 3 - 0
zhipuzi_pos_windows/wnd/CLoginWnd.cpp

@@ -3,6 +3,9 @@
 
 void CLoginWnd::Init()
 {
+	CLabelUI* version = static_cast<CLabelUI*>(m_pm.FindControl(_T("login_version")));
+	version->SetText(CLewaimaiString::UTF8ToUnicode(CSystem::GetVersion()).c_str());
+
 	std::map<string, string> users = CSetting::getUsers();
 
 	CComboUI* pCom = static_cast<CComboUI*>(m_pm.FindControl(_T("accountcombo")));

+ 51 - 21
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -8,6 +8,7 @@
 #include "../control/CWaimaiOrderInfoUI.h"
 
 #include "../network/CMessagePush.h"
+#include "CWaimaiOrderFailReasonWnd.h"
 
 void CMainWnd::Init()
 {
@@ -174,16 +175,29 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
         CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
         std::string waimai_order_id = item->getOrderID();
 
-        CWaimaiOrder order;
-        bool ret = order.FailOrder(waimai_order_id, CLewaimaiString::UnicodeToUTF8(L"windows收银机设置"));
+		CWaimaiOrderFailReasonWnd* pWaimaiFailFrame = new CWaimaiOrderFailReasonWnd();
+		pWaimaiFailFrame->Create(this->GetHWND(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pWaimaiFailFrame->SetIcon(IDI_ICON_DUILIB);
+		pWaimaiFailFrame->CenterWindow();
+		UINT ret = pWaimaiFailFrame->ShowModal();
 
-        if(ret)
-        {
-            //如果设为失败成功,将被设为失败的订单删除掉
-            OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
-            int index = orderlist->GetItemIndex(item);
-            orderlist->RemoveAt(index);
-        }
+		if (ret == IDOK)
+		{
+			std::string sReason = pWaimaiFailFrame->getReason();
+
+			CWaimaiOrder order;
+			bool ret = order.FailOrder(waimai_order_id, sReason);
+
+			if (ret)
+			{
+				//如果设为失败成功,将被设为失败的订单删除掉
+				OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
+				int index = orderlist->GetItemIndex(item);
+				orderlist->RemoveAt(index);
+			}
+		}
+
+		delete pWaimaiFailFrame;
     }
 
     else if(name == _T("waimai_order_list_agree"))
@@ -338,20 +352,33 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
         std::string waimai_order_id = order_info_page->m_order.m_order_id;
         std::string waimai_order_no = order_info_page->m_order.m_order_no;
 
-        CWaimaiOrder order;
-        bool ret = order.FailOrder(waimai_order_id, "Windwos收银机测试");
+		CWaimaiOrderFailReasonWnd* pWaimaiFailFrame = new CWaimaiOrderFailReasonWnd();
+		pWaimaiFailFrame->Create(this->GetHWND(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pWaimaiFailFrame->SetIcon(IDI_ICON_DUILIB);
+		pWaimaiFailFrame->CenterWindow();
+		UINT ret = pWaimaiFailFrame->ShowModal();
 
-        if(ret)
-        {
-            //订单设为失败,这里怎么处理
-            //请求服务器,获取订单数据
-            CWaimaiOrder new_order;
-            new_order.InitData(waimai_order_id, waimai_order_no);
+		if (ret == IDOK)
+		{
+			std::string sReason = pWaimaiFailFrame->getReason();
+
+			CWaimaiOrder order;
+			bool ret = order.FailOrder(waimai_order_id, sReason);
+
+			if (ret)
+			{
+				//订单设为失败,这里怎么处理
+				//请求服务器,获取订单数据
+				CWaimaiOrder new_order;
+				new_order.InitData(waimai_order_id, waimai_order_no);
+
+				//刷新订单详情页数据
+				order_info_page->SetDate(new_order);
+				order_info_page->Refresh(new_order);
+			}
+		}
 
-            //刷新订单详情页数据
-            order_info_page->SetDate(new_order);
-            order_info_page->Refresh(new_order);
-        }
+		delete pWaimaiFailFrame;
     }
 
     else if(name == _T("waimai_order_info_page_agree"))
@@ -1209,6 +1236,9 @@ LRESULT CMainWnd::OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHan
 
 void CMainWnd::InitSettingStatus()
 {
+	CLabelUI* version = static_cast<CLabelUI*>(m_pm.FindControl(_T("setting_version")));
+	version->SetText((L"版本号:" + CLewaimaiString::UTF8ToUnicode(CSystem::GetVersion())).c_str());
+
     CCheckBoxUI* box = NULL;
     CComboUI* com = NULL;
 

+ 103 - 0
zhipuzi_pos_windows/wnd/CWaimaiOrderFailReasonWnd.cpp

@@ -0,0 +1,103 @@
+#include "../pch/pch.h"
+#include "CWaimaiOrderFailReasonWnd.h"
+
+LRESULT CWaimaiOrderFailReasonWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	POINT pt;
+	pt.x = GET_X_LPARAM(lParam);
+	pt.y = GET_Y_LPARAM(lParam);
+	::ScreenToClient(*this, &pt);
+
+	RECT rcClient;
+	::GetClientRect(*this, &rcClient);
+
+	RECT rcCaption = m_pm.GetCaptionRect();
+	if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
+		&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
+	{
+		CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
+		if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
+		{
+			return HTCAPTION;
+		}
+	}
+
+	return HTCLIENT;
+}
+
+LRESULT CWaimaiOrderFailReasonWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	SIZE szRoundCorner = m_pm.GetRoundCorner();
+	if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
+	{
+		CDuiRect rcWnd;
+		::GetWindowRect(*this, &rcWnd);
+		rcWnd.Offset(-rcWnd.left, -rcWnd.top);
+		rcWnd.right++;
+		rcWnd.bottom++;
+		HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
+		::SetWindowRgn(*this, hRgn, TRUE);
+		::DeleteObject(hRgn);
+	}
+
+	bHandled = FALSE;
+	return 0;
+}
+
+LRESULT CWaimaiOrderFailReasonWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lRes = 0;
+	BOOL bHandled = TRUE;
+	switch (uMsg)
+	{
+	case WM_CREATE:
+		lRes = OnCreate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCACTIVATE:
+		lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCCALCSIZE:
+		lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCPAINT:
+		lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCHITTEST:
+		lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_SIZE:
+		lRes = OnSize(uMsg, wParam, lParam, bHandled);
+		break;
+	default:
+		bHandled = FALSE;
+	}
+	if (bHandled)
+	{
+		return lRes;
+	}
+	if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
+	{
+		return lRes;
+	}
+	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
+}
+
+LRESULT CWaimaiOrderFailReasonWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
+{
+	if (uMsg == WM_KEYDOWN)
+	{
+		if (wParam == VK_RETURN)
+		{
+			return true;
+		}
+		else if (wParam == VK_ESCAPE)
+		{
+			return true;
+		}
+	}
+	return false;
+}
+
+
+
+

+ 121 - 0
zhipuzi_pos_windows/wnd/CWaimaiOrderFailReasonWnd.h

@@ -0,0 +1,121 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CMainWnd.h"
+
+class CWaimaiOrderFailReasonWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIWaimaiOrderFailFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+		
+		//delete this;
+	};
+
+	void Init()
+	{
+		
+	}
+
+	std::string getReason()
+	{
+		return m_reason;
+	}
+
+	void Notify(TNotifyUI& msg)
+	{
+		if (msg.sType == _T("click"))
+		{
+			DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+			if (senderName == _T("waimai_order_fail_dlg_closebtn"))
+			{
+				Close(IDCANCEL);
+				return;
+			}
+			else if (senderName == _T("waimai_order_fail_dlg_save"))
+			{
+				//开始保存厨房打印机的数据
+				CEditUI* pReason = static_cast<CEditUI*>(m_pm.FindControl(_T("waimai_order_fail_dlg_reason")));
+				wstring wsReason = pReason->GetText();
+
+				m_reason = CLewaimaiString::UnicodeToUTF8(wsReason);
+
+				Close(IDOK);
+				return;
+			}
+		}
+	}
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+		styleValue &= ~WS_CAPTION;
+		::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+		// 把自己的窗口句柄与窗口绘制管理器挂接在一起
+		m_pm.Init(m_hWnd);
+
+		m_pm.AddPreMessageFilter(this);
+
+		CDialogBuilder builder;
+
+		CControlUI* pRoot = builder.Create(_T("waimai_order_fail_reason_dlg.xml"), (UINT)0, NULL, &m_pm);
+		ASSERT(pRoot && "Failed to parse XML");
+
+		// 把这些控件绘制到本窗口上
+		m_pm.AttachDialog(pRoot);
+
+		// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
+		m_pm.AddNotifier(this);
+
+		Init();
+
+		return 0;
+	}
+
+	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		if (::IsIconic(*this))
+		{
+			bHandled = FALSE;
+		}
+		return (wParam == 0) ? TRUE : FALSE;
+	}
+
+	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
+
+public:
+	CPaintManagerUI m_pm;
+
+	std::string m_reason;
+};
+

+ 5 - 2
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj

@@ -134,7 +134,7 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalLibraryDirectories>$(SolutionDir)lib\debug</AdditionalLibraryDirectories>
-      <AdditionalDependencies>dbghelp.lib;winmm.lib;setupapi.lib;AdvAPI32.lib;Shell32.lib;user32.lib;kernel32.lib;Gdi32.lib;libboost_date_time-vc141-mt-sgd-x32-1_70.lib;libboost_regex-vc141-mt-sgd-x32-1_70.lib;sqlite3.lib;libcurl.lib;DuiLib_ud.lib;log4cplusUD.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>dbghelp.lib;winmm.lib;setupapi.lib;AdvAPI32.lib;Shell32.lib;user32.lib;kernel32.lib;Gdi32.lib;libboost_date_time-vc141-mt-sgd-x32-1_70.lib;libboost_regex-vc141-mt-sgd-x32-1_70.lib;sqlite3.lib;libcurl.lib;DuiLib_ud.lib;log4cplusUD.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <IgnoreSpecificDefaultLibraries>
       </IgnoreSpecificDefaultLibraries>
       <Version>
@@ -189,7 +189,8 @@ copy $(SolutionDir)res\icon\ $(SolutionDir)bin\$(Platform)\$(Configuration)\$(Pr
       <OptimizeReferences>true</OptimizeReferences>
       <GenerateDebugInformation>false</GenerateDebugInformation>
       <AdditionalLibraryDirectories>$(SolutionDir)lib\release\grpc;$(SolutionDir)lib;$(SolutionDir)lib\release</AdditionalLibraryDirectories>
-      <AdditionalDependencies>log4cplus.lib;aliyun-mns.lib;libcurl.lib;libeay32.lib;ssleay32.lib;mysqlcppconn.lib;libprotobuf.lib;grpc.lib;grpc++.lib;cares.lib;gpr.lib;zlib.lib;address_sorting.lib;ssl.lib;crypto.lib</AdditionalDependencies>
+      <AdditionalDependencies>
+      </AdditionalDependencies>
       <AdditionalOptions>/ignore:4099 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     <PostBuildEvent>
@@ -201,6 +202,7 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="wnd\CWaimaiOrderFailReasonWnd.h" />
     <ClInclude Include="network\PosMessage.h" />
     <ClInclude Include="wnd\CChufangSettingWnd.h" />
     <ClInclude Include="control\CWaimaiOrderInfoUI.h" />
@@ -228,6 +230,7 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="control\OrderListUI.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="wnd\CWaimaiOrderFailReasonWnd.cpp" />
     <ClCompile Include="wnd\CChufangSettingWnd.cpp" />
     <ClCompile Include="control\CWaimaiOrderInfoUI.cpp" />
     <ClCompile Include="control\CSettingUI.cpp" />

+ 6 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -90,6 +90,9 @@
     <ClInclude Include="network\PosMessage.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="wnd\CWaimaiOrderFailReasonWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -158,6 +161,9 @@
     <ClCompile Include="wnd\CChufangSettingWnd.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="wnd\CWaimaiOrderFailReasonWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">