Sfoglia il codice sorgente

还剩4个扫码的优惠

张洋 4 anni fa
parent
commit
3d8574cee6
30 ha cambiato i file con 1806 aggiunte e 16 eliminazioni
  1. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-18-12-54-47.dmp
  2. 6 5
      bin/Win32/Debug/zhipuzi_pos_windows/skin/diandan_page.xml
  3. 8 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/diandan_zhangdanmingxi_item.xml
  4. 22 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/jiajia_input_dlg.xml
  5. 22 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/member_login_dlg.xml
  6. 22 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/rengongyouhui_input_dlg.xml
  7. 22 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/zhekou_input_dlg.xml
  8. 4 0
      zhipuzi_pos_windows/helper/define.h
  9. 3 0
      zhipuzi_pos_windows/page/CBasePageUI.h
  10. 429 6
      zhipuzi_pos_windows/page/CDiandanPageUI.cpp
  11. 19 2
      zhipuzi_pos_windows/page/CDiandanPageUI.h
  12. 6 0
      zhipuzi_pos_windows/page/CSettingPageUI.cpp
  13. 3 0
      zhipuzi_pos_windows/page/CSettingPageUI.h
  14. 6 0
      zhipuzi_pos_windows/page/CWaimaiOrderInfoPageUI.cpp
  15. 3 0
      zhipuzi_pos_windows/page/CWaimaiOrderInfoPageUI.h
  16. 6 0
      zhipuzi_pos_windows/page/CWaimaiOrderListPageUI.cpp
  17. 3 0
      zhipuzi_pos_windows/page/CWaimaiOrderListPageUI.h
  18. 3 3
      zhipuzi_pos_windows/tool/CSqlite3.cpp
  19. 200 0
      zhipuzi_pos_windows/wnd/CJiajiaWnd.cpp
  20. 69 0
      zhipuzi_pos_windows/wnd/CJiajiaWnd.h
  21. 10 0
      zhipuzi_pos_windows/wnd/CMainWnd.cpp
  22. 1 0
      zhipuzi_pos_windows/wnd/CMainWnd.h
  23. 292 0
      zhipuzi_pos_windows/wnd/CMemberLoginWnd.cpp
  24. 77 0
      zhipuzi_pos_windows/wnd/CMemberLoginWnd.h
  25. 200 0
      zhipuzi_pos_windows/wnd/CRengongYouhuiWnd.cpp
  26. 69 0
      zhipuzi_pos_windows/wnd/CRengongYouhuiWnd.h
  27. 200 0
      zhipuzi_pos_windows/wnd/CZhekouWnd.cpp
  28. 69 0
      zhipuzi_pos_windows/wnd/CZhekouWnd.h
  29. 8 0
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj
  30. 24 0
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-18-12-54-47.dmp


+ 6 - 5
bin/Win32/Debug/zhipuzi_pos_windows/skin/diandan_page.xml

@@ -15,7 +15,8 @@
 					<VerticalLayout width="430" padding="0,0,0,0">
 						<HorizontalLayout name="btn_diandan_qingkong" height="60">
 							<Control bkimage="member_login.png" width="32" height="32" padding="10,14,0,0"></Control>
-							<Label text="会员登录" width="120" padding="8,0,10,0" font="1"></Label>
+							<Button name="btn_diandan_member_login" text="会员登录" heiht="20" width="100" padding="0,4,10,0" font="1" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+							<Label name="diandan_page_member_info" text="" heiht="30" padding="10,10,10,10" visible="false"></Label>
 							<Control></Control>
 							<Control bkimage="order_delete.png" width="20" height="20" padding="0,22,0,0"></Control>
 							<Button name="btn_diandan_qingkong" text="清空" heiht="20" width="40" padding="5,4,10,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
@@ -112,19 +113,19 @@
 					
 					<HorizontalLayout padding="0,15,0,0" height="48">
 						<Label text="整单折扣:" width="120" height="48" padding="20,0,0,0"></Label>
-						<Edit name="diandan_jiesuan_zhekou_value" readonly="true" tooltip="请输入折扣值" width="250" height="48" normalimage="file='Chat_InputBox_BG.png' corner='4,4,4,4'" hotimage="file='Chat_InputBox_BG_Hover.png' corner='4,4,4,4'" />
+						<Button name="diandan_jiesuan_zhekou_value" text="" heiht="48" width="250" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFA9A9A9" bkcolor="#00FFFFFF"></Button>
 						<Label text="%" width="100" height="48" padding="20,0,0,0"></Label>
 					</HorizontalLayout>
 					
 					<HorizontalLayout padding="0,15,0,0" height="48">
 						<Label text="加价:" width="120" height="48" padding="20,0,0,0"></Label>
-						<Edit name="diandan_jiesuan_jiajia_value" tooltip="请输入加价金额" width="250" height="48" normalimage="file='Chat_InputBox_BG.png' corner='4,4,4,4'" hotimage="file='Chat_InputBox_BG_Hover.png' corner='4,4,4,4'" />
+						<Button name="diandan_jiesuan_jiajia_value" text="" heiht="48" width="250" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFA9A9A9" bkcolor="#00FFFFFF"></Button>
 						<Label text="元" width="100" height="48" padding="20,0,0,0"></Label>
 					</HorizontalLayout>
 					
 					<HorizontalLayout padding="0,15,0,0" height="48">
 						<Label text="优惠:" width="120" height="48" padding="20,0,0,0"></Label>
