Browse Source

快捷键功能做好了

张洋 6 years ago
parent
commit
fae1358705

BIN
bin/Win32/Debug/zhipuzi_pay_plugin/zhipuzi_pay_plugin.exe


+ 3 - 0
zhipuzi_pay_plugin/helper/define.h

@@ -24,4 +24,7 @@
 #define WM_HOOK_MESSAGE 12222
 #define WM_WATCH_WND_UPDATE 12223
 
+//热键的定义
+#define WM_MYHOTKEY_SHOUKUAN 12224
+
 

+ 13 - 0
zhipuzi_pay_plugin/tool/CSetting.cpp

@@ -372,6 +372,19 @@ void CSetting::Init()
 		m_paramsMap[system_setting_jinezhuaqu_setting_ocr_bottom] = "0";
 	}
 
+	//快捷键相关的设置(收款默认CTRL+D)
+	std::string system_setting_kuaijiejian_shoukuan_mod = "system_setting_kuaijiejian_shoukuan_mod";
+	if (m_paramsMap.find(system_setting_kuaijiejian_shoukuan_mod) == m_paramsMap.end())
+	{
+		m_paramsMap[system_setting_kuaijiejian_shoukuan_mod] = "2";
+	}
+
+	std::string system_setting_kuaijiejian_shoukuan_vk = "system_setting_kuaijiejian_shoukuan_vk";
+	if (m_paramsMap.find(system_setting_kuaijiejian_shoukuan_vk) == m_paramsMap.end())
+	{
+		m_paramsMap[system_setting_kuaijiejian_shoukuan_vk] = "68";
+	}
+
     m_mutex.unlock();
 
     //设置好默认参数之后,将默认参数写回到数据库

+ 34 - 13
zhipuzi_pay_plugin/wnd/CSystemSettingWnd.cpp

@@ -218,6 +218,27 @@ void CSystemSettingWnd::Init()
 		find_wnd_type->SelectItem(1, false, false);
 		find_wnd_type->SetText(L"定位金额模式");
 	}
+
+	//初始化快捷键的展示
+	UINT shoukuan_mod = (UINT)atoi(CSetting::GetParam("system_setting_kuaijiejian_shoukuan_mod").c_str());
+	UINT shoukuan_vk = (UINT)atoi(CSetting::GetParam("system_setting_kuaijiejian_shoukuan_vk").c_str());
+
+	CDuiString shoukuan_info;
+	if (shoukuan_mod == 2)
+	{
+		shoukuan_info.Format(_T("CTRL + %c"), shoukuan_vk);
+	}
+	else if (shoukuan_mod == 1)
+	{
+		shoukuan_info.Format(_T("ALT + %c"), shoukuan_vk);
+	}
+	else if (shoukuan_mod == 4)
+	{
+		shoukuan_info.Format(_T("SHIFT + %c"), shoukuan_vk);
+	}
+
+	CButtonUI* jiesuan_edit = static_cast<CButtonUI*>(m_pm.FindControl(_T("kuaijiejian_setting_jiesuan_btn")));
+	jiesuan_edit->SetText(shoukuan_info);
 }
 
 LRESULT CSystemSettingWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
@@ -340,7 +361,6 @@ LRESULT CSystemSettingWnd::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BO
 				}
 
 				m_vk = wParam;
-
 				m_isSet = true;
 			}
 			else
@@ -383,7 +403,14 @@ LRESULT CSystemSettingWnd::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BO
 			else
 			{
 				//这里表示已经设置好了,等后面保存
+				if (wParam != VK_CONTROL && wParam != VK_MENU && wParam != VK_SHIFT)
+				{
+					//准备开始注册热键了
+					CSetting::SetParam("system_setting_kuaijiejian_shoukuan_mod", to_string(m_mod));
+					CSetting::SetParam("system_setting_kuaijiejian_shoukuan_vk", to_string(m_vk));
 
+					m_valueWnd->UpdateRegisterHotKey();
+				}
 			}
 
 			return 0;
@@ -424,6 +451,12 @@ LRESULT CSystemSettingWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam
 	case WM_SYSKEYDOWN:
 		lRes = OnKeyDown(uMsg, wParam, lParam, bHandled);
 		break;
+	case WM_KEYUP:
+		lRes = OnKeyDown(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_SYSKEYUP:
+		lRes = OnKeyDown(uMsg, wParam, lParam, bHandled);
+		break;
 	default:
 		bHandled = FALSE;
 	}
@@ -858,16 +891,4 @@ void CSystemSettingWnd::SetOcrWnd(RECT rect)
 		
 		ocr_value_edit->SetText(ws_ocr_result.c_str());
 	}	
