Bladeren bron

开发快捷键功能

张洋 2 jaren geleden
bovenliggende
commit
37ad6b4c45

+ 33 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/setting_kuaijiejian.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<HorizontalLayout height="44" padding="0,0,0,0">
+		<Label text="操作提示:点击要设置快捷键的操作,然后用键盘按出想要的快捷键即可完成设置" width="600" />
+	</HorizontalLayout>
+	
+	<Control height="1" bkcolor="#FF708090" padding="0,0,0,20" />
+	
+	<HorizontalLayout height="44">
+		<Label text="微信/支付宝/云闪付收款" width="260" />
+		<Button name="setting_kuaijiejian_page_btn_weixinshoukuan" align="center" width="200" height="38" padding="0,3,0,3" text="" normalimage="" hotimage="" pushedimage="" focusedimage="" bordersize="1" bordercolor="#FFA9A9A9" focusbordercolor="#FFFF0000"/>
+	</HorizontalLayout>
+	
+	<HorizontalLayout height="44">
+		<Label text="会员登录" width="260" />
+		<Button name="setting_kuaijiejian_page_btn_huiyuandenglu" align="center" width="200" height="38" padding="0,3,0,3" text="" normalimage="" hotimage="" pushedimage="" focusedimage="" bordersize="1" bordercolor="#FFA9A9A9" focusbordercolor="#FFFF0000" />
+	</HorizontalLayout>
+	
+	<HorizontalLayout height="44">
+		<Label text="会员收款" width="260" />
+		<Button name="setting_kuaijiejian_page_btn_huiyuanshoukuan" align="center" width="200" height="38" padding="0,3,0,3" text="" normalimage="" hotimage="" pushedimage="" focusedimage="" bordersize="1" bordercolor="#FFA9A9A9" focusbordercolor="#FFFF0000" />
+	</HorizontalLayout>
+	
+	<HorizontalLayout height="44">
+		<Label text="现金收款" width="260" />
+		<Button name="setting_kuaijiejian_page_btn_xianjinshoukuan" align="center" width="200" height="38" padding="0,3,0,3" text="" normalimage="" hotimage="" pushedimage="" focusedimage="" bordersize="1" bordercolor="#FFA9A9A9" focusbordercolor="#FFFF0000" />
+	</HorizontalLayout>
+	
+	<HorizontalLayout height="44">
+		<Label text="打开钱箱" width="260" />
+		<Button name="setting_kuaijiejian_page_btn_qianxiang" align="center" width="200" height="38" padding="0,3,0,3" text="" normalimage="" hotimage="" pushedimage="" focusedimage="" bordersize="1" bordercolor="#FFA9A9A9" focusbordercolor="#FFFF0000" />
+	</HorizontalLayout>
+</Window>

+ 6 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/setting_page.xml

@@ -22,6 +22,8 @@
 					<Control height="1" bkcolor="#FFD1D1D1"></Control>
 					<Option name="setting_tongbu_switch" text="数据同步" group="setting_switch" align="center" height="69" padding="0,0,0,0" selectedimage="file='white_bkg.png'" textcolor="#FF666666" selectedtextcolor="#FF000000" />
 					<Control height="1" bkcolor="#FFD1D1D1"></Control>
+					<Option name="setting_kuaijiejian_switch" text="快捷键设置" group="setting_switch" align="center" height="69" padding="0,0,0,0" selectedimage="file='white_bkg.png'" textcolor="#FF666666" selectedtextcolor="#FF000000" />
+					<Control height="1" bkcolor="#FFD1D1D1"></Control>
 					<Option name="setting_system_switch" text="系统设置" group="setting_switch" align="center" height="69" padding="0,0,0,0" selectedimage="file='white_bkg.png'" textcolor="#FF666666" selectedtextcolor="#FF000000" />
 					<Control height="1" bkcolor="#FFD1D1D1"></Control>
 					<Option name="setting_system_about" text="关于" group="setting_switch" align="center" height="69" padding="0,0,0,0" selectedimage="file='white_bkg.png'" textcolor="#FF666666" selectedtextcolor="#FF000000" />
@@ -69,6 +71,10 @@
 				<VerticalLayout bkcolor="#FFFFFFFF" inset="15,15,15,15">
 					<Include source="setting_tongbu.xml" />
 				</VerticalLayout>