-						<Edit name="diandan_jiesuan_youhui_value" tooltip="请输入优惠金额" width="250" height="48" normalimage="file='Chat_InputBox_BG.png' corner='4,4,4,4'" hotimage="file='Chat_InputBox_BG_Hover.png' corner='4,4,4,4'" />
+						<Button name="diandan_jiesuan_youhui_value" text="" heiht="48" width="250" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFA9A9A9" bkcolor="#00FFFFFF"></Button>
 						<Label text="元" width="100" height="48" padding="20,0,0,0"></Label>
 					</HorizontalLayout>
 					
@@ -188,7 +189,7 @@
 					
 					<HorizontalLayout height="50">
 						<Control></Control>
-						<Label name="" text="应收金额:" height="50" align="right" padding="0,0,15,0"/>
+						<Label name="diandan_jiesuan_total_yingshou" text="" height="50" align="right" padding="0,0,15,0"/>
 					</HorizontalLayout>
 					
 					<Label text="支付方式" width="100" height="78" padding="20,30,0,0" font="1"></Label>

+ 8 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/diandan_zhangdanmingxi_item.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<HorizontalLayout padding="0,10,0,0">
+		<Label name="name" text=""  height="30" width="150" align="left"/>
+		<Control></Control>
+		<Label name="value" text=""  height="30" width="150" align="right"/>
+	</HorizontalLayout>
+</Window>

+ 22 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/jiajia_input_dlg.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="700,369" caption="0,0,0,36" roundcorner="4,4" >
+	<Font id="0" name="微软雅黑" size="26" />
+	<Font id="1" name="微软雅黑" size="32" />
+	
+	<VerticalLayout bkcolor="#FFFFFFFF">
+		<HorizontalLayout height="50" inset="10,2,10,0">
+			<Label name="memo_dlg_title" text="" align="center" valign="center" padding="0,20,0,0" font="0"/>
+		</HorizontalLayout>
+		
+		<Label name="name" text="请输入加价金额(0到100之间的整数)"  height="30" width="300" padding="30,50,0,0" align="left"/>
+	
+		<Edit name="content" width="250" height="50" tipvalue="1111" padding="30,20,0,0" textcolor="0xFF3CB371" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" font="1"/>
+		
+		<Label name="errinfo" text=""  height="60" width="250" float="true" pos="30,230,280,290" align="left" textcolor="#FFFF0000" visible="false"/>
+		
+		<HorizontalLayout height="56" valign="center" padding="30,80,0,20">
+			<Button name="quit" align="center" width="100" height="45" padding="0,20,0,0" 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'" />
+			<Button name="save" align="center" width="100" height="45" padding="20,20,90,0" 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'" />
+		</HorizontalLayout>
+	</VerticalLayout>
+</Window>

+ 22 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/member_login_dlg.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="700,369" caption="0,0,0,36" roundcorner="4,4" >
+	<Font id="0" name="微软雅黑" size="26" />
+	<Font id="1" name="微软雅黑" size="32" />
+	
+	<VerticalLayout bkcolor="#FFFFFFFF">
+		<HorizontalLayout height="50" inset="10,2,10,0">
+			<Label name="memo_dlg_title" text="" align="center" valign="center" padding="0,20,0,0" font="0"/>
+		</HorizontalLayout>
+		
+		<Label name="name" text="请输入会员手机号"  height="30" width="150" padding="30,50,0,0" align="left"/>
+	
+		<Edit name="content" width="250" height="50" tipvalue="1111" padding="30,20,0,0" textcolor="0xFF3CB371" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" font="1"/>
+		
+		<Label name="errinfo" text="哈哈哈哈"  height="60" width="250" float="true" pos="30,230,280,290" align="left" textcolor="#FFFF0000" visible="false"/>
+		
+		<HorizontalLayout height="56" valign="center" padding="30,80,0,20">
+			<Button name="quit" align="center" width="100" height="45" padding="0,20,0,0" 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'" />
+			<Button name="save" align="center" width="100" height="45" padding="20,20,90,0" 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'" />
+		</HorizontalLayout>
+	</VerticalLayout>
+</Window>

+ 22 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/rengongyouhui_input_dlg.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="700,369" caption="0,0,0,36" roundcorner="4,4" >
+	<Font id="0" name="微软雅黑" size="26" />
+	<Font id="1" name="微软雅黑" size="32" />
+	
+	<VerticalLayout bkcolor="#FFFFFFFF">
+		<HorizontalLayout height="50" inset="10,2,10,0">
+			<Label name="memo_dlg_title" text="" align="center" valign="center" padding="0,20,0,0" font="0"/>
+		</HorizontalLayout>
+		
+		<Label name="name" text="请输入优惠金额(0到100之间的整数)"  height="30" width="300" padding="30,50,0,0" align="left"/>
+	
+		<Edit name="content" width="250" height="50" tipvalue="1111" padding="30,20,0,0" textcolor="0xFF3CB371" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" font="1"/>
+		
+		<Label name="errinfo" text=""  height="60" width="250" float="true" pos="30,230,280,290" align="left" textcolor="#FFFF0000" visible="false"/>
+		
+		<HorizontalLayout height="56" valign="center" padding="30,80,0,20">
+			<Button name="quit" align="center" width="100" height="45" padding="0,20,0,0" 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'" />
+			<Button name="save" align="center" width="100" height="45" padding="20,20,90,0" 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'" />
+		</HorizontalLayout>
+	</VerticalLayout>
+</Window>

