CGameFrameWnd.cpp 14 KB

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