+				
+				<VerticalLayout bkcolor="#FFFFFFFF" inset="15,15,15,15">
+					<Include source="setting_kuaijiejian.xml" />
+				</VerticalLayout>
 
 				<VerticalLayout bkcolor="#FFFFFFFF" inset="15,15,15,15">
 					<Include source="setting_system.xml" />

+ 8 - 1
zhipuzi_pos_windows/helper/define.h

@@ -44,4 +44,11 @@
 #define WM_SETTING_TONGBU_FAIL 10602
 
 //商品管理相关的
-#define WM_FOOD_HANDLE_SUCCESS 10701 //异步处理商品添加、修改、删除等的消息
+#define WM_FOOD_HANDLE_SUCCESS 10701 //异步处理商品添加、修改、删除等的消息
+
+//热键相关的
+#define WM_MYHOTKEY_WEIXIN_SHOUKUAN 10801
+#define WM_MYHOTKEY_HUIYUAN_DENGLU 10802
+#define WM_MYHOTKEY_HUIYUAN_SHOUKUAN 10803
+#define WM_MYHOTKEY_XIANJIN_SHOUKUAN 10804
+#define WM_MYHOTKEY_QIANXIANG 10805

+ 29 - 0
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -1021,6 +1021,30 @@ void CDiandanPageUI::HandleTextCapture(std::string content)
 	this->StartWeixinzhifuShoukuan(content);
 }
 
+bool CDiandanPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	if (uMsg == WM_MYHOTKEY_WEIXIN_SHOUKUAN)
+	{
+		StartWeixinzhifuShoukuan();
+
+		return true;
+	}
+	else if (uMsg == WM_MYHOTKEY_HUIYUAN_DENGLU)
+	{
+		ClickMemberLogin();
+	}
+	else if (uMsg == WM_MYHOTKEY_HUIYUAN_SHOUKUAN)
+	{
+		StartHuiyuanShoukuan();
+	}
+	else if (uMsg == WM_MYHOTKEY_XIANJIN_SHOUKUAN)
+	{
+		StartXianjinShoukuan();
+	}
+
+	return false;
+}
+
 void CDiandanPageUI::UpdateShopcartShow()
 {
 	//先保留选中
@@ -2232,6 +2256,11 @@ void CDiandanPageUI::ClickMemberLogin()
 		return;
 	}
 
+	if (m_is_member == true)
+	{
+		m_pMainWnd->ShowToast(L"会员已登录!");
+	}
+
 	CMemberLoginWnd* pMemberLoginDlg = new CMemberLoginWnd();
 
 	if (pMemberLoginDlg != NULL)

+ 1 - 4
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -66,10 +66,7 @@ public:
 	void HandleTextCapture(std::string content);
 
 	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
-	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
-	{
-		return false;
-	}
+	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 
 	void UpdateShopcartShow();
 

+ 325 - 2
zhipuzi_pos_windows/page/CSettingPageUI.cpp

@@ -888,12 +888,16 @@ void CSettingPageUI::InitShow()
 		box_youtu->Selected(false, false);
 		box_wutu->Selected(true, false);
 	}
+	
+	//初始化快捷键展示
+	this->InitKuaijiejianShow();
 }
 
 //处理按钮点击类事件
 void CSettingPageUI::HandleClickMsg(TNotifyUI& msg)
 {
 	CDuiString name = msg.pSender->GetName();
+	std::wstring ws_name = name;
 
 	//开始处理设置页面的
 	if (name == _T("setting_is_new_waimai_voice"))
@@ -1503,6 +1507,39 @@ void CSettingPageUI::HandleClickMsg(TNotifyUI& msg)
 		//退出登录
 		m_pMainWnd->LoginOut(1);
 	}