+ 22 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/zhekou_input_dlg.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="700,369" caption="0,0,0,36" roundcorner="4,4" >
+	<Font id="0" name="微软雅黑" size="26" />
+	<Font id="1" name="微软雅黑" size="32" />
+	
+	<VerticalLayout bkcolor="#FFFFFFFF">
+		<HorizontalLayout height="50" inset="10,2,10,0">
+			<Label name="memo_dlg_title" text="" align="center" valign="center" padding="0,20,0,0" font="0"/>
+		</HorizontalLayout>
+		
+		<Label name="name" text="请输入折扣值(1到100之间的整数)"  height="30" width="250" padding="30,50,0,0" align="left"/>
+	
+		<Edit name="content" width="250" height="50" tipvalue="1111" padding="30,20,0,0" textcolor="0xFF3CB371" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" font="1"/>
+		
+		<Label name="errinfo" text=""  height="60" width="250" float="true" pos="30,230,280,290" align="left" textcolor="#FFFF0000" visible="false"/>
+		
+		<HorizontalLayout height="56" valign="center" padding="30,80,0,20">
+			<Button name="quit" align="center" width="100" height="45" padding="0,20,0,0" 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'" />
+			<Button name="save" align="center" width="100" height="45" padding="20,20,90,0" 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'" />
+		</HorizontalLayout>
+	</VerticalLayout>
+</Window>

+ 4 - 0
zhipuzi_pos_windows/helper/define.h

@@ -14,4 +14,8 @@
 #define WM_LOGIN_AGAIN_OUT 10009
 #define WM_LOGIN_START_INIT_DATA 10010
 
+//会员相关消息
+#define WM_MEMBER_CHECK_FAIL 10011
+#define WM_MEMBER_CHECK_SUCCESS 10012
+
 

+ 3 - 0
zhipuzi_pos_windows/page/CBasePageUI.h

@@ -26,6 +26,9 @@ public:
 	//处理下拉框、radio的切换事件
 	virtual void HandleItemSelectMsg(TNotifyUI& msg) = 0;
 
+	//处理编辑框输入内容改变事件
+	virtual void HandleTextChangedMsg(TNotifyUI& msg) = 0;
+
 	void SetMainWnd(CMainWnd* wnd)
 	{
 		m_pMainWnd = wnd;

+ 429 - 6
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -8,6 +8,10 @@
 #include "../wnd/CDiandanNatureWnd.h"
 #include "../wnd/CMemoWnd.h"
 #include "../wnd/CYouhuiShowWnd.h"
+#include "../wnd/CMemberLoginWnd.h"
+#include "../wnd/CZhekouWnd.h"
+#include "../wnd/CRengongYouhuiWnd.h"
+#include "../wnd/CJiajiaWnd.h"
 
 CDiandanPageUI::CDiandanPageUI()
 {
@@ -64,8 +68,6 @@ void CDiandanPageUI::InitJiesuanInfo()
 	CShopinfo shopinfo = CShopinfo::m_shopinfo;
 
 	//先初始化折扣值
-	m_discount = 100;
-
 	CEditUI* pZhekouEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_zhekou_value")));
 	pZhekouEdit->SetText(L"100");
 
@@ -353,13 +355,34 @@ void CDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
 		//点击打包
 		this->ClickDabao();
 	}
+	else if (name == L"btn_diandan_member_login")
+	{
+		//点击会员登录
+		this->ClickMemberLogin();
+	}
+	else if (name == L"diandan_jiesuan_zhekou_value")
+	{
+		//点击整单折扣
+		this->ClickZhekou();
+	}
+	else if (name == L"diandan_jiesuan_jiajia_value")
+	{
+		//点击加价
+		this->ClickJiajia();
+	}
+	else if (name == L"diandan_jiesuan_youhui_value")
+	{
+		//点击人工优惠
+		this->ClickRengongyouhui();
+	}
 }
 
 //处理option切换事件
 void CDiandanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
 {
-	COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
+	CDuiString name = msg.pSender->GetName();
 
+	COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
 	std::wstring groupname = curOption->GetGroup();
 
 	if (groupname == L"diandan_foodtype")
@@ -371,6 +394,29 @@ void CDiandanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
 		m_cur_type_id = id;
 
 		this->RefreshFoodlist();
+
+		return;
+	}
+	else if (groupname == L"diandan_jiesuan_moling")
+	{
+		if (name == _T("diandan_jiesuan_moling_bumoling"))
+		{
+			m_moling_type = 0;
+
+			UpdateJiesuanInfo();
+		}
+		else if (name == _T("diandan_jiesuan_moling_molingdaojiao"))
+		{
+			m_moling_type = 1;
+
+			UpdateJiesuanInfo();
+		}
+		else if (name == _T("diandan_jiesuan_moling_molingdaoyuan"))
+		{
+			m_moling_type = 2;
+
+			UpdateJiesuanInfo();
+		}
 	}
 }
 
@@ -380,6 +426,14 @@ void CDiandanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
 
 }
 