-}
-
-CEditUI* CSystemSettingWnd::GetFocusEdit()
-{
-	CEditUI* jiesuan_edit = static_cast<CEditUI*>(m_pm.FindControl(_T("kuaijiejian_setting_jiesuan_edit")));
-
-	if (jiesuan_edit->IsFocused())
-	{
-		return jiesuan_edit;
-	}
-
-	return NULL;
 }

+ 0 - 2
zhipuzi_pay_plugin/wnd/CSystemSettingWnd.h

@@ -79,8 +79,6 @@ public:
 
 	void SetOcrWnd(RECT rect);
 
-	CEditUI* GetFocusEdit();
-
 private:
 	void FindValueWnd(std::wstring value);
 

+ 24 - 18
zhipuzi_pay_plugin/wnd/CValueWnd.cpp

@@ -27,9 +27,8 @@ void CValueWnd::Init()
 	//抢焦点
 	std::thread(&CValueWnd::TopMostWnd, this).detach();
 
-	//注册组合键
-	int nRet = RegisterHotKey(m_hWnd, 1, MOD_CONTROL, 'D');
-	int b = nRet;
+	//注册热键
+	UpdateRegisterHotKey();
 
     //添加托盘图标
     AddTrayIcon();
@@ -363,6 +362,8 @@ LRESULT CValueWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandl
  **/
 LRESULT CValueWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
+	UnregisterHotKey(m_hWnd, WM_MYHOTKEY_SHOUKUAN);
+
     bHandled = FALSE;
     return 0;
 }
@@ -436,12 +437,6 @@ LRESULT CValueWnd::OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&
 	return 0;
 }
 
-LRESULT CValueWnd::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
-	bHandled = FALSE;
-	return 0;
-}
-
 LRESULT CValueWnd::OnKexianUpdate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
     //如果当前不是串口模式,直接忽略
@@ -538,10 +533,6 @@ LRESULT CValueWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 		lRes = OnHotKey(uMsg, wParam, lParam, bHandled);
 		break;
 
-	case WM_KEYDOWN:
-  		lRes = OnKeyDown(uMsg, wParam, lParam, bHandled);
-		break;
-
     default:
         bHandled = FALSE;
     }
@@ -640,14 +631,16 @@ LRESULT CValueWnd::OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHa
 
 LRESULT CValueWnd::OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
-	UINT  fuModifiers = (UINT)LOWORD(lParam);    
-	UINT  uVirtKey = (UINT)HIWORD(lParam);  
+	UINT  fuModifiers = (UINT)LOWORD(lParam);
+	UINT  uVirtKey = (UINT)HIWORD(lParam);
 
 	//判断响应了什么热键   
-	if (MOD_CONTROL == fuModifiers && 'D' == uVirtKey)
+	if (wParam == WM_MYHOTKEY_SHOUKUAN)
 	{
-		//按了CTRL + D
-		ShowShoukuan();
+		if (m_is_show_setting == false)
+		{
+			ShowShoukuan();
+		}
 	}
 
 	bHandled = TRUE;
@@ -960,4 +953,17 @@ void CValueWnd::ConfirmOcrWnd(RECT rect)
 tesseract::TessBaseAPI& CValueWnd::GetTess()
 {
 	return m_tess;
+}
+
+bool CValueWnd::UpdateRegisterHotKey()
+{	
+	UINT shoukuan_mod = (UINT)atoi(CSetting::GetParam("system_setting_kuaijiejian_shoukuan_mod").c_str());
+	UINT shoukuan_vk = (UINT)atoi(CSetting::GetParam("system_setting_kuaijiejian_shoukuan_vk").c_str());
+
+	//先卸载旧的,再注册新的
+	UnregisterHotKey(m_hWnd, WM_MYHOTKEY_SHOUKUAN);
+
+	int nRet = RegisterHotKey(m_hWnd, WM_MYHOTKEY_SHOUKUAN, shoukuan_mod, shoukuan_vk);
+
+	return nRet;
 }

+ 2 - 2
zhipuzi_pay_plugin/wnd/CValueWnd.h

@@ -49,8 +49,6 @@ public:
 	LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
 	LRESULT OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-	
-	LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
 	LRESULT OnKexianUpdate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
@@ -98,6 +96,8 @@ public:
 	void ConfirmOcrWnd(RECT rect);
 
 	tesseract::TessBaseAPI& GetTess();
+
+	bool UpdateRegisterHotKey();
 private:
 	void UpdateKexian(const char* data, int length);