+	else if (ws_name.find(L"setting_kuaijiejian_page_btn_") == 0)
+	{
+		//这个时候设置快捷键的状态和类型
+		m_mod = 0;
+		m_vk = 0;
+		m_isSet = false;
+
+		if (m_pMainWnd->GetIsKuaijiejianSetting() == false)
+		{
+			m_pMainWnd->SetIsKuaijiejianSetting(true);
+		}
+
+		if (name == L"setting_kuaijiejian_page_btn_weixinshoukuan")
+		{			
+			m_kuaijiejian_type = 1;
+		}
+		else if (name == L"setting_kuaijiejian_page_btn_huiyuandenglu")
+		{
+			m_kuaijiejian_type = 2;
+		}
+		else if (name == L"setting_kuaijiejian_page_btn_huiyuanshoukuan")
+		{
+			m_kuaijiejian_type = 3;
+		}
+		else if (name == L"setting_kuaijiejian_page_btn_xianjinshoukuan")
+		{
+			m_kuaijiejian_type = 4;
+		}
+		else if (name == L"setting_kuaijiejian_page_btn_qianxiang")
+		{
+			m_kuaijiejian_type = 5;
+		}
+	}
 	else if (name == L"setting_tongbu_btn")
 	{
 		StartTongbu();
@@ -1563,16 +1600,25 @@ void CSettingPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
 		CLabelUI* label = static_cast<CLabelUI*>(this->FindSubControl(L"setting_tongbu_result"));
 		label->SetVisible(false);
 	}
-	else if (name == _T("setting_system_switch"))
+	else if (name == _T("setting_kuaijiejian_switch"))
 	{
 		CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(this->FindSubControl(_T("setting_switch")));
 		pControl->SelectItem(9);
+
+		CButtonUI* focusEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_weixinshoukuan")));
+		
+		m_pManager->SetFocus(NULL);
 	}
-	else if (name == _T("setting_system_about"))
+	else if (name == _T("setting_system_switch"))
 	{
 		CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(this->FindSubControl(_T("setting_switch")));
 		pControl->SelectItem(10);
 	}
+	else if (name == _T("setting_system_about"))
+	{
+		CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(this->FindSubControl(_T("setting_switch")));
+		pControl->SelectItem(11);
+	}
 	else if (name == _T("xianshi_setting_youtu"))
 	{
 		CSetting::GetInstance()->SetParam("setting_xianshi_is_youtu", "1");
@@ -1882,10 +1928,163 @@ bool CSettingPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam
 		label->SetText(m_tongbu_error.c_str());
 		label->SetVisible(true);
 	}
+	else if (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN || uMsg == WM_KEYUP || uMsg == WM_SYSKEYUP)
+	{
+		//处理热键的键盘消息
+		if (m_pMainWnd->GetIsKuaijiejianSetting() == true)
+		{
+			//正在设置快捷键
+			return OnHotKeyDown(uMsg, wParam, lParam);
+		}
+	}
 
 	return false;
 }
 