+//处理编辑框输入内容改变事件
+void CDiandanPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+
+}
+
 void CDiandanPageUI::InitFoodtypeShow()
 {	
 	//先判断有没有套餐分类
@@ -658,9 +712,6 @@ void CDiandanPageUI::UpdateJiesuanInfo()
 	//判断会员商品优惠
 	
 	//先按假数据
-	m_is_member = true;
-	m_member_level = 1;
-
 	m_total_member_youhui = 0;
 	
 	if (m_is_member)
@@ -876,6 +927,11 @@ void CDiandanPageUI::UpdateJiesuanInfo()
 		cur_price = new_price;
 	}
 
+	if (cur_price < 0)
+	{
+		cur_price = 0;
+	}
+
 	//至此优惠全部处理完了,开始刷新各个地方的展示
 
 	//先刷新优惠展示
@@ -911,7 +967,226 @@ void CDiandanPageUI::UpdateJiesuanInfo()
 	pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(cur_price, 2))).c_str());
 
 	//再刷新账单明细展示
+	CVerticalLayoutUI* pmingxiLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhangdanmingxi_jiage_layout")));
+	pmingxiLayout->RemoveAll();
+
+	int item_num = 0;
+
+	//先显示基础价格
+	if (true)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"商品原价:");
+		pValue->SetText((CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(jichu_price, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	//开始展示各种优惠
+	if (m_shangpinquan_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"商品券优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_shangpinquan_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_cika_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"次卡优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_cika_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_total_member_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"商品会员价优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_total_member_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_zhekou_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"整单折扣优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_zhekou_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_member_zhekou_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"会员整单折扣优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_member_zhekou_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_quanyika_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"权益卡优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_quanyika_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_manjian_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"满减优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_manjian_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_youhuiquan_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"优惠券优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_youhuiquan_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_rengong_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"人工优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_rengong_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_moling_youhui > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"抹零优惠:");
+		pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_moling_youhui, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	//然后处理加价的各种
+	if (m_dabao > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
 
+		pName->SetText(L"打包费:");
+		pValue->SetText((L"+" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_dabao, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	if (m_jiajia > 0)
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
+		pmingxiLayout->Add(pItem);
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
+		CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
+
+		pName->SetText(L"人工加价:");
+		pValue->SetText((L"+" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_jiajia, 2)) + L"元").c_str());
+
+		item_num++;
+	}
+
+	pmingxiLayout->SetFixedHeight(item_num * 40);
+
+	CLabelUI* pYingshou = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_total_yingshou")));
+	pYingshou->SetText((L"应收金额:" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(cur_price, 2)) + L"元").c_str());
 }
 
 void CDiandanPageUI::ClickFoodAction()
@@ -1346,4 +1621,152 @@ void CDiandanPageUI::ClickChakanYouhui()
 			return;
 		}
 	}
+}
+
+void CDiandanPageUI::ClickMemberLogin()
+{
+	CMemberLoginWnd* pMemberLoginDlg = new CMemberLoginWnd();
+
+	if (pMemberLoginDlg != NULL)
+	{
+		pMemberLoginDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pMemberLoginDlg->SetIcon(IDI_ICON_DUILIB);
+		pMemberLoginDlg->CenterWindow();
+
+		pMemberLoginDlg->SetTitle(L"会员登录");
+
+		UINT ret = pMemberLoginDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//这说明会员登录成功了
+			m_is_member = true;
+			m_member_name = pMemberLoginDlg->m_member_name;
+			m_member_level = pMemberLoginDlg->m_member_level;
+			m_member_level_name = pMemberLoginDlg->m_member_level_name;
+
+			CButtonUI* pMemberLoginBtn = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_member_login")));
+			pMemberLoginBtn->SetVisible(false);
+
+			CLabelUI* pMemberInfo = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_member_info")));
+			std::wstring memberInfo = L"会员:" + CLewaimaiString::UTF8ToUnicode(m_member_name) + L"【" + CLewaimaiString::UTF8ToUnicode(m_member_level_name) + L"】";
+			pMemberInfo->SetText(memberInfo.c_str());
+			pMemberInfo->SetVisible(true);
+
+			this->UpdateJiesuanInfo();
+
+			delete pMemberLoginDlg;
+		}
+		else
+		{
+			delete pMemberLoginDlg;
+
+			return;
+		}
+	}
+}
+
+void CDiandanPageUI::ClickZhekou()
+{
+	CZhekouWnd* pZhekouDlg = new CZhekouWnd();
+
+	if (pZhekouDlg != NULL)
+	{
+		pZhekouDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pZhekouDlg->SetIcon(IDI_ICON_DUILIB);
+		pZhekouDlg->CenterWindow();
+
+		pZhekouDlg->SetTitle(L"输入折扣值");
+
+		UINT ret = pZhekouDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//这说明折扣输入了
+			std::string zhekou = pZhekouDlg->getContent();
+
+			CButtonUI* pZhekouEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_jiesuan_zhekou_value")));
+			pZhekouEdit->SetText(CLewaimaiString::UTF8ToUnicode(zhekou).c_str());
+
+			this->UpdateJiesuanInfo();
+
+			delete pZhekouDlg;
+		}
+		else
+		{
+			delete pZhekouDlg;
+
+			return;
+		}
+	}
+}
+
+void CDiandanPageUI::ClickJiajia()
+{
+	CjiajiaWnd* pJiajiaDlg = new CjiajiaWnd();
+
+	if (pJiajiaDlg != NULL)
+	{
+		pJiajiaDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pJiajiaDlg->SetIcon(IDI_ICON_DUILIB);
+		pJiajiaDlg->CenterWindow();
+
+		pJiajiaDlg->SetTitle(L"输入加价金额");
+
+		UINT ret = pJiajiaDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//这说明折扣输入了
+			std::string jiajia = pJiajiaDlg->getContent();
+
+			CButtonUI* pJiajiaEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_jiesuan_jiajia_value")));
+			pJiajiaEdit->SetText(CLewaimaiString::UTF8ToUnicode(jiajia).c_str());
+
+			this->UpdateJiesuanInfo();
+
+			delete pJiajiaDlg;
+		}
+		else
+		{
+			delete pJiajiaDlg;
+
+			return;
+		}
+	}
+}
+
+void CDiandanPageUI::ClickRengongyouhui()
+{
+	CRengongYouhuiWnd* pYouhuiDlg = new CRengongYouhuiWnd();
+
+	if (pYouhuiDlg != NULL)
+	{
+		pYouhuiDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pYouhuiDlg->SetIcon(IDI_ICON_DUILIB);
+		pYouhuiDlg->CenterWindow();
+
+		pYouhuiDlg->SetTitle(L"输入优惠金额");
+
+		UINT ret = pYouhuiDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//这说明折扣输入了
+			std::string youhui = pYouhuiDlg->getContent();
+
+			CButtonUI* pYouhuiEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_jiesuan_youhui_value")));
+			pYouhuiEdit->SetText(CLewaimaiString::UTF8ToUnicode(youhui).c_str());
+
+			this->UpdateJiesuanInfo();
+
+			delete pYouhuiDlg;
+		}
+		else
+		{
+			delete pYouhuiDlg;
+
+			return;
+		}
+	}
 }

