张洋 před 1 týdnem
rodič
revize
3bcc5fdc55

+ 23 - 23
DuiLib/Control/UIList.cpp

@@ -1,4 +1,4 @@
-#include "StdAfx.h"
+#include "StdAfx.h"
 
 namespace DuiLib {
 
@@ -20,7 +20,7 @@ namespace DuiLib {
 		Add(m_pHeader);
 		Add(m_pList);
 
-		// ÁбíÅäÖÃ
+		// 列表�置
 		m_ListInfo.nColumns = 0;
 		m_ListInfo.nFont = -1;
 		m_ListInfo.uTextStyle = DT_VCENTER | DT_SINGLELINE;
@@ -400,7 +400,7 @@ namespace DuiLib {
 				return;
 			case 0x41:// Ctrl+A 
 				{
-					//ȫѡ
+					//全选
 					if (IsMultiSelect() && (GetKeyState(VK_CONTROL) & 0x8000)) {
                         UnSelectAllItems();
 						SelectAllItems();
@@ -476,18 +476,18 @@ namespace DuiLib {
 
 	bool CListUI::SelectItem(int iIndex, bool bTakeFocus)
 	{
-		// ÖØÖöàÑ¡ÆðʼÐòºÅ
+		// �置多选起始��
 		m_iFirstSel = -1;
-		// È¡ÏûÆäËüÑ¡ÔñÏî
+		// �消其它选择项
 		UnSelectItem(iIndex, true);
-		// ÅжÏÊÇ·ñºÏ·¨ÁбíÏî
+		// 判断是��法列表项
 		if (iIndex < 0) return false;
-		// ÒѾ­Ñ¡Ôñ
+		// 已�选择
 		int aIndex = m_aSelItems.Find((LPVOID)iIndex);
 		if (aIndex != -1) {
 			return true;
 		}
-		// Ñ¡Ôñµ±Ç°ÁбíÏî
+		// 选择当�列表项
 		CControlUI* pControl = GetItemAt(iIndex);
 		if (pControl == NULL) return false;
 		IListItemUI* pListItem = static_cast<IListItemUI*>(pControl->GetInterface(_T("ListItem")));
@@ -497,7 +497,7 @@ namespace DuiLib {
 		}
 		int iLastSel = m_iCurSel;
 		m_iCurSel = iIndex;
-		//Èç¹ûÒѾ­Ñ¡ÖÐÁ˾ÍÎÞÐèÒªÔÙÖØ¸´¼ÓÈëby nakkler
+		//如果已�选中了就无需����加入by nakkler
 		if(m_aSelItems.Find((LPVOID)iIndex)==-1)
             m_aSelItems.Add((LPVOID)iIndex);
 
@@ -513,15 +513,15 @@ namespace DuiLib {
 
 	bool CListUI::SelectMultiItem(int iIndex, bool bTakeFocus)
 	{
-		// 먦Æô¶àÑ¡
+		// 未开�多选
 		if (!IsMultiSelect()) return SelectItem(iIndex, bTakeFocus);
-		// È«²¿È¡Ïû
+		// 全部�消
 		if (iIndex < 0) {
 			UnSelectAllItems();
 			return true;
 		}
 
-		// ¶àÑ¡ÆðʼÐòºÅ
+		// 多选起始��
 		if (m_iFirstSel == -1) {
 			if (m_iCurSel != -1) {
 				m_iFirstSel = m_iCurSel;
@@ -537,7 +537,7 @@ namespace DuiLib {
 		IListItemUI* pListItem = static_cast<IListItemUI*>(pControl->GetInterface(_T("ListItem")));
 		if (pListItem == NULL) return false;
 
-		// ¶àÑ¡ÅжÏ
+		// 多选判断
 		if ((GetKeyState(VK_CONTROL) & 0x8000)) {
 			int aIndex = m_aSelItems.Find((LPVOID)iIndex);
 			if (aIndex != -1) {
@@ -989,7 +989,7 @@ namespace DuiLib {
 
 	void CListUI::EnsureVisible(int iIndex)
 	{
-		if (m_iCurSel < 0) return;
+		//if (m_iCurSel < 0) return;
 		RECT rcItem = m_pList->GetItemAt(iIndex)->GetPos();
 		RECT rcList = m_pList->GetPos();
 		RECT rcListInset = m_pList->GetInset();
@@ -1506,7 +1506,7 @@ namespace DuiLib {
 		}
 		UINT uListType = m_pOwner->GetListType();
 		if (uListType == LT_LIST) {
-			// ¼ÆËãºáÏò³ß´ç
+			// 计算横�尺寸
 			int nItemCount = m_items.GetSize();
 			if (nItemCount > 0)
 			{
@@ -2244,7 +2244,7 @@ namespace DuiLib {
 	bool CListElementUI::Select(bool bSelect)
 	{
 		if (!IsEnabled()) return false;
-		// È¡ÏûÆäËüÁбíÏîÊý¾Ý
+		// �消其它列表项数�
 		if (m_pOwner) {
 			m_pOwner->UnSelectItem(m_iIndex, true);
 		}
@@ -2411,13 +2411,13 @@ namespace DuiLib {
 			return;
 		}
 
-		// ÓÒ¼üÑ¡Ôñ
+		// �键选择
 		if (m_pOwner != NULL)
 		{
 			if (m_pOwner->GetListInfo()->bRSelected && event.Type == UIEVENT_RBUTTONDOWN)
 			{
 				if (IsEnabled()) {
-					// ¶àÑ¡
+					// 多选
 					if ((GetKeyState(VK_CONTROL) & 0x8000) || (GetKeyState(VK_SHIFT) & 0x8000)) {
 						if (m_pOwner != NULL) m_pOwner->SelectMultiItem(m_iIndex);
 					}
@@ -2434,7 +2434,7 @@ namespace DuiLib {
 			if (IsEnabled()) {
 				if(IsRichEvent()) m_pManager->SendNotify(this, DUI_MSGTYPE_BUTTONDOWN);
 
-				// ¶àÑ¡
+				// 多选
 				if ((GetKeyState(VK_CONTROL) & 0x8000) || (GetKeyState(VK_SHIFT) & 0x8000)) {
 					if (m_pOwner != NULL) m_pOwner->SelectMultiItem(m_iIndex);
 				}
@@ -2886,7 +2886,7 @@ namespace DuiLib {
 	bool CListContainerElementUI::Select(bool bSelect)
 	{
 		if (!IsEnabled()) return false;
-		// È¡ÏûÆäËüÁбíÏîÊý¾Ý
+		// �消其它列表项数�
 		if (m_pOwner) {
 			m_pOwner->UnSelectItem(m_iIndex, true);
 		}
@@ -2951,7 +2951,7 @@ namespace DuiLib {
 			if (IsEnabled()) {
 				if(IsRichEvent()) m_pManager->SendNotify(this, DUI_MSGTYPE_BUTTONDOWN);
 
-				// ¶àÑ¡
+				// 多选
 				if ((GetKeyState(VK_CONTROL) & 0x8000) || (GetKeyState(VK_SHIFT) & 0x8000)) {
 					if (m_pOwner != NULL) m_pOwner->SelectMultiItem(m_iIndex);
 				}
@@ -2961,13 +2961,13 @@ namespace DuiLib {
 			}
 			return;
 		}
-		// ÓÒ¼üÑ¡Ôñ
+		// �键选择
 		if (m_pOwner != NULL)
 		{
 			if (m_pOwner->GetListInfo()->bRSelected && event.Type == UIEVENT_RBUTTONDOWN)
 			{
 				if (IsEnabled()) {
-					// ¶àÑ¡
+					// 多选
 					if ((GetKeyState(VK_CONTROL) & 0x8000) || (GetKeyState(VK_SHIFT) & 0x8000)) {
 						if (m_pOwner != NULL) m_pOwner->SelectMultiItem(m_iIndex);
 					}

binární
bin/Win32/Debug/zhipuzi_pos_windows/DuiLib_d.dll


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

@@ -65,7 +65,7 @@
 								<HorizontalLayout height="55" name="diandan_pay_layout">
 									<Button name="btn_diandan_pay" text="结账" height="55" width="175" padding="10,0,0,0" normalimage="file='btn_border_white.png' corner='5,5,5,5'" hotimage="file='btn_border_white_Hover.png' corner='5,5,5,5'" pushedimage="file='btn_border_white_Click.png' corner='5,5,5,5'"></Button>
 									
-									<Button name="btn_diandan_xiadan" text="下单" height="55" width="175" padding="10,0,0,0" textcolor="#FFFFFFFF" normalimage="file='btn_border_blue.png' corner='5,5,5,5'" hotimage="file='btn_border_blue_Hover.png' corner='5,5,5,5'" pushedimage="file='btn_border_blue_Click.png' corner='5,5,5,5'"></Button>
+									<Button name="btn_diandan_xiadan" text="下单" height="55" width="175" padding="10,0,0,0" textcolor="#FFFFFFFF" normalimage="file='btn_red_zhengchang.png' corner='5,5,5,5'" hotimage="file='btn_red_xuanfu.png' corner='5,5,5,5'" pushedimage="file='btn_red_dianji.png' corner='5,5,5,5'"></Button>
 								</HorizontalLayout>
 								
 								<HorizontalLayout height="55" name="jiesuan_pay_layout" visible="false">

binární
dll/debug/DuiLib_d.dll


binární
temp/link/Win32/Debug/DuiLib/DuiLib_d.pdb


+ 34 - 19
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -1206,7 +1206,7 @@ bool CDiandanPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam
 	return false;
 }
 
-void CDiandanPageUI::UpdateShopcartShow()
+void CDiandanPageUI::UpdateShopcartShow(bool is_add_new)
 {
 	//先保留选中
 	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
@@ -1271,27 +1271,42 @@ void CDiandanPageUI::UpdateShopcartShow()
 		}
 	}
 
-	//保留选中
-	if (nIndex != -1 && pList->GetCount() > 0)
+	if (is_add_new == true)
 	{
-		if (nIndex <= pList->GetCount() - 1)
-		{
-			pList->SelectItem(nIndex, false);
-		}
-		else
+		//增加新商品,取消选择
+		pList->SelectItem(-1, false);
+
+		//必须先刷新重绘,再获取range才准
+		pList->NeedUpdate();
+		pList->Invalidate();
+		m_pManager->Invalidate();
+
+		//这个是同步阻塞重绘
+		::UpdateWindow(m_pManager->GetPaintWindow());
+
+		pList->EnsureVisible(nItemNum - 1);
+	}
+	else
+	{
+		//保留选中
+		if (nIndex != -1 && pList->GetCount() > 0)
 		{
-			pList->SelectItem(pList->GetCount() - 1, false);
+			if (nIndex <= pList->GetCount() - 1)
+			{
+				pList->SelectItem(nIndex, false);
+			}
+			else
+			{
+				pList->SelectItem(pList->GetCount() - 1, false);
+			}
 		}
+
+		//恢复滚动条位置
+		pList->SetScrollPos(ScrollPos);
 	}
 
 	//更新结算信息
 	UpdateJiesuanInfo();
-
-	//判断滚动条的位置
-	SIZE ScrollRange = pList->GetScrollRange();
-
-	//恢复滚动条位置
-	pList->SetScrollPos(ScrollPos);
 }
 
 void CDiandanPageUI::UpdateJiesuanInfo()
@@ -1910,7 +1925,7 @@ void CDiandanPageUI::ClickFoodAction()
 
 		int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-		this->UpdateShopcartShow();
+		this->UpdateShopcartShow(is_add_new);
 	}
 	else
 	{
@@ -2087,7 +2102,7 @@ void CDiandanPageUI::ClickFoodAction()
 
 		int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-		this->UpdateShopcartShow();
+		this->UpdateShopcartShow(is_add_new);
 	}
 }
 
@@ -3532,7 +3547,7 @@ bool CDiandanPageUI::SaomiaoBarcode(std::string barcode)
 
 	int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-	this->UpdateShopcartShow();
+	this->UpdateShopcartShow(is_add_new);
 
 	return true;
 }
@@ -3801,7 +3816,7 @@ bool CDiandanPageUI::BiaoqianchengSaomaBarcode(std::string barcode)
 
 	int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-	this->UpdateShopcartShow();
+	this->UpdateShopcartShow(is_add_new);
 
 	return true;
 }

+ 1 - 1
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -70,7 +70,7 @@ public:
 	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
 	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 
-	void UpdateShopcartShow();
+	void UpdateShopcartShow(bool is_add_new = false);
 
 	//任何可以引起价格变化的,比如添加、修改、删除商品,或者修改优惠等,需要重新计算总价格,刷新结算账单等地方的显示,都要调用这个方法
 	void UpdateJiesuanInfo();

+ 54 - 20
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.cpp

@@ -101,7 +101,6 @@ void CZhengcanDiandanPageUI::GetTableInfo()
 	this->FindSubControl(_T("loading"))->SetVisible(true);
 
 	//启动一个线程,进行网络请求操作
-
 	std::thread t(&CZhengcanDiandanPageUI::DoGetTableInfo, this);
 	t.detach();
 }
@@ -1322,12 +1321,25 @@ bool CZhengcanDiandanPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARA
 	return false;
 }
 
-void CZhengcanDiandanPageUI::UpdateShopcartShow()
+void CZhengcanDiandanPageUI::UpdateShopcartShow(bool is_add_new)
 {
 	//先保留选中
 	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
 	int nIndex = pList->GetCurSel();
 
+	SIZE ScrollPos;
+	if (pList->GetCount() == 0)
+	{
+		//如果清空之前,就没有元素,那就滚动条还原
+		ScrollPos.cx = 0;
+		ScrollPos.cy = 0;
+	}
+	else
+	{
+		//保留滚动条位置
+		ScrollPos = pList->GetScrollPos();
+	}
+
 	//先清空
 	pList->RemoveAll();
 
@@ -1384,19 +1396,6 @@ void CZhengcanDiandanPageUI::UpdateShopcartShow()
 		}
 	}
 
-	//保留选中
-	if (nIndex != -1 && pList->GetCount() > 0)
-	{
-		if (nIndex <= pList->GetCount() - 1)
-		{
-			pList->SelectItem(nIndex, false);
-		}
-		else
-		{
-			pList->SelectItem(pList->GetCount() - 1, false);
-		}
-	}
-
 	int xiadan_cishu = m_cur_diandan_order.m_order_history_array.size();
 
 	m_history_cart_item.clear();
@@ -1405,8 +1404,9 @@ void CZhengcanDiandanPageUI::UpdateShopcartShow()
 	for (int i = xiadan_cishu - 1; i >= 0 ; i--)
 	{
 		CLabelUI* attention = new CLabelUI();
-		attention->SetText((L"---------------------  第" + std::to_wstring(m_cur_diandan_order.m_order_history_array[i].xiadanNum + 1) + L"次下单 --------------------").c_str());
+		attention->SetText((L"-----------------------  第" + std::to_wstring(m_cur_diandan_order.m_order_history_array[i].xiadanNum + 1) + L"次下单 -----------------------").c_str());
 		attention->SetTextColor(0xFFBBBBBB);
+		attention->SetAttribute(L"align", L"center");
 
 		pList->Add(attention);
 
@@ -1468,6 +1468,40 @@ void CZhengcanDiandanPageUI::UpdateShopcartShow()
 		}
 	}
 
+	if (is_add_new == true)
+	{
+		//增加新商品,取消选择
+		pList->SelectItem(-1, false);
+
+		//必须先刷新重绘,再获取range才准
+		pList->NeedUpdate();
+		pList->Invalidate();
+		m_pManager->Invalidate();
+
+		//这个是同步阻塞重绘
+		::UpdateWindow(m_pManager->GetPaintWindow());
+
+		pList->EnsureVisible(nItemNum - 1);
+	}
+	else
+	{
+		//保留选中
+		if (nIndex != -1 && pList->GetCount() > 0)
+		{
+			if (nIndex <= pList->GetCount() - 1)
+			{
+				pList->SelectItem(nIndex, false);
+			}
+			else
+			{
+				pList->SelectItem(pList->GetCount() - 1, false);
+			}
+		}
+
+		//恢复滚动条位置
+		pList->SetScrollPos(ScrollPos);
+	}
+
 	//更新结算信息
 	UpdateJiesuanInfo();
 }
@@ -2133,7 +2167,7 @@ void CZhengcanDiandanPageUI::ClickFoodAction()
 
 		int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-		this->UpdateShopcartShow();
+		this->UpdateShopcartShow(is_add_new);
 	}
 	else
 	{
@@ -2297,7 +2331,7 @@ void CZhengcanDiandanPageUI::ClickFoodAction()
 
 		int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-		UpdateShopcartShow();
+		UpdateShopcartShow(is_add_new);
 
 		return;
 	}
@@ -4056,7 +4090,7 @@ bool CZhengcanDiandanPageUI::SaomiaoBarcode(std::string barcode)
 
 	int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-	this->UpdateShopcartShow();
+	this->UpdateShopcartShow(is_add_new);
 
 	return true;
 }
@@ -4325,7 +4359,7 @@ bool CZhengcanDiandanPageUI::BiaoqianchengSaomaBarcode(std::string barcode)
 
 	int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
 
-	this->UpdateShopcartShow();
+	this->UpdateShopcartShow(is_add_new);
 
 	return true;
 }

+ 1 - 1
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.h

@@ -73,7 +73,7 @@ public:
 	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 
 	//对订单做了任何改变之后,刷新购物车显示
-	void UpdateShopcartShow();
+	void UpdateShopcartShow(bool is_add_new = false);
 
 	//任何可以引起价格变化的,比如添加、修改、删除商品,或者修改优惠等,需要重新计算总价格,刷新结算账单等地方的显示,都要调用这个方法
 	void UpdateJiesuanInfo();

binární
zhipuzi_pos_windows/resource/skin.zip