+bool CSettingPageUI::OnHotKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	if (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN)
+	{
+		if (wParam != VK_CONTROL && wParam != VK_MENU && wParam != VK_SHIFT)
+		{
+			//这个情况,按的是字母键之类的
+			CDuiString duiText;
+
+			if (VK_F1 <= wParam && wParam <= VK_F12)
+			{
+				//快捷键就是F1到F12,不需要搭配ctrl之类的
+				m_mod = 0;
+				duiText.Format(_T("F%d"), wParam - VK_F1 + 1);
+			}
+			else if (m_mod == MOD_CONTROL)
+			{
+				duiText.Format(_T("CTRL + %c"), wParam);
+			}
+			else if (m_mod == MOD_ALT)
+			{
+				duiText.Format(_T("ALT + %c"), wParam);
+			}
+			else if (m_mod == MOD_SHIFT)
+			{
+				duiText.Format(_T("SHIFT + %c"), wParam);
+			}
+			else if (m_mod == 0)
+			{
+				//直接按的字母键,无效
+				m_mod = 0;
+				m_vk = 0;
+				m_isSet = false;
+
+				return true;
+			}
+
+			//到这里来设置成功了,做展示
+			if (m_kuaijiejian_type == 1)
+			{
+				CButtonUI* focusEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_weixinshoukuan")));
+				focusEdit->SetText(duiText);
+			}
+			else if (m_kuaijiejian_type == 2)
+			{
+				CButtonUI* focusEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_huiyuandenglu")));
+				focusEdit->SetText(duiText);
+			}
+			else if (m_kuaijiejian_type == 3)
+			{
+				CButtonUI* focusEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_huiyuanshoukuan")));
+				focusEdit->SetText(duiText);
+			}
+			else if (m_kuaijiejian_type == 4)
+			{
+				CButtonUI* focusEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_xianjinshoukuan")));
+				focusEdit->SetText(duiText);
+			}
+			else if (m_kuaijiejian_type == 5)
+			{
+				CButtonUI* focusEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_qianxiang")));
+				focusEdit->SetText(duiText);
+			}
+
+			m_vk = wParam;
+			m_isSet = true;
+		}
+		else
+		{
+			//按的是控制键,这里只支持3选1,不能更多组合
+			if (wParam == VK_CONTROL)
+			{
+				m_mod = MOD_CONTROL;
+			}
+			else if (wParam == VK_MENU)
+			{
+				m_mod = MOD_ALT;
+			}
+			else if (wParam == VK_SHIFT)
+			{
+				m_mod = MOD_SHIFT;
+			}
+
+			m_isSet = false;
+		}
+	}
+	else if (uMsg == WM_KEYUP || uMsg == WM_SYSKEYUP)
+	{
+		//这个是只按了控制键,没有按其他的键
+		if (!m_isSet)
+		{
+			if (wParam == VK_CONTROL)
+			{
+				m_mod = 0;
+			}
+			else if (wParam == VK_MENU)
+			{
+				m_mod = 0;
+			}
+			else if (wParam == VK_SHIFT)
+			{
+				m_mod = 0;
+			}
+		}
+		else
+		{
+			//这里表示已经设置好了,等后面保存
+			if (wParam != VK_CONTROL && wParam != VK_MENU && wParam != VK_SHIFT)
+			{
+				//准备开始注册热键了
+				if (m_kuaijiejian_type == 1)
+				{
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_weixinshoukuan_mod", to_string(m_mod));
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_weixinshoukuan_vk", to_string(m_vk));
+				}
+				else if (m_kuaijiejian_type == 2)
+				{
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_huiyuandenglu_mod", to_string(m_mod));
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_huiyuandenglu_vk", to_string(m_vk));
+				}
+				else if (m_kuaijiejian_type == 3)
+				{
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_huiyuanshoukuan_mod", to_string(m_mod));
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_huiyuanshoukuan_vk", to_string(m_vk));
+				}
+				else if (m_kuaijiejian_type == 4)
+				{
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_xianjinshoukuan_mod", to_string(m_mod));
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_xianjinshoukuan_vk", to_string(m_vk));
+				}
+				else if (m_kuaijiejian_type == 5)
+				{
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_qianxiang_mod", to_string(m_mod));
+					CSetting::GetInstance()->SetParam("setting_kuaijiejian_qianxiang_vk", to_string(m_vk));
+				}
+
+				m_pMainWnd->UpdateRegisterHotKey();
+			}
+		}
+	}
+
+	return true;
+}
+
 void CSettingPageUI::StartTongbuBiaoqiancheng()
 {
 	std::thread(&CSettingPageUI::HandleTongbuBiaoqiancheng, this).detach();
@@ -2322,4 +2521,128 @@ void CSettingPageUI::HandleTongbu()
 	}
 
 	::PostMessage(m_pManager->GetPaintWindow(), WM_SETTING_TONGBU_SUCCESS, 0, 0);