+ 19 - 2
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -31,6 +31,9 @@ public:
 	//处理下拉框、radio的切换事件
 	void HandleItemSelectMsg(TNotifyUI& msg);
 
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
 	void InitFoodtypeShow();
 
 	//根据当前选择的分类,刷新商品展示
@@ -84,6 +87,18 @@ public:
 	//点击查看优惠
 	void ClickChakanYouhui();
 
+	//处理会员登录
+	void ClickMemberLogin();
+
+	//点击整单折扣
+	void ClickZhekou();
+
+	//点击加价
+	void ClickJiajia();
+
+	//点击优惠
+	void ClickRengongyouhui();
+
 private:
 	CTileLayoutUI* m_foodLayout;
 	CHorizontalLayoutUI* m_foodtypeLayout;
@@ -104,7 +119,6 @@ private:
 	CDiandanOrder m_cur_diandan_order;
 
 	//下面是结算相关信息
-	double m_discount;
 	double m_zhekou_youhui;
 
 	//人工加价
@@ -158,8 +172,11 @@ private:
 	int m_moling_type;
 	double m_moling_youhui;
 
-	bool m_is_member;
+	//会员相关
+	bool m_is_member = false;
+	std::string m_member_name;
 	std::string m_member_level;
+	std::string m_member_level_name;
 	std::string m_member_level_id;
 
 	double m_total_member_youhui; //会员商品优惠

+ 6 - 0
zhipuzi_pos_windows/page/CSettingPageUI.cpp

@@ -1279,3 +1279,9 @@ void CSettingPageUI::HandleItemSelectMsg(TNotifyUI& msg)
 		}
 	}
 }
+
+//处理编辑框输入内容改变事件
+void CSettingPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+
+}

+ 3 - 0
zhipuzi_pos_windows/page/CSettingPageUI.h

@@ -20,5 +20,8 @@ public:
 
 	//处理下拉框、radio的切换事件
 	void HandleItemSelectMsg(TNotifyUI& msg);
+
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
 };
 

+ 6 - 0
zhipuzi_pos_windows/page/CWaimaiOrderInfoPageUI.cpp

@@ -177,6 +177,12 @@ void CWaimaiOrderInfoPageUI::HandleItemSelectMsg(TNotifyUI& msg)
 
 }
 
+//处理编辑框输入内容改变事件
+void CWaimaiOrderInfoPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+
+}
+
 //刷新当前页面的内容,注意这个函数不会改变当前的订单状态以及“页数”
 void CWaimaiOrderInfoPageUI::SetDate(CWaimaiOrder& order)
 {

+ 3 - 0
zhipuzi_pos_windows/page/CWaimaiOrderInfoPageUI.h

@@ -24,6 +24,9 @@ public:
 	//处理下拉框、radio的切换事件
 	void HandleItemSelectMsg(TNotifyUI& msg);
 
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
 	//刷新当前页面的内容,注意这个函数不会改变当前的订单状态以及“页数”
 	void SetDate(CWaimaiOrder& order);
 

+ 6 - 0
zhipuzi_pos_windows/page/CWaimaiOrderListPageUI.cpp

@@ -208,6 +208,12 @@ void CWaimaiOrderListPageUI::HandleItemSelectMsg(TNotifyUI& msg)
 
 }
 
