zhangyang 3 éve
szülő
commit
9193d831cf

+ 4 - 0
zhipuzi_pos_windows/tool/CAppEnv.cpp

@@ -6,6 +6,7 @@
 #include "../worker/CMessagePushWorker.h"
 #include "../worker/CCommonWorker.h"
 #include "../worker/CVoiceWorker.h"
+#include "CShuangpingTool.h"
 
 CAppEnv::CAppEnv()
 {
@@ -32,6 +33,9 @@ void CAppEnv::Start()
 
 	//启动通用任务
 	CCommonWorker::GetInstance()->Start();
+
+	//初始化副屏
+	CShuangpingTool::GetInstance()->Init();
 }
 
 void CAppEnv::Stop()

+ 19 - 2
zhipuzi_pos_windows/tool/CShuangpingTool.cpp

@@ -71,9 +71,14 @@ void CShuangpingTool::Init()
 
 			rect.right = rect.left + devMode.dmPelsWidth;
 			rect.bottom = rect.top + devMode.dmPelsHeight;
+
+			m_fuping_rect = rect;
 		}
 	}
+}
 
+void CShuangpingTool::InitWnd(HWND hwnd)
+{
 	//创建并初始化副屏窗口
 	m_pFuping = new CFupingWnd();
 	if (m_pFuping == NULL)
@@ -83,13 +88,25 @@ void CShuangpingTool::Init()
 		return;
 	}
 
-	m_pFuping->Create(NULL, _T("智铺子收银系统副屏"), UI_WNDSTYLE_DIALOG, 0, 0, 0, 0, 0, NULL);
+	m_pFuping->Create(hwnd, _T("智铺子收银系统副屏"), UI_WNDSTYLE_DIALOG, 0, 0, 0, 0, 0, NULL);
 	m_pFuping->SetIcon(IDI_ICON_DUILIB);
 
-	::MoveWindow(m_pFuping->GetHWND(), rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, true);
+	::MoveWindow(m_pFuping->GetHWND(), m_fuping_rect.left, m_fuping_rect.top, m_fuping_rect.right - m_fuping_rect.left, m_fuping_rect.bottom - m_fuping_rect.top, true);
 	m_pFuping->ShowWindow(true);
 }
 
+void CShuangpingTool::DestoryWnd()
+{
+	if (m_pFuping == NULL)
+	{
+		return;
+	}
+
+	m_pFuping->Stop();
+
+	m_pFuping = NULL;
+}
+
 void CShuangpingTool::UpdateShow(CDiandanOrder& order, double total_youhui, double total_price, double dabao_money)
 {
 	if (m_is_shuangping == false)

+ 7 - 1
zhipuzi_pos_windows/tool/CShuangpingTool.h

@@ -13,9 +13,15 @@ public:
 		return &instance;
 	}
 
-	//初始化副屏,对副屏情况进行判断(程序刚启动马上就执行)
+	//初始化副屏,对副屏情况进行判断(程序刚启动马上就执行),但是不创建副屏窗口
 	void Init();
 
+	//登录成功后,初始化副屏窗口
+	void InitWnd(HWND hwnd);
+
+	//退出登录,或者程序退出后,销毁副屏
+	void DestoryWnd();
+
 	//刷新副屏显示,在点单页面的商品或价格发生变化时调用,重新计算渲染副屏显示数据
 	void UpdateShow(CDiandanOrder& order, double total_youhui, double total_price, double dabao_money);
 

+ 14 - 4
zhipuzi_pos_windows/wnd/CFupingWnd.cpp

@@ -137,13 +137,15 @@ void CFupingWnd::Notify(TNotifyUI& msg)
 //刚启动程序初始化副屏窗口的时候执行,app生命周期只执行一次
 void CFupingWnd::Init()
 {
+	m_is_work = true;
+
 	//启动轮播图展示任务
 	std::thread(&CFupingWnd::HandleFupingImage, this).detach();
 }
 
 void CFupingWnd::HandleFupingImage()
 {
-	while (true)
+	while (m_is_work == true)
 	{
 		if (CShopinfo::GetInstance()->m_shop_name.size() == 0)
 		{
@@ -181,7 +183,7 @@ void CFupingWnd::HandleFupingImage()
 			//轮播图的图片还未下载好
 			CSystem::my_sleep(3);
 
-			//2秒后还没下载好,处理下一张
+			//3秒后还没下载好,处理下一张
 			m_curImageNum++;
 
 			continue;
@@ -191,14 +193,17 @@ void CFupingWnd::HandleFupingImage()
 		CControlUI* imageControl = static_cast<CControlUI*>(m_pm.FindControl(L"lunbo_image"));
 		imageControl->SetBkImage(image_path.c_str());
 
-		//等待2秒钟,换下一张
+		//等待3秒钟,换下一张
 		CSystem::my_sleep(3);
 
-		//2秒后还没下载好,处理下一张
+		//3秒轮播一次
 		m_curImageNum++;
 
 		continue;
 	}
+
+	//这个线程结束后,释放自己
+	delete this;
 }
 
 //刷新副屏显示
@@ -293,4 +298,9 @@ void CFupingWnd::UpdateShow(CDiandanOrder& order, double total_youhui, double to
 	//再刷新总价展示
 	CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->m_pm.FindControl(_T("diandan_page_totalprice")));
 	pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(total_price, 2))).c_str());
+}
+
+void CFupingWnd::Stop()
+{
+	m_is_work = false;
 }

+ 5 - 0
zhipuzi_pos_windows/wnd/CFupingWnd.h

@@ -61,6 +61,9 @@ public:
 	//窗口初始化的时候调用一次,用来处理副屏轮播图展示
 	void HandleFupingImage();
 
+	//停止刷新副屏的线程,程序退出
+	void Stop();
+
 	//刷新副屏显示
 	void UpdateShow(CDiandanOrder& order, double total_youhui, double total_price, double dabao_money);
 
@@ -69,5 +72,7 @@ public:
 
 private:
 	size_t m_curImageNum = 0;
+
+	bool m_is_work;
 };
 

+ 8 - 0
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -18,8 +18,13 @@
 
 #include "../tool/CSqlite3.h"
 
+#include "../tool/CShuangpingTool.h"
+
 void CMainWnd::Init()
 {
+	//初始化副屏
+	CShuangpingTool::GetInstance()->InitWnd(GetHWND());
+
 	//设置店铺名字
 	CLabelUI* pShopname = static_cast<CLabelUI*>(m_pm.FindControl(_T("main_shopname")));
 	pShopname->SetText(CLewaimaiString::UTF8ToUnicode(CShopinfo::GetInstance()->m_shop_name).c_str());
@@ -524,6 +529,9 @@ LRESULT CMainWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandle
 
 void CMainWnd::OnFinalMessage(HWND /*hWnd*/)
 {
+	//销毁副屏
+	CShuangpingTool::GetInstance()->DestoryWnd();
+
 	//执行一些销毁操作
 	this->End();
 

+ 0 - 4
zhipuzi_pos_windows/zhipuzi_pos_windows.cpp

@@ -1,7 +1,6 @@
 #include "pch/pch.h"
 
 #include "wnd/CLoginWnd.h"
-#include "tool/CShuangpingTool.h"
 
 #include <curl/curl.h>
 
@@ -89,9 +88,6 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
 
 	pLogin->ShowWindow(true);
 
-	//初始化副屏
-	CShuangpingTool::GetInstance()->Init();
-
     CPaintManagerUI::MessageLoop();
 
     ::CoUninitialize();