+}
+
+void CSettingPageUI::InitKuaijiejianShow()
+{
+	//初始化快捷键的展示
+	UINT weixinshoukuan_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_weixinshoukuan_mod").c_str());
+	UINT weixinshoukuan_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_weixinshoukuan_vk").c_str());
+
+	UINT huiyuandenglu_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuandenglu_mod").c_str());
+	UINT huiyuandenglu_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuandenglu_vk").c_str());
+
+	UINT huiyuanshoukuan_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuanshoukuan_mod").c_str());
+	UINT huiyuanshoukuan_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuanshoukuan_vk").c_str());
+
+	UINT xianjinshoukuan_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_xianjinshoukuan_mod").c_str());
+	UINT xianjinshoukuan_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_xianjinshoukuan_vk").c_str());
+
+	UINT qianxiang_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_qianxiang_mod").c_str());
+	UINT qianxiang_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_qianxiang_vk").c_str());
+
+	CDuiString weixinshoukuan_info;
+	if (weixinshoukuan_mod == MOD_CONTROL)
+	{
+		weixinshoukuan_info.Format(_T("CTRL + %c"), weixinshoukuan_vk);
+	}
+	else if (weixinshoukuan_mod == MOD_ALT)
+	{
+		weixinshoukuan_info.Format(_T("ALT + %c"), weixinshoukuan_vk);
+	}
+	else if (weixinshoukuan_mod == MOD_SHIFT)
+	{
+		weixinshoukuan_info.Format(_T("SHIFT + %c"), weixinshoukuan_vk);
+	}
+	else if (weixinshoukuan_mod == 0)
+	{
+		weixinshoukuan_info.Format(_T("F%d"), weixinshoukuan_vk - VK_F1 + 1);
+	}
+
+	CButtonUI* shoukuan_edit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_weixinshoukuan")));
+	shoukuan_edit->SetText(weixinshoukuan_info);
+
+	CDuiString huiyuandenglu_info;
+	if (huiyuandenglu_mod == MOD_CONTROL)
+	{
+		huiyuandenglu_info.Format(_T("CTRL + %c"), huiyuandenglu_vk);
+	}
+	else if (huiyuandenglu_mod == MOD_ALT)
+	{
+		huiyuandenglu_info.Format(_T("ALT + %c"), huiyuandenglu_vk);
+	}
+	else if (huiyuandenglu_mod == MOD_SHIFT)
+	{
+		huiyuandenglu_info.Format(_T("SHIFT + %c"), huiyuandenglu_vk);
+	}
+	else if (weixinshoukuan_mod == 0)
+	{
+		huiyuandenglu_info.Format(_T("F%d"), huiyuandenglu_vk - VK_F1 + 1);
+	}
+
+	CButtonUI* huiyuandenglu_edit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_huiyuandenglu")));
+	huiyuandenglu_edit->SetText(huiyuandenglu_info);
+
+	CDuiString huiyuanshoukuan_info;
+	if (huiyuanshoukuan_mod == MOD_CONTROL)
+	{
+		huiyuanshoukuan_info.Format(_T("CTRL + %c"), huiyuanshoukuan_vk);
+	}
+	else if (huiyuanshoukuan_mod == MOD_ALT)
+	{
+		huiyuanshoukuan_info.Format(_T("ALT + %c"), huiyuanshoukuan_vk);
+	}
+	else if (huiyuanshoukuan_mod == MOD_SHIFT)
+	{
+		huiyuanshoukuan_info.Format(_T("SHIFT + %c"), huiyuanshoukuan_vk);
+	}
+	else if (weixinshoukuan_mod == 0)
+	{
+		huiyuanshoukuan_info.Format(_T("F%d"), huiyuanshoukuan_vk - VK_F1 + 1);
+	}
+
+	CButtonUI* huiyuanshoukuan_edit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_huiyuanshoukuan")));
+	huiyuanshoukuan_edit->SetText(huiyuanshoukuan_info);
+
+	CDuiString xianjinshoukuan_info;
+	if (xianjinshoukuan_mod == MOD_CONTROL)
+	{
+		xianjinshoukuan_info.Format(_T("CTRL + %c"), xianjinshoukuan_vk);
+	}
+	else if (xianjinshoukuan_mod == MOD_ALT)
+	{
+		xianjinshoukuan_info.Format(_T("ALT + %c"), xianjinshoukuan_vk);
+	}
+	else if (xianjinshoukuan_mod == MOD_SHIFT)
+	{
+		xianjinshoukuan_info.Format(_T("SHIFT + %c"), xianjinshoukuan_vk);
+	}
+	else if (weixinshoukuan_mod == 0)
+	{
+		xianjinshoukuan_info.Format(_T("F%d"), xianjinshoukuan_vk - VK_F1 + 1);
+	}
+
+	CButtonUI* xianjinshoukuan_edit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_xianjinshoukuan")));
+	xianjinshoukuan_edit->SetText(xianjinshoukuan_info);
+
+	CDuiString qianxiang_info;
+	if (qianxiang_mod == MOD_CONTROL)
+	{
+		qianxiang_info.Format(_T("CTRL + %c"), qianxiang_vk);
+	}
+	else if (qianxiang_mod == MOD_ALT)
+	{
+		qianxiang_info.Format(_T("ALT + %c"), qianxiang_vk);
+	}
+	else if (qianxiang_mod == MOD_SHIFT)
+	{
+		qianxiang_info.Format(_T("SHIFT + %c"), qianxiang_vk);
+	}
+	else if (weixinshoukuan_mod == 0)
+	{
+		qianxiang_info.Format(_T("F%d"), qianxiang_vk - VK_F1 + 1);
+	}
+
+	CButtonUI* qianxiang_edit = static_cast<CButtonUI*>(this->FindSubControl(_T("setting_kuaijiejian_page_btn_qianxiang")));
+	qianxiang_edit->SetText(qianxiang_info);
 }