+//处理编辑框输入内容改变事件
+void CWaimaiOrderListPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+
+}
+
 void CWaimaiOrderListPageUI::Refresh()
 {
 	//开始转菊花

+ 3 - 0
zhipuzi_pos_windows/page/CWaimaiOrderListPageUI.h

@@ -29,6 +29,9 @@ public:
 	//处理下拉框、radio的切换事件
 	void HandleItemSelectMsg(TNotifyUI& msg);
 
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
 	//刷新当前页面的内容,注意这个函数不会改变当前的订单状态以及“页数”
 	void Refresh();
 

+ 3 - 3
zhipuzi_pos_windows/tool/CSqlite3.cpp

@@ -967,7 +967,7 @@ int CSqlite3::GetFoodpackageNum()
 {
 	int count = 0;
 
-	std::string sql = "SELECT count(*) as num FROM pos_foodpackage;";
+	std::string sql = "SELECT count(*) as num FROM pos_foodpackage WHERE status = 'NORMAL';";
 	sqlite3_stmt * stmt = NULL;
 
 	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
@@ -1113,11 +1113,11 @@ std::vector<CFoodpackage> CSqlite3::GetFoodpackages(bool is_shouyinji_show)
 
 	if (is_shouyinji_show)
 	{
-		sql = "SELECT * FROM pos_foodpackage WHERE is_shouyinji_show = '1' ORDER BY tag";
+		sql = "SELECT * FROM pos_foodpackage WHERE status='NORMAL' AND is_shouyinji_show = '1' ORDER BY tag";
 	}
 	else
 	{
-		sql = "SELECT * FROM pos_foodpackage ORDER BY tag";
+		sql = "SELECT * FROM pos_foodpackage WHERE status='NORMAL' ORDER BY tag";
 	}
 
 	sqlite3_stmt * stmt = NULL;

+ 200 - 0
zhipuzi_pos_windows/wnd/CJiajiaWnd.cpp

@@ -0,0 +1,200 @@
+#include "../pch/pch.h"
+#include "CjiajiaWnd.h"
+
+LRESULT CjiajiaWnd::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 CjiajiaWnd::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 CjiajiaWnd::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 CjiajiaWnd::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;
+}
+
+LRESULT CjiajiaWnd::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("jiajia_input_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;
+}
+
+void CjiajiaWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("quit"))
+		{
+			Close(IDCANCEL);
+			return;
+		}
+		else if (senderName == _T("save"))
+		{
+			CEditUI* pContent = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+			wstring wsReason = pContent->GetText();
+
+			m_content = CLewaimaiString::UnicodeToUTF8(wsReason);
+
+			int zhekou = atoi(m_content.c_str());
+			if (zhekou > 100 || zhekou < 0)
+			{
+				CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(_T("errinfo")));
+				pErrorInfo->SetText(L"加价金额只能为0到100之间的整数");
+				pErrorInfo->SetVisible(true);
+
+				return;
+			}
+
+			Close(IDOK);
+		}
+	}
+	else if (msg.sType == _T("textchanged"))
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				char tmp = strValue.at(nIndex);
+				if (tmp > 57 || tmp < 48)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex) + strValue.substr(nIndex + 1);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置            
+				}
+			}
+		}
+	}
+}
+
+void CjiajiaWnd::Init()
+{
+
+}
+
+
+std::string CjiajiaWnd::getContent()
+{
+	return m_content;
+}
+
+void CjiajiaWnd::SetTitle(std::wstring title)
+{
+	CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("memo_dlg_title")));
+	pLabel->SetText(title.c_str());
+}

+ 69 - 0
zhipuzi_pos_windows/wnd/CJiajiaWnd.h

@@ -0,0 +1,69 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CMainWnd.h"
+
+class CjiajiaWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIMemoWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+
+		//delete this;
+	};
+
+	void Init();
+
+	std::string getContent();
+
+	void SetTitle(std::wstring title);
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	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_content;
+};
+

+ 10 - 0
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -192,6 +192,11 @@ void CMainWnd::Notify(TNotifyUI& msg)
     {
         HandleItemSelectMsg(msg);
     }
+	else if (msg.sType == _T("textchanged"))
+	{
+		//编辑框内容改变事件
+
+	}
 }
 
 void CMainWnd::HandleClickMsg(TNotifyUI& msg)
@@ -270,6 +275,11 @@ void CMainWnd::HandleItemSelectMsg(TNotifyUI& msg)
 	this->m_curPageUI->HandleItemSelectMsg(msg);
 }
 
+void CMainWnd::HandleTextChangedMsg(TNotifyUI& msg)
+{
+
+}
+
 LRESULT CMainWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
     LRESULT lRes = 0;

+ 1 - 0
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -55,6 +55,7 @@ public:
     void HandleClickMsg(TNotifyUI& msg);
     void HandleSelectChangeMsg(TNotifyUI& msg);
     void HandleItemSelectMsg(TNotifyUI& msg);
+	void HandleTextChangedMsg(TNotifyUI& msg);
 
     LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 

+ 292 - 0
zhipuzi_pos_windows/wnd/CMemberLoginWnd.cpp

