CGameFrameWnd.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. #include "../pch/pch.h"
  2. #include "CGameFrameWnd.h"
  3. #include "ControlEx.h"
  4. void CGameFrameWnd::Init()
  5. {
  6. m_pCloseBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("closebtn")));
  7. m_pMaxBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("maxbtn")));
  8. m_pRestoreBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("restorebtn")));
  9. m_pMinBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("minbtn")));
  10. }
  11. LRESULT CGameFrameWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  12. {
  13. LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
  14. styleValue &= ~WS_CAPTION;
  15. ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
  16. m_pm.Init(m_hWnd);
  17. CDialogBuilder builder;
  18. CDialogBuilderCallbackEx cb;
  19. CControlUI* pRoot = builder.Create(_T("main.xml"), (UINT)0, &cb, &m_pm);
  20. ASSERT(pRoot && "Failed to parse XML");
  21. m_pm.AttachDialog(pRoot);
  22. m_pm.AddNotifier(this);
  23. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  24. orderlist->Refresh();
  25. Init();
  26. return 0;
  27. }
  28. void CGameFrameWnd::Notify(TNotifyUI& msg)
  29. {
  30. if(msg.sType == _T("windowinit"))
  31. {
  32. OnPrepare();
  33. }
  34. else if(msg.sType == _T("click"))
  35. {
  36. HandleClickMsg(msg);
  37. }
  38. else if(msg.sType == _T("selectchanged"))
  39. {
  40. CDuiString name = msg.pSender->GetName();
  41. //先判断主页面的tab
  42. if (name == _T("main_waimai"))
  43. {
  44. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  45. if (pControl && pControl->GetCurSel() != 0)
  46. {
  47. pControl->SelectItem(0);
  48. }
  49. }
  50. else if (name == _T("main_saomaxiadan"))
  51. {
  52. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  53. if (pControl && pControl->GetCurSel() != 2)
  54. {
  55. pControl->SelectItem(2);
  56. }
  57. }
  58. else if (name == _T("main_setting"))
  59. {
  60. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  61. if (pControl && pControl->GetCurSel() != 3)
  62. {
  63. pControl->SelectItem(3);
  64. }
  65. }
  66. else if (name == _T("main_web"))
  67. {
  68. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  69. if (pControl && pControl->GetCurSel() != 4)
  70. {
  71. pControl->SelectItem(4);
  72. }
  73. }
  74. //判断外卖的tab
  75. else if(name == _T("waimai_open_switch") || name == _T("waimai_confirmed_switch") || name == _T("waimai_delivery_switch") || name == _T("waimai_success_switch") || name == _T("waimai_fail_switch") || name == _T("waimai_refund_switch"))
  76. {
  77. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  78. //切换状态全部重新开始从第1页
  79. orderlist->SetPage(1);
  80. if (name == _T("waimai_open_switch"))
  81. {
  82. orderlist->SetStatus(1);
  83. }
  84. else if (name == _T("waimai_confirmed_switch"))
  85. {
  86. orderlist->SetStatus(2);
  87. }
  88. else if (name == _T("waimai_delivery_switch"))
  89. {
  90. orderlist->SetStatus(3);
  91. }
  92. else if (name == _T("waimai_success_switch"))
  93. {
  94. orderlist->SetStatus(4);
  95. }
  96. else if (name == _T("waimai_fail_switch"))
  97. {
  98. orderlist->SetStatus(5);
  99. }
  100. else if (name == _T("waimai_refund_switch"))
  101. {
  102. orderlist->SetStatus(6);
  103. }
  104. orderlist->Refresh();
  105. }
  106. }
  107. else if(msg.sType == _T("itemclick"))
  108. {
  109. }
  110. else if(msg.sType == _T("itemactivate"))
  111. {
  112. }
  113. else if(msg.sType == _T("itemselect"))
  114. {
  115. if(msg.pSender->GetName() == _T("chatCombo"))
  116. {
  117. CEditUI* pChatEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("chatEdit")));
  118. if(pChatEdit)
  119. {
  120. pChatEdit->SetText(msg.pSender->GetText());
  121. }
  122. static_cast<CComboUI*>(msg.pSender)->SelectItem(-1);
  123. }
  124. }
  125. }
  126. void CGameFrameWnd::HandleClickMsg(TNotifyUI& msg)
  127. {
  128. if (msg.pSender == m_pCloseBtn)
  129. {
  130. COptionUI* pControl = static_cast<COptionUI*>(m_pm.FindControl(_T("hallswitch")));
  131. if (pControl && pControl->IsSelected() == false)
  132. {
  133. CControlUI* pFadeControl = m_pm.FindControl(_T("fadeEffect"));
  134. if (pFadeControl)
  135. {
  136. pFadeControl->SetVisible(true);
  137. }
  138. }
  139. else
  140. {
  141. /*Close()*/PostQuitMessage(0); // 因为activex的原因,使用close可能会出现错误
  142. }
  143. return;
  144. }
  145. else if (msg.pSender == m_pMinBtn)
  146. {
  147. SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
  148. return;
  149. }
  150. else if (msg.pSender == m_pMaxBtn)
  151. {
  152. SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
  153. return;
  154. }
  155. else if (msg.pSender == m_pRestoreBtn)
  156. {
  157. SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0);
  158. return;
  159. }
  160. CDuiString name = msg.pSender->GetName();
  161. if (name == _T("quitbtn"))
  162. {
  163. /*Close()*/PostQuitMessage(0); // 因为activex的原因,使用close可能会出现错误
  164. }
  165. else if (name == _T("waimai_order_list_print"))
  166. {
  167. //外卖订单的打印
  168. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent());
  169. std::string waimai_order_id = item->getOrderID();
  170. std::string waimai_order_no = item->getOrderNo();
  171. CWaimaiOrder order;
  172. order.InitData(waimai_order_id, waimai_order_no);
  173. CPosPrinter printer;
  174. printer.PrintWaimaiOrder(order);
  175. }
  176. else if (name == _T("waimai_order_list_confirme"))
  177. {
  178. //外卖订单的打印
  179. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent());
  180. std::string waimai_order_id = item->getOrderID();
  181. CWaimaiOrder order;
  182. bool ret = order.ConfirmeOrder(waimai_order_id);
  183. if (ret)
  184. {
  185. //如果确认成功,将被确认的订单删除掉
  186. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  187. int index = orderlist->GetItemIndex(item);
  188. orderlist->RemoveAt(index);
  189. }
  190. }
  191. else if (name == _T("waimai_order_list_fail"))
  192. {
  193. //外卖订单的打印
  194. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent());
  195. std::string waimai_order_id = item->getOrderID();
  196. CWaimaiOrder order;
  197. bool ret = order.FailOrder(waimai_order_id, "windows收银机测试");
  198. if (ret)
  199. {
  200. //如果设为失败成功,将被设为失败的订单删除掉
  201. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  202. int index = orderlist->GetItemIndex(item);
  203. orderlist->RemoveAt(index);
  204. }
  205. }
  206. else if (name == _T("waimai_order_list_info"))
  207. {
  208. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  209. if (pControl && pControl->GetCurSel() != 1)
  210. {
  211. pControl->SelectItem(1);
  212. }
  213. }
  214. else if (name == _T("waimai_order_list_last"))
  215. {
  216. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  217. orderlist->LastPage();
  218. }
  219. else if (name == _T("waimai_order_list_next"))
  220. {
  221. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  222. orderlist->NextPage();
  223. }
  224. else if (name == _T("waimai_order_list_refresh"))
  225. {
  226. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  227. orderlist->Refresh();
  228. }
  229. }
  230. LRESULT CGameFrameWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
  231. {
  232. LRESULT lRes = 0;
  233. BOOL bHandled = TRUE;
  234. switch(uMsg)
  235. {
  236. case WM_CREATE:
  237. lRes = OnCreate(uMsg, wParam, lParam, bHandled);
  238. break;
  239. case WM_CLOSE:
  240. lRes = OnClose(uMsg, wParam, lParam, bHandled);
  241. break;
  242. case WM_DESTROY:
  243. lRes = OnDestroy(uMsg, wParam, lParam, bHandled);
  244. break;
  245. case WM_NCACTIVATE:
  246. lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
  247. break;
  248. case WM_NCCALCSIZE:
  249. lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
  250. break;
  251. case WM_NCPAINT:
  252. lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
  253. break;
  254. case WM_NCHITTEST:
  255. lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
  256. break;
  257. case WM_SIZE:
  258. lRes = OnSize(uMsg, wParam, lParam, bHandled);
  259. break;
  260. case WM_GETMINMAXINFO:
  261. lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled);
  262. break;
  263. case WM_SYSCOMMAND:
  264. lRes = OnSysCommand(uMsg, wParam, lParam, bHandled);
  265. break;
  266. default:
  267. bHandled = FALSE;
  268. }
  269. if(bHandled)
  270. {
  271. return lRes;
  272. }
  273. if(m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
  274. {
  275. return lRes;
  276. }
  277. return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
  278. }
  279. LRESULT CGameFrameWnd::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  280. {
  281. // 有时会在收到WM_NCDESTROY后收到wParam为SC_CLOSE的WM_SYSCOMMAND
  282. if(wParam == SC_CLOSE)
  283. {
  284. ::PostQuitMessage(0L);
  285. bHandled = TRUE;
  286. return 0;
  287. }
  288. BOOL bZoomed = ::IsZoomed(*this);
  289. LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam);
  290. if(::IsZoomed(*this) != bZoomed)
  291. {
  292. if(!bZoomed)
  293. {
  294. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("maxbtn")));
  295. if(pControl)
  296. {
  297. pControl->SetVisible(false);
  298. }
  299. pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("restorebtn")));
  300. if(pControl)
  301. {
  302. pControl->SetVisible(true);
  303. }
  304. }
  305. else
  306. {
  307. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("maxbtn")));
  308. if(pControl)
  309. {
  310. pControl->SetVisible(true);
  311. }
  312. pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("restorebtn")));
  313. if(pControl)
  314. {
  315. pControl->SetVisible(false);
  316. }
  317. }
  318. }
  319. return lRes;
  320. }
  321. LRESULT CGameFrameWnd::OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  322. {
  323. int primaryMonitorWidth = ::GetSystemMetrics(SM_CXSCREEN);
  324. int primaryMonitorHeight = ::GetSystemMetrics(SM_CYSCREEN);
  325. MONITORINFO oMonitor = {};
  326. oMonitor.cbSize = sizeof(oMonitor);
  327. ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor);
  328. CDuiRect rcWork = oMonitor.rcWork;
  329. rcWork.Offset(-oMonitor.rcMonitor.left, -oMonitor.rcMonitor.top);
  330. if(rcWork.right > primaryMonitorWidth)
  331. {
  332. rcWork.right = primaryMonitorWidth;
  333. }
  334. if(rcWork.bottom > primaryMonitorHeight)
  335. {
  336. rcWork.right = primaryMonitorHeight;
  337. }
  338. LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam;
  339. lpMMI->ptMaxPosition.x = rcWork.left;
  340. lpMMI->ptMaxPosition.y = rcWork.top;
  341. lpMMI->ptMaxSize.x = rcWork.right;
  342. lpMMI->ptMaxSize.y = rcWork.bottom;
  343. bHandled = FALSE;
  344. return 0;
  345. }
  346. LRESULT CGameFrameWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  347. {
  348. SIZE szRoundCorner = m_pm.GetRoundCorner();
  349. if(!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
  350. {
  351. CDuiRect rcWnd;
  352. ::GetWindowRect(*this, &rcWnd);
  353. rcWnd.Offset(-rcWnd.left, -rcWnd.top);
  354. rcWnd.right++;
  355. rcWnd.bottom++;
  356. HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
  357. ::SetWindowRgn(*this, hRgn, TRUE);
  358. ::DeleteObject(hRgn);
  359. }
  360. bHandled = FALSE;
  361. return 0;
  362. }
  363. LRESULT CGameFrameWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  364. {
  365. POINT pt;
  366. pt.x = GET_X_LPARAM(lParam);
  367. pt.y = GET_Y_LPARAM(lParam);
  368. ::ScreenToClient(*this, &pt);
  369. RECT rcClient;
  370. ::GetClientRect(*this, &rcClient);
  371. if(!::IsZoomed(*this))
  372. {
  373. RECT rcSizeBox = m_pm.GetSizeBox();
  374. if(pt.y < rcClient.top + rcSizeBox.top)
  375. {
  376. if(pt.x < rcClient.left + rcSizeBox.left)
  377. {
  378. return HTTOPLEFT;
  379. }
  380. if(pt.x > rcClient.right - rcSizeBox.right)
  381. {
  382. return HTTOPRIGHT;
  383. }
  384. return HTTOP;
  385. }
  386. else if(pt.y > rcClient.bottom - rcSizeBox.bottom)
  387. {
  388. if(pt.x < rcClient.left + rcSizeBox.left)
  389. {
  390. return HTBOTTOMLEFT;
  391. }
  392. if(pt.x > rcClient.right - rcSizeBox.right)
  393. {
  394. return HTBOTTOMRIGHT;
  395. }
  396. return HTBOTTOM;
  397. }
  398. if(pt.x < rcClient.left + rcSizeBox.left)
  399. {
  400. return HTLEFT;
  401. }
  402. if(pt.x > rcClient.right - rcSizeBox.right)
  403. {
  404. return HTRIGHT;
  405. }
  406. }
  407. RECT rcCaption = m_pm.GetCaptionRect();
  408. if(pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
  409. && pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
  410. {
  411. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
  412. if(pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0 &&
  413. _tcscmp(pControl->GetClass(), DUI_CTR_OPTION) != 0 &&
  414. _tcscmp(pControl->GetClass(), DUI_CTR_TEXT) != 0)
  415. {
  416. return HTCAPTION;
  417. }
  418. }
  419. return HTCLIENT;
  420. }