+ 12 - 1
zhipuzi_pos_windows/page/CSettingPageUI.h

@@ -49,9 +49,20 @@ public:
 
 	void HandleTongbu();
 
+	bool OnHotKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	void InitKuaijiejianShow();
+
 private:
 	std::wstring m_errinfo;
 
 	std::wstring m_tongbu_error;
-};
 
+	//设置快捷键相关
+	UINT m_mod = 0;
+	UINT m_vk = 0;
+	bool m_isSet = false;
+
+	//当前设置快捷键的状态 1:微信收款 2会员登录 3会员收款 4现金收款
+	int m_kuaijiejian_type;
+};

+ 65 - 0
zhipuzi_pos_windows/tool/CSetting.cpp

@@ -344,6 +344,71 @@ void CSetting::Init()
 		m_paramsMap[setting_gongneng_gengduo_string] = "shangpin,kucun,caigou,zhengcan,saomashouyin,shoukuan";
 	}
 
+	//快捷键相关的设置(微信收款默认CTRL+D)
+	std::string setting_kuaijiejian_weixinshoukuan_mod = "setting_kuaijiejian_weixinshoukuan_mod";
+	if (m_paramsMap.find(setting_kuaijiejian_weixinshoukuan_mod) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_weixinshoukuan_mod] = "2";
+	}
+
+	std::string setting_kuaijiejian_weixinshoukuan_vk = "setting_kuaijiejian_weixinshoukuan_vk";
+	if (m_paramsMap.find(setting_kuaijiejian_weixinshoukuan_vk) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_weixinshoukuan_vk] = "68";
+	}
+
+	//快捷键相关的设置(会员登录默认CTRL+R)
+	std::string setting_kuaijiejian_huiyuandenglu_mod = "setting_kuaijiejian_huiyuandenglu_mod";
+	if (m_paramsMap.find(setting_kuaijiejian_huiyuandenglu_mod) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_huiyuandenglu_mod] = "2";
+	}
+
+	std::string setting_kuaijiejian_huiyuandenglu_vk = "setting_kuaijiejian_huiyuandenglu_vk";
+	if (m_paramsMap.find(setting_kuaijiejian_huiyuandenglu_vk) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_huiyuandenglu_vk] = "82";
+	}
+
+	//快捷键相关的设置(会员收款默认CTRL+Z)
+	std::string setting_kuaijiejian_huiyuanshoukuan_mod = "setting_kuaijiejian_huiyuanshoukuan_mod";
+	if (m_paramsMap.find(setting_kuaijiejian_huiyuanshoukuan_mod) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_huiyuanshoukuan_mod] = "2";
+	}
+
+	std::string setting_kuaijiejian_huiyuanshoukuan_vk = "setting_kuaijiejian_huiyuanshoukuan_vk";
+	if (m_paramsMap.find(setting_kuaijiejian_huiyuanshoukuan_vk) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_huiyuanshoukuan_vk] = "90";
+	}
+
+	//快捷键相关的设置(现金收款默认CTRL+X)
+	std::string setting_kuaijiejian_xianjinshoukuan_mod = "setting_kuaijiejian_xianjinshoukuan_mod";
+	if (m_paramsMap.find(setting_kuaijiejian_xianjinshoukuan_mod) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_xianjinshoukuan_mod] = "2";
+	}
+
+	std::string setting_kuaijiejian_xianjinshoukuan_vk = "setting_kuaijiejian_xianjinshoukuan_vk";
+	if (m_paramsMap.find(setting_kuaijiejian_xianjinshoukuan_vk) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_xianjinshoukuan_vk] = "88";
+	}
+
+	//快捷键相关的设置(钱箱默认CTRL+W)
+	std::string setting_kuaijiejian_qianxiang_mod = "setting_kuaijiejian_qianxiang_mod";
+	if (m_paramsMap.find(setting_kuaijiejian_qianxiang_mod) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_qianxiang_mod] = "2";
+	}
+
+	std::string setting_kuaijiejian_qianxiang_vk = "setting_kuaijiejian_qianxiang_vk";
+	if (m_paramsMap.find(setting_kuaijiejian_qianxiang_vk) == m_paramsMap.end())
+	{
+		m_paramsMap[setting_kuaijiejian_qianxiang_vk] = "87";
+	}
+
 	//点单页面关于抹零的设置 0 不抹零 1 抹零到角 2 抹零到元
 	std::string diandan_moling_type = "diandan_moling_type";
 	if (m_paramsMap.find(diandan_moling_type) == m_paramsMap.end())

