CMainWnd.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  1. #include "../pch/pch.h"
  2. #include "CMainWnd.h"
  3. #include "../control/ControlEx.h"
  4. #include "../control/CWaimaiOrderInfoUI.h"
  5. void CMainWnd::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 CMainWnd::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 CMainWnd::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. HandleSelectChangeMsg(msg);
  42. }
  43. else if(msg.sType == _T("itemclick"))
  44. {
  45. }
  46. else if(msg.sType == _T("itemactivate"))
  47. {
  48. }
  49. else if(msg.sType == _T("itemselect"))
  50. {
  51. if(msg.pSender->GetName() == _T("chatCombo"))
  52. {
  53. CEditUI* pChatEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("chatEdit")));
  54. if(pChatEdit)
  55. {
  56. pChatEdit->SetText(msg.pSender->GetText());
  57. }
  58. static_cast<CComboUI*>(msg.pSender)->SelectItem(-1);
  59. }
  60. }
  61. }
  62. void CMainWnd::HandleClickMsg(TNotifyUI& msg)
  63. {
  64. if(msg.pSender == m_pCloseBtn)
  65. {
  66. COptionUI* pControl = static_cast<COptionUI*>(m_pm.FindControl(_T("hallswitch")));
  67. if(pControl && pControl->IsSelected() == false)
  68. {
  69. CControlUI* pFadeControl = m_pm.FindControl(_T("fadeEffect"));
  70. if(pFadeControl)
  71. {
  72. pFadeControl->SetVisible(true);
  73. }
  74. }
  75. else
  76. {
  77. /*Close()*/PostQuitMessage(0); // 因为activex的原因,使用close可能会出现错误
  78. }
  79. return;
  80. }
  81. else if(msg.pSender == m_pMinBtn)
  82. {
  83. SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
  84. return;
  85. }
  86. else if(msg.pSender == m_pMaxBtn)
  87. {
  88. SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
  89. return;
  90. }
  91. else if(msg.pSender == m_pRestoreBtn)
  92. {
  93. SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0);
  94. return;
  95. }
  96. CDuiString name = msg.pSender->GetName();
  97. if(name == _T("quitbtn"))
  98. {
  99. /*Close()*/PostQuitMessage(0); // 因为activex的原因,使用close可能会出现错误
  100. }
  101. else if(name == _T("waimai_order_list_print"))
  102. {
  103. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
  104. std::string waimai_order_id = item->getOrderID();
  105. std::string waimai_order_no = item->getOrderNo();
  106. CWaimaiOrder order;
  107. order.InitData(waimai_order_id, waimai_order_no);
  108. CPosPrinter printer;
  109. printer.PrintWaimaiOrder(order);
  110. }
  111. else if(name == _T("waimai_order_list_confirme"))
  112. {
  113. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
  114. std::string waimai_order_id = item->getOrderID();
  115. CWaimaiOrder order;
  116. bool ret = order.ConfirmeOrder(waimai_order_id);
  117. if(ret)
  118. {
  119. //如果确认成功,将被确认的订单删除掉
  120. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  121. int index = orderlist->GetItemIndex(item);
  122. orderlist->RemoveAt(index);
  123. }
  124. }
  125. else if(name == _T("waimai_order_list_success"))
  126. {
  127. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
  128. std::string waimai_order_id = item->getOrderID();
  129. CWaimaiOrder order;
  130. bool ret = order.SuccessOrder(waimai_order_id);
  131. if(ret)
  132. {
  133. //如果确认成功,将被确认的订单删除掉
  134. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  135. int index = orderlist->GetItemIndex(item);
  136. orderlist->RemoveAt(index);
  137. }
  138. }
  139. else if(name == _T("waimai_order_list_fail"))
  140. {
  141. //外卖订单的打印
  142. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
  143. std::string waimai_order_id = item->getOrderID();
  144. CWaimaiOrder order;
  145. bool ret = order.FailOrder(waimai_order_id, "windows收银机测试");
  146. if(ret)
  147. {
  148. //如果设为失败成功,将被设为失败的订单删除掉
  149. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  150. int index = orderlist->GetItemIndex(item);
  151. orderlist->RemoveAt(index);
  152. }
  153. }
  154. else if(name == _T("waimai_order_list_agree"))
  155. {
  156. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
  157. std::string waimai_order_id = item->getOrderID();
  158. CWaimaiOrder order;
  159. bool ret = order.AgreeRefund(waimai_order_id);
  160. if(ret)
  161. {
  162. //同意退款之后,订单变为失败状态
  163. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  164. int index = orderlist->GetItemIndex(item);
  165. orderlist->RemoveAt(index);
  166. }
  167. }
  168. else if(name == _T("waimai_order_list_disagree"))
  169. {
  170. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
  171. std::string waimai_order_id = item->getOrderID();
  172. CWaimaiOrder order;
  173. bool ret = order.DisagreeRefund(waimai_order_id);
  174. if(ret)
  175. {
  176. //不同意退款,订单还是退款中,等待第三方客服处理
  177. //OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  178. //int index = orderlist->GetItemIndex(item);
  179. //orderlist->RemoveAt(index);
  180. }
  181. }
  182. else if(name == _T("waimai_order_list_info"))
  183. {
  184. CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
  185. std::string waimai_order_id = item->getOrderID();
  186. std::string waimai_order_no = item->getOrderNo();
  187. //请求服务器,获取订单数据
  188. CWaimaiOrder order;
  189. order.InitData(waimai_order_id, waimai_order_no);
  190. //刷新订单详情页数据
  191. CWaimaiOrderInfoUI* order_info_page = static_cast<CWaimaiOrderInfoUI*>(m_pm.FindControl(_T("waimaiorder_info_page")));
  192. order_info_page->SetDate(order);
  193. order_info_page->Refresh(order);
  194. //显示订单详情页的内容
  195. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  196. if(pControl && pControl->GetCurSel() != 1)
  197. {
  198. pControl->SelectItem(1);
  199. }
  200. }
  201. else if(name == _T("waimai_order_list_last"))
  202. {
  203. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  204. orderlist->LastPage();
  205. }
  206. else if(name == _T("waimai_order_list_next"))
  207. {
  208. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  209. orderlist->NextPage();
  210. }
  211. else if(name == _T("waimai_order_list_refresh"))
  212. {
  213. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  214. orderlist->Refresh();
  215. }
  216. else if(name == _T("waimai_order_info_page_return"))
  217. {
  218. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  219. if(pControl && pControl->GetCurSel() != 0)
  220. {
  221. pControl->SelectItem(0);
  222. }
  223. //刷新当前列表
  224. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  225. orderlist->Refresh();
  226. }
  227. else if(name == _T("waimai_order_info_page_print"))
  228. {
  229. CWaimaiOrderInfoUI* order_info_page = static_cast<CWaimaiOrderInfoUI*>(m_pm.FindControl(_T("waimaiorder_info_page")));
  230. CPosPrinter printer;
  231. printer.PrintWaimaiOrder(order_info_page->m_order);
  232. }
  233. else if (name == _T("waimai_order_info_page_confirme"))
  234. {
  235. CWaimaiOrderInfoUI* order_info_page = static_cast<CWaimaiOrderInfoUI*>(m_pm.FindControl(_T("waimaiorder_info_page")));
  236. std::string waimai_order_id = order_info_page->m_order.m_order_id;
  237. std::string waimai_order_no = order_info_page->m_order.m_order_no;
  238. CWaimaiOrder order;
  239. bool ret = order.ConfirmeOrder(waimai_order_id);
  240. if (ret)
  241. {
  242. //确认成功,这里怎么处理
  243. //请求服务器,获取订单数据
  244. CWaimaiOrder new_order;
  245. new_order.InitData(waimai_order_id, waimai_order_no);
  246. //刷新订单详情页数据
  247. order_info_page->SetDate(new_order);
  248. order_info_page->Refresh(new_order);
  249. }
  250. }
  251. else if(name == _T("waimai_order_info_page_success"))
  252. {
  253. CWaimaiOrderInfoUI* order_info_page = static_cast<CWaimaiOrderInfoUI*>(m_pm.FindControl(_T("waimaiorder_info_page")));
  254. std::string waimai_order_id = order_info_page->m_order.m_order_id;
  255. std::string waimai_order_no = order_info_page->m_order.m_order_no;
  256. CWaimaiOrder order;
  257. bool ret = order.SuccessOrder(waimai_order_id);
  258. if (ret)
  259. {
  260. //订单设为成功,这里怎么处理
  261. //请求服务器,获取订单数据
  262. CWaimaiOrder new_order;
  263. new_order.InitData(waimai_order_id, waimai_order_no);
  264. //刷新订单详情页数据
  265. order_info_page->SetDate(new_order);
  266. order_info_page->Refresh(new_order);
  267. }
  268. }
  269. else if(name == _T("waimai_order_info_page_fail"))
  270. {
  271. CWaimaiOrderInfoUI* order_info_page = static_cast<CWaimaiOrderInfoUI*>(m_pm.FindControl(_T("waimaiorder_info_page")));
  272. std::string waimai_order_id = order_info_page->m_order.m_order_id;
  273. std::string waimai_order_no = order_info_page->m_order.m_order_no;
  274. CWaimaiOrder order;
  275. bool ret = order.FailOrder(waimai_order_id, "Windwos收银机测试");
  276. if (ret)
  277. {
  278. //订单设为失败,这里怎么处理
  279. //请求服务器,获取订单数据
  280. CWaimaiOrder new_order;
  281. new_order.InitData(waimai_order_id, waimai_order_no);
  282. //刷新订单详情页数据
  283. order_info_page->SetDate(new_order);
  284. order_info_page->Refresh(new_order);
  285. }
  286. }
  287. else if(name == _T("waimai_order_info_page_agree"))
  288. {
  289. CWaimaiOrderInfoUI* order_info_page = static_cast<CWaimaiOrderInfoUI*>(m_pm.FindControl(_T("waimaiorder_info_page")));
  290. std::string waimai_order_id = order_info_page->m_order.m_order_id;
  291. std::string waimai_order_no = order_info_page->m_order.m_order_no;
  292. CWaimaiOrder order;
  293. bool ret = order.AgreeRefund(waimai_order_id);
  294. if (ret)
  295. {
  296. //订单设为成功,这里怎么处理
  297. //请求服务器,获取订单数据
  298. CWaimaiOrder new_order;
  299. new_order.InitData(waimai_order_id, waimai_order_no);
  300. //刷新订单详情页数据
  301. order_info_page->SetDate(new_order);
  302. order_info_page->Refresh(new_order);
  303. }
  304. }
  305. else if(name == _T("waimai_order_info_page_disagree"))
  306. {
  307. CWaimaiOrderInfoUI* order_info_page = static_cast<CWaimaiOrderInfoUI*>(m_pm.FindControl(_T("waimaiorder_info_page")));
  308. std::string waimai_order_id = order_info_page->m_order.m_order_id;
  309. std::string waimai_order_no = order_info_page->m_order.m_order_no;
  310. CWaimaiOrder order;
  311. bool ret = order.DisagreeRefund(waimai_order_id);
  312. if (ret)
  313. {
  314. //订单设为成功,这里怎么处理
  315. //请求服务器,获取订单数据
  316. CWaimaiOrder new_order;
  317. new_order.InitData(waimai_order_id, waimai_order_no);
  318. //刷新订单详情页数据
  319. order_info_page->SetDate(new_order);
  320. order_info_page->Refresh(new_order);
  321. }
  322. }
  323. }
  324. void CMainWnd::HandleSelectChangeMsg(TNotifyUI& msg)
  325. {
  326. CDuiString name = msg.pSender->GetName();
  327. //先判断主页面的tab
  328. if(name == _T("main_waimai"))
  329. {
  330. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  331. if(pControl && pControl->GetCurSel() != 0)
  332. {
  333. pControl->SelectItem(0);
  334. }
  335. }
  336. else if(name == _T("main_saomaxiadan"))
  337. {
  338. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  339. if(pControl && pControl->GetCurSel() != 2)
  340. {
  341. pControl->SelectItem(2);
  342. }
  343. }
  344. else if(name == _T("main_setting"))
  345. {
  346. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  347. if(pControl && pControl->GetCurSel() != 3)
  348. {
  349. pControl->SelectItem(3);
  350. }
  351. }
  352. else if(name == _T("main_web"))
  353. {
  354. CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch")));
  355. if(pControl && pControl->GetCurSel() != 4)
  356. {
  357. pControl->SelectItem(4);
  358. }
  359. }
  360. //判断外卖的tab
  361. 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_cancel_switch") || name == _T("waimai_refund_switch"))
  362. {
  363. OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
  364. //切换状态全部重新开始从第1页
  365. orderlist->SetPage(1);
  366. if(name == _T("waimai_open_switch"))
  367. {
  368. orderlist->SetStatus(1);
  369. }
  370. else if(name == _T("waimai_confirmed_switch"))
  371. {
  372. orderlist->SetStatus(2);
  373. }
  374. else if(name == _T("waimai_delivery_switch"))
  375. {
  376. orderlist->SetStatus(3);
  377. }
  378. else if(name == _T("waimai_success_switch"))
  379. {
  380. orderlist->SetStatus(4);
  381. }
  382. else if(name == _T("waimai_fail_switch"))
  383. {
  384. orderlist->SetStatus(5);
  385. }
  386. else if(name == _T("waimai_cancel_switch"))
  387. {
  388. orderlist->SetStatus(6);
  389. }
  390. else if(name == _T("waimai_refund_switch"))
  391. {
  392. orderlist->SetStatus(7);
  393. }
  394. orderlist->Refresh();
  395. }
  396. }
  397. LRESULT CMainWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
  398. {
  399. LRESULT lRes = 0;
  400. BOOL bHandled = TRUE;
  401. switch(uMsg)
  402. {
  403. case WM_CREATE:
  404. lRes = OnCreate(uMsg, wParam, lParam, bHandled);
  405. break;
  406. case WM_CLOSE:
  407. lRes = OnClose(uMsg, wParam, lParam, bHandled);
  408. break;
  409. case WM_DESTROY:
  410. lRes = OnDestroy(uMsg, wParam, lParam, bHandled);
  411. break;
  412. case WM_NCACTIVATE:
  413. lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
  414. break;
  415. case WM_NCCALCSIZE:
  416. lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
  417. break;
  418. case WM_NCPAINT:
  419. lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
  420. break;
  421. case WM_NCHITTEST:
  422. lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
  423. break;
  424. case WM_SIZE:
  425. lRes = OnSize(uMsg, wParam, lParam, bHandled);
  426. break;
  427. case WM_GETMINMAXINFO:
  428. lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled);
  429. break;
  430. case WM_SYSCOMMAND:
  431. lRes = OnSysCommand(uMsg, wParam, lParam, bHandled);
  432. break;
  433. default:
  434. bHandled = FALSE;
  435. }
  436. if(bHandled)
  437. {
  438. return lRes;
  439. }
  440. if(m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
  441. {
  442. return lRes;
  443. }
  444. return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
  445. }
  446. LRESULT CMainWnd::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  447. {
  448. // 有时会在收到WM_NCDESTROY后收到wParam为SC_CLOSE的WM_SYSCOMMAND
  449. if(wParam == SC_CLOSE)
  450. {
  451. ::PostQuitMessage(0L);
  452. bHandled = TRUE;
  453. return 0;
  454. }
  455. BOOL bZoomed = ::IsZoomed(*this);
  456. LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam);
  457. if(::IsZoomed(*this) != bZoomed)
  458. {
  459. if(!bZoomed)
  460. {
  461. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("maxbtn")));
  462. if(pControl)
  463. {
  464. pControl->SetVisible(false);
  465. }
  466. pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("restorebtn")));
  467. if(pControl)
  468. {
  469. pControl->SetVisible(true);
  470. }
  471. }
  472. else
  473. {
  474. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("maxbtn")));
  475. if(pControl)
  476. {
  477. pControl->SetVisible(true);
  478. }
  479. pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("restorebtn")));
  480. if(pControl)
  481. {
  482. pControl->SetVisible(false);
  483. }
  484. }
  485. }
  486. return lRes;
  487. }
  488. LRESULT CMainWnd::OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  489. {
  490. int primaryMonitorWidth = ::GetSystemMetrics(SM_CXSCREEN);
  491. int primaryMonitorHeight = ::GetSystemMetrics(SM_CYSCREEN);
  492. MONITORINFO oMonitor = {};
  493. oMonitor.cbSize = sizeof(oMonitor);
  494. ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor);
  495. CDuiRect rcWork = oMonitor.rcWork;
  496. rcWork.Offset(-oMonitor.rcMonitor.left, -oMonitor.rcMonitor.top);
  497. if(rcWork.right > primaryMonitorWidth)
  498. {
  499. rcWork.right = primaryMonitorWidth;
  500. }
  501. if(rcWork.bottom > primaryMonitorHeight)
  502. {
  503. rcWork.right = primaryMonitorHeight;
  504. }
  505. LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam;
  506. lpMMI->ptMaxPosition.x = rcWork.left;
  507. lpMMI->ptMaxPosition.y = rcWork.top;
  508. lpMMI->ptMaxSize.x = rcWork.right;
  509. lpMMI->ptMaxSize.y = rcWork.bottom;
  510. bHandled = FALSE;
  511. return 0;
  512. }
  513. LRESULT CMainWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  514. {
  515. SIZE szRoundCorner = m_pm.GetRoundCorner();
  516. if(!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
  517. {
  518. CDuiRect rcWnd;
  519. ::GetWindowRect(*this, &rcWnd);
  520. rcWnd.Offset(-rcWnd.left, -rcWnd.top);
  521. rcWnd.right++;
  522. rcWnd.bottom++;
  523. HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
  524. ::SetWindowRgn(*this, hRgn, TRUE);
  525. ::DeleteObject(hRgn);
  526. }
  527. bHandled = FALSE;
  528. return 0;
  529. }
  530. LRESULT CMainWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  531. {
  532. POINT pt;
  533. pt.x = GET_X_LPARAM(lParam);
  534. pt.y = GET_Y_LPARAM(lParam);
  535. ::ScreenToClient(*this, &pt);
  536. RECT rcClient;
  537. ::GetClientRect(*this, &rcClient);
  538. if(!::IsZoomed(*this))
  539. {
  540. RECT rcSizeBox = m_pm.GetSizeBox();
  541. if(pt.y < rcClient.top + rcSizeBox.top)
  542. {
  543. if(pt.x < rcClient.left + rcSizeBox.left)
  544. {
  545. return HTTOPLEFT;
  546. }
  547. if(pt.x > rcClient.right - rcSizeBox.right)
  548. {
  549. return HTTOPRIGHT;
  550. }
  551. return HTTOP;
  552. }
  553. else if(pt.y > rcClient.bottom - rcSizeBox.bottom)
  554. {
  555. if(pt.x < rcClient.left + rcSizeBox.left)
  556. {
  557. return HTBOTTOMLEFT;
  558. }
  559. if(pt.x > rcClient.right - rcSizeBox.right)
  560. {
  561. return HTBOTTOMRIGHT;
  562. }
  563. return HTBOTTOM;
  564. }
  565. if(pt.x < rcClient.left + rcSizeBox.left)
  566. {
  567. return HTLEFT;
  568. }
  569. if(pt.x > rcClient.right - rcSizeBox.right)
  570. {
  571. return HTRIGHT;
  572. }
  573. }
  574. RECT rcCaption = m_pm.GetCaptionRect();
  575. if(pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
  576. && pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
  577. {
  578. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
  579. if(pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0 &&
  580. _tcscmp(pControl->GetClass(), DUI_CTR_OPTION) != 0 &&
  581. _tcscmp(pControl->GetClass(), DUI_CTR_TEXT) != 0)
  582. {
  583. return HTCAPTION;
  584. }
  585. }
  586. return HTCLIENT;
  587. }