@@ -0,0 +1,292 @@
+#include "../pch/pch.h"
+#include "CMemberLoginWnd.h"
+
+LRESULT CMemberLoginWnd::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 CMemberLoginWnd::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 CMemberLoginWnd::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 CMemberLoginWnd::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;
+		}
+	}
+	else if (uMsg == WM_MEMBER_CHECK_SUCCESS)
+	{
+		//验证成功了
+		Close(IDOK);
+
+		return true;
+	}
+	else if (uMsg == WM_MEMBER_CHECK_FAIL)
+	{
+		//验证失败了
+		CEditUI* pContent = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+		pContent->SetEnabled(true);
+
+		CButtonUI* pQuit = static_cast<CButtonUI*>(m_pm.FindControl(_T("quit")));
+		pQuit->SetEnabled(true);
+		CButtonUI* pSave = static_cast<CButtonUI*>(m_pm.FindControl(_T("save")));
+		pSave->SetEnabled(true);
+
+		//失败原因
+		CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(_T("errinfo")));
+		pErrorInfo->SetText(m_errorInfo.c_str());
+		pErrorInfo->SetVisible(true);
+
+		return true;
+	}
+
+	return false;
+}
+
+LRESULT CMemberLoginWnd::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("member_login_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;
+}
+
+void CMemberLoginWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("quit"))
+		{
+			Close(IDCANCEL);
+			return;
+		}
+		else if (senderName == _T("save"))
+		{
+			CEditUI* pContent = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+			wstring wsReason = pContent->GetText();
+
+			m_content = CLewaimaiString::UnicodeToUTF8(wsReason);
+
+			pContent->SetEnabled(false);
+
+			CButtonUI* pQuit = static_cast<CButtonUI*>(m_pm.FindControl(_T("quit")));
+			pQuit->SetEnabled(false);
+			CButtonUI* pSave = static_cast<CButtonUI*>(m_pm.FindControl(_T("save")));
+			pSave->SetEnabled(false);
+
+			//开始处理
+			std::thread(&CMemberLoginWnd::ConfirmMember, this).detach();
+		}
+	}
+	else if (msg.sType == _T("textchanged"))
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				char tmp = strValue.at(nIndex);
+				if (tmp > 57 || tmp < 48)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex) + strValue.substr(nIndex + 1);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置            
+				}
+			}
+		}
+	}
+}
+
+void CMemberLoginWnd::Init()
+{
+
+}
+
+
+std::string CMemberLoginWnd::getContent()
+{
+	return m_content;
+}
+
+void CMemberLoginWnd::SetTitle(std::wstring title)
+{
+	CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("memo_dlg_title")));
+	pLabel->SetText(title.c_str());
+}
+
+void CMemberLoginWnd::ConfirmMember()
+{
+	std::string phone = m_content;
+
+	std::map<string, string> params;
+	params["phone"] = phone;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::Request("/member/membercheckbyphone", params, response);
+	if (!ret)
+	{
+		m_errorInfo = _T("网络请求出错");
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_errorInfo = _T("服务器返回数据格式错误");
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+
+		return;
+	}
+	else
+	{
+		if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+		{
+			m_errorInfo = _T("服务器返回数据格式错误");
+			PostMessage(WM_MEMBER_CHECK_FAIL);
+
+			return;
+		}
+
+		rapidjson::Value& v_errcode = document["errcode"];
+		int errcode = v_errcode.GetInt();
+		if (errcode != 0)
+		{
+			std::string errmsg = CLewaimaiString::UnicodeToUTF8(L"会员登录失败:") + string(document["errmsg"].GetString());
+			m_errorInfo = CLewaimaiString::UTF8ToUnicode(errmsg);
+			PostMessage(WM_MEMBER_CHECK_FAIL);
+
+			return;
+		}
+
+		rapidjson::Value& data = document["data"];
+		rapidjson::Value& rows = data["rows"];
+
+		if (rows.Size() < 1)
+		{
+			m_errorInfo = _T("会员信息为空");
+			PostMessage(WM_MEMBER_CHECK_FAIL);
+
+			return;
+		}
+
+		rapidjson::Value& rowinfo = rows[0];
+
+		m_member_name = rowinfo["name"].GetString();
+		m_member_level = rowinfo["member_level"].GetString();
+		m_member_level_name = "";
+
+		PostMessage(WM_MEMBER_CHECK_SUCCESS);
+	}
+}

+ 77 - 0
zhipuzi_pos_windows/wnd/CMemberLoginWnd.h

@@ -0,0 +1,77 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CMainWnd.h"
+
+class CMemberLoginWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIMemoWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+
+		//delete this;
+	};
+
+	void Init();
+
+	std::string getContent();
+
+	void SetTitle(std::wstring title);
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	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);
+
+	void ConfirmMember();
+
+public:
+	CPaintManagerUI m_pm;
+
+	std::string m_content;
+
+	std::wstring m_errorInfo;
+
+	std::string m_member_name;
+	std::string m_member_level;
+	std::string m_member_level_name;
+};
+

+ 200 - 0
zhipuzi_pos_windows/wnd/CRengongYouhuiWnd.cpp