+ 106 - 0
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -49,6 +49,9 @@ void CMainWnd::Init()
 	//开启键盘输入监听
 	RegKeyboardRawInput();
 
+	//注册热键
+	UpdateRegisterHotKey();
+
 	//启动一个线程,开始同步商品图片
 	std::thread(&CMainWnd::UpdateFoodImage, this).detach();
 }
@@ -209,6 +212,18 @@ void CMainWnd::Notify(TNotifyUI& msg)
 		//编辑框内容改变事件
 		HandleTextChangedMsg(msg);
 	}
+	else if (msg.sType == _T("killfocus"))
+	{
+		//处理快捷键设置的状态问题
+		CDuiString name = msg.pSender->GetName();
+
+		wstring ws_name = name;
+
+		if (ws_name.find(L"setting_kuaijiejian_page_btn_") == 0)
+		{
+			m_IsKuaijiejian = false;
+		}
+	}
 }
 
 void CMainWnd::HandleClickMsg(TNotifyUI& msg)
@@ -365,6 +380,10 @@ LRESULT CMainWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 		lRes = OnKeydown(uMsg, wParam, lParam, bHandled);
 		break;
 
+	case WM_HOTKEY:
+		lRes = OnHotKey(uMsg, wParam, lParam, bHandled);
+		break;
+
 	case WM_KILLFOCUS:
 		break;
 
@@ -853,6 +872,45 @@ LRESULT CMainWnd::OnKeydown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHand
 	return -1;
 }
 
