Przeglądaj źródła

增加完成后窗口自动关闭

张洋 6 lat temu
rodzic
commit
13970652fb

+ 1 - 1
bin/Win32/Debug/zhipuzi_pay_plugin/skin/shoukuan_wnd.xml

@@ -56,7 +56,7 @@
 			
 			<Label height="32" padding="0,10,0,10" name="shoukuan_paying_status" text="请求支付中..." font="2" textcolor="0xFF3CB371" align="center"></Label>
 			
-			<Label height="60" padding="20,30,20,0" name="shouyin_paying_attention" text="如果用户没有支付成功,则请确认客户不再进行支付时再关闭此窗口,按【Esc】取消本次支付并关闭窗口" font="2" textcolor="0xFF808080" multiline="true" align="center" />
+			<Label height="60" padding="20,30,20,0" name="shouyin_paying_attention" text="如果用户没有支付成功,则请确认客户不再进行支付时再关闭此窗口,按【Esc】取消本次支付" font="2" textcolor="0xFF808080" multiline="true" align="center" />
 		</VerticalLayout>
 		
 		<VerticalLayout name="shoukuan_pay_success_layout" visible="false">

+ 73 - 2
zhipuzi_pay_plugin/wnd/CShoukuanWnd.cpp

@@ -7,6 +7,8 @@
 
 #include "../helper/CSpeech.h"
 
+#define WM_TIMER_WND_CLOSE 200001
+
 void CShoukuanWnd::Init()
 {
 	//CSpeech::MSSSpeak(L"欢迎使用智铺子收银插件!");
@@ -56,6 +58,9 @@ LRESULT CShoukuanWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
 
 LRESULT CShoukuanWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
+	//销毁定时器
+	KillTimer(m_hWnd, WM_TIMER_WND_CLOSE);
+
 	bHandled = FALSE;
 	return 0;
 }
@@ -141,6 +146,59 @@ LRESULT CShoukuanWnd::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&
 	return 0;
 }
 
+LRESULT CShoukuanWnd::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	if (wParam != WM_TIMER_WND_CLOSE)
+	{
+		bHandled = FALSE;
+		return 0;
+	}
+
+	if (m_shoukuan_status == 0 || m_shoukuan_status == 1)
+	{
+	}
+	else if (m_shoukuan_status == 2)
+	{
+	}
+	else if (m_shoukuan_status == 3)
+	{
+		m_timer_now--;
+
+		if (m_timer_now > 0)
+		{
+			CLabelUI* attention = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_success_attention")));
+			std::wstring ws_attention = L"按任意键关闭窗口," + to_wstring(m_timer_now) + L" 秒后自动关闭";
+			attention->SetText(ws_attention.c_str());
+		}
+		else
+		{
+			Close();
+		}
+	}
+	else if (m_shoukuan_status == 4)
+	{
+		m_timer_now--;
+
+		if (m_timer_now > 0)
+		{
+			CLabelUI* pFailMessage = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_fail_attention")));
+
+			std::wstring ws_fail_message = L"失败信息:" + CLewaimaiString::UTF8ToUnicode(m_fail_message) + L",按任意键关闭窗口,";
+			std::wstring ws_attention = ws_fail_message + to_wstring(m_timer_now) + L" 秒后自动关闭";
+
+			pFailMessage->SetText(ws_attention.c_str());
+		}
+		else
+		{
+			Close();
+		}
+	}
+
+	bHandled = TRUE;
+
+	return 0;
+}
+
 LRESULT CShoukuanWnd::OnShoukuanUpdateFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
 	UpdateFocus();
@@ -194,6 +252,9 @@ LRESULT CShoukuanWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 	case WM_SHOUKUAN_STATUS_FAIL:
 		lRes = OnShoukuanFail(uMsg, wParam, lParam, bHandled);
 		break;
+	case WM_TIMER:
+		lRes = OnTimer(uMsg, wParam, lParam, bHandled);
+		break;
 	default:
 		bHandled = FALSE;
 	}
@@ -354,6 +415,12 @@ LRESULT CShoukuanWnd::OnShoukuanSuccess(UINT uMsg, WPARAM wParam, LPARAM lParam,
 		zhifubao_logo->SetVisible(true);
 	}
 
+	CLabelUI* attention = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_success_attention")));
+	std::wstring ws_attention = L"按任意键关闭窗口," + to_wstring(m_timer_now) + L" 秒后自动关闭";
+	attention->SetText(ws_attention.c_str());
+
+	SetTimer(m_hWnd, WM_TIMER_WND_CLOSE, 1000, NULL);
+
 	SetFocus(m_hWnd);
 
 	bHandled = TRUE;
@@ -376,8 +443,12 @@ LRESULT CShoukuanWnd::OnShoukuanFail(UINT uMsg, WPARAM wParam, LPARAM lParam, BO
 
 	CLabelUI* pFailMessage = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_fail_attention")));
 
-	std::wstring ws_fail_message = L"失败信息:" + CLewaimaiString::UTF8ToUnicode(m_fail_message) + L",按任意键关闭窗口";;
-	pFailMessage->SetText(ws_fail_message.c_str());
+	std::wstring ws_fail_message = L"失败信息:" + CLewaimaiString::UTF8ToUnicode(m_fail_message) + L",按任意键关闭窗口,";
+	std::wstring ws_attention = ws_fail_message + to_wstring(m_timer_now) + L" 秒后自动关闭";
+
+	pFailMessage->SetText(ws_attention.c_str());
+
+	SetTimer(m_hWnd, WM_TIMER_WND_CLOSE, 1000, NULL);
 
 	SetFocus(m_hWnd);
 

+ 5 - 0
zhipuzi_pay_plugin/wnd/CShoukuanWnd.h

@@ -48,6 +48,8 @@ public:
 
 	LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
+	LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
 	LRESULT OnShoukuanUpdateFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
 	LRESULT OnShoukuanNeedPassword(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
@@ -95,5 +97,8 @@ public:
 	int m_shoukuan_status = 0;
 
 	std::string m_fail_message;
+
+	//´°¿Ú¹Ø±ÕµÄ¶¨Ê±Æ÷ʱ¼ä
+	int m_timer_now = 3;
 };