@@ -0,0 +1,200 @@
+#include "../pch/pch.h"
+#include "CRengongYouhuiWnd.h"
+
+LRESULT CRengongYouhuiWnd::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 CRengongYouhuiWnd::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 CRengongYouhuiWnd::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 CRengongYouhuiWnd::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;
+}
+
+LRESULT CRengongYouhuiWnd::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("rengongyouhui_input_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;
+}
+
+void CRengongYouhuiWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("quit"))
+		{
+			Close(IDCANCEL);
+			return;
+		}
+		else if (senderName == _T("save"))
+		{
+			CEditUI* pContent = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+			wstring wsReason = pContent->GetText();
+
+			m_content = CLewaimaiString::UnicodeToUTF8(wsReason);
+
+			int zhekou = atoi(m_content.c_str());
+			if (zhekou > 100 || zhekou < 0)
+			{
+				CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(_T("errinfo")));
+				pErrorInfo->SetText(L"优惠金额只能为0到100之间的整数");
+				pErrorInfo->SetVisible(true);
+
+				return;
+			}
+
+			Close(IDOK);
+		}
+	}
+	else if (msg.sType == _T("textchanged"))
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				char tmp = strValue.at(nIndex);
+				if (tmp > 57 || tmp < 48)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex) + strValue.substr(nIndex + 1);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置            
+				}
+			}
+		}
+	}
+}
+
+void CRengongYouhuiWnd::Init()
+{
+
+}
+
+
+std::string CRengongYouhuiWnd::getContent()
+{
+	return m_content;
+}
+
+void CRengongYouhuiWnd::SetTitle(std::wstring title)
+{
+	CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("memo_dlg_title")));
+	pLabel->SetText(title.c_str());
+}

+ 69 - 0
zhipuzi_pos_windows/wnd/CRengongYouhuiWnd.h

@@ -0,0 +1,69 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CMainWnd.h"
+
+class CRengongYouhuiWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIMemoWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+
+		//delete this;
+	};
+
+	void Init();
+
+	std::string getContent();
+
+	void SetTitle(std::wstring title);
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	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_content;
+};
+

+ 200 - 0
zhipuzi_pos_windows/wnd/CZhekouWnd.cpp

@@ -0,0 +1,200 @@
+#include "../pch/pch.h"
+#include "CZhekouWnd.h"
+
+LRESULT CZhekouWnd::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 CZhekouWnd::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 CZhekouWnd::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 CZhekouWnd::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;
+}
+
+LRESULT CZhekouWnd::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("zhekou_input_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;
+}
+
+void CZhekouWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("quit"))
+		{
+			Close(IDCANCEL);
+			return;
+		}
+		else if (senderName == _T("save"))
+		{
+			CEditUI* pContent = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+			wstring wsReason = pContent->GetText();
+
+			m_content = CLewaimaiString::UnicodeToUTF8(wsReason);
+
+			int zhekou = atoi(m_content.c_str());
+			if (zhekou > 100 || zhekou < 1)
+			{
+				CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(_T("errinfo")));
+				pErrorInfo->SetText(L"折扣值只能为1到100之间的整数");
+				pErrorInfo->SetVisible(true);
+
+				return;
+			}
+
+			Close(IDOK);
+		}
+	}
+	else if (msg.sType == _T("textchanged"))
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("content")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				char tmp = strValue.at(nIndex);
+				if (tmp > 57 || tmp < 48)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex) + strValue.substr(nIndex + 1);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置            
+				}
+			}
+		}
+	}
+}
+
+void CZhekouWnd::Init()
+{
+
+}
+
+
+std::string CZhekouWnd::getContent()
+{
+	return m_content;
+}
+
+void CZhekouWnd::SetTitle(std::wstring title)
+{
+	CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("memo_dlg_title")));
+	pLabel->SetText(title.c_str());
+}

+ 69 - 0
zhipuzi_pos_windows/wnd/CZhekouWnd.h

@@ -0,0 +1,69 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CMainWnd.h"
+
+class CZhekouWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIMemoWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+
+		//delete this;
+	};
+
+	void Init();
+
+	std::string getContent();
+
+	void SetTitle(std::wstring title);
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	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_content;
+};
+

+ 8 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj

@@ -225,6 +225,10 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="wnd\CJiajiaWnd.h" />
+    <ClInclude Include="wnd\CRengongYouhuiWnd.h" />
+    <ClInclude Include="wnd\CZhekouWnd.h" />
+    <ClInclude Include="wnd\CMemberLoginWnd.h" />
     <ClInclude Include="wnd\CYouhuiShowWnd.h" />
     <ClInclude Include="zhipuzi\CDiandanOrderItem.h" />
     <ClInclude Include="zhipuzi\CShopinfo.h" />
@@ -274,6 +278,10 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="helper\CSystem.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="wnd\CJiajiaWnd.cpp" />
+    <ClCompile Include="wnd\CRengongYouhuiWnd.cpp" />
+    <ClCompile Include="wnd\CZhekouWnd.cpp" />
+    <ClCompile Include="wnd\CMemberLoginWnd.cpp" />
     <ClCompile Include="wnd\CYouhuiShowWnd.cpp" />
     <ClCompile Include="zhipuzi\CDiandanOrderItem.cpp" />
     <ClCompile Include="zhipuzi\CShopinfo.cpp" />

+ 24 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -156,6 +156,18 @@
     <ClInclude Include="wnd\CYouhuiShowWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="wnd\CMemberLoginWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="wnd\CZhekouWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="wnd\CJiajiaWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="wnd\CRengongYouhuiWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -275,6 +287,18 @@
     <ClCompile Include="wnd\CYouhuiShowWnd.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="wnd\CMemberLoginWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="wnd\CZhekouWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="wnd\CJiajiaWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="wnd\CRengongYouhuiWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">