+LRESULT CMainWnd::OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	UINT  fuModifiers = (UINT)LOWORD(lParam);
+	UINT  uVirtKey = (UINT)HIWORD(lParam);
+
+	if (m_IsKuaijiejian)
+	{
+		//如果当前正在设置快捷键,就不处理快捷键消息,避免影响快捷键的重新设置
+		bHandled = FALSE;
+		return 0;
+	}
+
+	//判断响应了什么热键   
+	if (wParam == WM_MYHOTKEY_WEIXIN_SHOUKUAN)
+	{
+		::PostMessage(m_pm.GetPaintWindow(), WM_MYHOTKEY_WEIXIN_SHOUKUAN, 0, 0);
+	}
+	else if (wParam == WM_MYHOTKEY_HUIYUAN_DENGLU)
+	{
+		::PostMessage(m_pm.GetPaintWindow(), WM_MYHOTKEY_HUIYUAN_DENGLU, 0, 0);
+	}
+	else if (wParam == WM_MYHOTKEY_HUIYUAN_SHOUKUAN)
+	{
+		::PostMessage(m_pm.GetPaintWindow(), WM_MYHOTKEY_HUIYUAN_SHOUKUAN, 0, 0);
+	}
+	else if (wParam == WM_MYHOTKEY_XIANJIN_SHOUKUAN)
+	{
+		::PostMessage(m_pm.GetPaintWindow(), WM_MYHOTKEY_XIANJIN_SHOUKUAN, 0, 0);
+	}
+	else if (wParam == WM_MYHOTKEY_QIANXIANG)
+	{
+		CPosPrinter printer;
+		printer.OpenQianxiang();
+	}
+
+	bHandled = TRUE;
+	return  0;
+}
+
 void CMainWnd::AddTrayIcon()
 {
     memset(&m_trayIcon, 0, sizeof(NOTIFYICONDATA));
@@ -1666,4 +1724,52 @@ void CMainWnd::UpdateGongnengString()
 
 	std::string newGengduo = CLewaimaiString::Merge(gengduoVector, ",");
 	CSetting::GetInstance()->SetParam("setting_gongneng_gengduo_string", newGengduo);
+}
+
+void CMainWnd::UpdateRegisterHotKey()
+{
+	//微信收款
+	UINT weixinshoukuan_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_weixinshoukuan_mod").c_str());
+	UINT weixinshoukuan_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_weixinshoukuan_vk").c_str());
+
+	//先卸载旧的,再注册新的
+	UnregisterHotKey(m_hWnd, WM_MYHOTKEY_WEIXIN_SHOUKUAN);
+
+	RegisterHotKey(m_hWnd, WM_MYHOTKEY_WEIXIN_SHOUKUAN, weixinshoukuan_mod, weixinshoukuan_vk);
+
+	//会员登录
+	UINT huiyuandenglu_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuandenglu_mod").c_str());
+	UINT huiyuandenglu_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuandenglu_vk").c_str());
+
+	//先卸载旧的,再注册新的
+	UnregisterHotKey(m_hWnd, WM_MYHOTKEY_HUIYUAN_DENGLU);
+
+	RegisterHotKey(m_hWnd, WM_MYHOTKEY_HUIYUAN_DENGLU, huiyuandenglu_mod, huiyuandenglu_vk);
+
+	//会员收款
+	UINT huiyuanshoukuan_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuanshoukuan_mod").c_str());
+	UINT huiyuanshoukuan_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_huiyuanshoukuan_vk").c_str());
+
+	//先卸载旧的,再注册新的
+	UnregisterHotKey(m_hWnd, WM_MYHOTKEY_HUIYUAN_SHOUKUAN);
+
+	RegisterHotKey(m_hWnd, WM_MYHOTKEY_HUIYUAN_SHOUKUAN, huiyuanshoukuan_mod, huiyuanshoukuan_vk);
+
+	//现金收款
+	UINT xianjinshoukuan_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_xianjinshoukuan_mod").c_str());
+	UINT xianjinshoukuan_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_xianjinshoukuan_vk").c_str());
+
+	//先卸载旧的,再注册新的
+	UnregisterHotKey(m_hWnd, WM_MYHOTKEY_XIANJIN_SHOUKUAN);
+
+	RegisterHotKey(m_hWnd, WM_MYHOTKEY_XIANJIN_SHOUKUAN, xianjinshoukuan_mod, xianjinshoukuan_vk);
+
+	//钱箱
+	UINT qianxiang_mod = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_qianxiang_mod").c_str());
+	UINT qianxiang_vk = (UINT)atoi(CSetting::GetInstance()->GetParam("setting_kuaijiejian_qianxiang_vk").c_str());
+
+	//先卸载旧的,再注册新的
+	UnregisterHotKey(m_hWnd, WM_MYHOTKEY_QIANXIANG);
+
+	RegisterHotKey(m_hWnd, WM_MYHOTKEY_QIANXIANG, qianxiang_mod, qianxiang_vk);
 }

+ 19 - 0
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -93,6 +93,9 @@ public:
 	//键盘消息
 	LRESULT OnKeydown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
+	//处理热键
+	LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
     LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 
 	//这个是用来处理一些自定义的消息
@@ -128,6 +131,19 @@ public:
 		return m_pages[pageName];
 	}
 
+	bool GetIsKuaijiejianSetting()
+	{
+		return m_IsKuaijiejian;
+	}
+
+	void SetIsKuaijiejianSetting(bool value)
+	{
+		m_IsKuaijiejian = value;
+	}
+
+	//注册热键
+	void UpdateRegisterHotKey();
+
 private:
 	void UpdateFoodImage();
 
@@ -186,4 +202,7 @@ private:
 
 	//当前所有提前创建的page
 	std::map<int, CBasePageUI*> m_pages;
+
+	//是否正在设置快捷键
+	bool m_IsKuaijiejian;
 };