CFulikaShoukuanWnd.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305
  1. #include "../pch/pch.h"
  2. #include "CFulikaShoukuanWnd.h"
  3. #include "CMessageboxWnd.h"
  4. #include "../helper/CSpeech.h"
  5. #include "../helper/MD5.h"
  6. #define WM_TIMER_WND_CLOSE 200001
  7. void CFulikaShoukuanWnd::Init()
  8. {
  9. //::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
  10. }
  11. void CFulikaShoukuanWnd::Notify(TNotifyUI& msg)
  12. {
  13. DuiLib::CDuiString senderName = msg.pSender->GetName();
  14. if (msg.sType == _T("click"))
  15. {
  16. if (msg.pSender->GetName() == _T("closebtn"))
  17. {
  18. StartClose();
  19. }
  20. else if (msg.pSender->GetName() == _T("shoukuanBtn"))
  21. {
  22. StartShoukuan();
  23. }
  24. else if (msg.pSender->GetName() == L"shoukuan_btn_saomazhifu")
  25. {
  26. CHorizontalLayoutUI* pFukuanmaLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("fukuan_input_fukuanma_layout")));
  27. pFukuanmaLayout->SetVisible(true);
  28. CHorizontalLayoutUI* pShoujihaoLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("fukuan_input_shoujihao_layout")));
  29. pShoujihaoLayout->SetVisible(false);
  30. CButtonUI* pFukuanmaBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("shoukuan_btn_saomazhifu")));
  31. pFukuanmaBtn->SetTextColor(0xFF43A947);
  32. CButtonUI* pShoujihaoBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("shoukuan_btn_shoujihao")));
  33. pShoujihaoBtn->SetTextColor(0xFF555555);
  34. CControlUI* pFukuanmaLine = static_cast<CControlUI*>(m_pm.FindControl(_T("shoukuan_btn_saomazhifu_line")));
  35. pFukuanmaLine->SetVisible(true);
  36. CControlUI* pShoujihaoLine = static_cast<CControlUI*>(m_pm.FindControl(_T("shoukuan_btn_shoujihao_line")));
  37. pShoujihaoLine->SetVisible(false);
  38. m_shoukuanModel = 1;
  39. }
  40. else if (msg.pSender->GetName() == L"shoukuan_btn_shoujihao")
  41. {
  42. CHorizontalLayoutUI* pFukuanmaLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("fukuan_input_fukuanma_layout")));
  43. pFukuanmaLayout->SetVisible(false);
  44. CHorizontalLayoutUI* pShoujihaoLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("fukuan_input_shoujihao_layout")));
  45. pShoujihaoLayout->SetVisible(true);
  46. CButtonUI* pFukuanmaBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("shoukuan_btn_saomazhifu")));
  47. pFukuanmaBtn->SetTextColor(0xFF555555);
  48. CButtonUI* pShoujihaoBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("shoukuan_btn_shoujihao")));
  49. pShoujihaoBtn->SetTextColor(0xFF43A947);
  50. CControlUI* pFukuanmaLine = static_cast<CControlUI*>(m_pm.FindControl(_T("shoukuan_btn_saomazhifu_line")));
  51. pFukuanmaLine->SetVisible(false);
  52. CControlUI* pShoujihaoLine = static_cast<CControlUI*>(m_pm.FindControl(_T("shoukuan_btn_shoujihao_line")));
  53. pShoujihaoLine->SetVisible(true);
  54. m_shoukuanModel = 2;
  55. m_pm.SetNextTabControl(false);
  56. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  57. pShoujihao->SetFocus();
  58. }
  59. else if (senderName == L"jianpan_1")
  60. {
  61. CEditUI* curEdit;
  62. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  63. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  64. if (m_inputType == 1)
  65. {
  66. curEdit = pShoujihao;
  67. }
  68. else
  69. {
  70. curEdit = pPassword;
  71. }
  72. std::wstring wsReason = curEdit->GetText();
  73. wsReason += L"1";
  74. curEdit->SetText(wsReason.c_str());
  75. curEdit->SetFocus();
  76. }
  77. else if (senderName == L"jianpan_2")
  78. {
  79. CEditUI* curEdit;
  80. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  81. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  82. if (m_inputType == 1)
  83. {
  84. curEdit = pShoujihao;
  85. }
  86. else
  87. {
  88. curEdit = pPassword;
  89. }
  90. std::wstring wsReason = curEdit->GetText();
  91. wsReason += L"2";
  92. curEdit->SetText(wsReason.c_str());
  93. curEdit->SetFocus();
  94. }
  95. else if (senderName == L"jianpan_3")
  96. {
  97. CEditUI* curEdit;
  98. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  99. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  100. if (m_inputType == 1)
  101. {
  102. curEdit = pShoujihao;
  103. }
  104. else
  105. {
  106. curEdit = pPassword;
  107. }
  108. std::wstring wsReason = curEdit->GetText();
  109. wsReason += L"3";
  110. curEdit->SetText(wsReason.c_str());
  111. curEdit->SetFocus();
  112. }
  113. else if (senderName == L"jianpan_4")
  114. {
  115. CEditUI* curEdit;
  116. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  117. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  118. if (m_inputType == 1)
  119. {
  120. curEdit = pShoujihao;
  121. }
  122. else
  123. {
  124. curEdit = pPassword;
  125. }
  126. std::wstring wsReason = curEdit->GetText();
  127. wsReason += L"4";
  128. curEdit->SetText(wsReason.c_str());
  129. curEdit->SetFocus();
  130. }
  131. else if (senderName == L"jianpan_5")
  132. {
  133. CEditUI* curEdit;
  134. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  135. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  136. if (m_inputType == 1)
  137. {
  138. curEdit = pShoujihao;
  139. }
  140. else
  141. {
  142. curEdit = pPassword;
  143. }
  144. std::wstring wsReason = curEdit->GetText();
  145. wsReason += L"5";
  146. curEdit->SetText(wsReason.c_str());
  147. curEdit->SetFocus();
  148. }
  149. else if (senderName == L"jianpan_6")
  150. {
  151. CEditUI* curEdit;
  152. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  153. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  154. if (m_inputType == 1)
  155. {
  156. curEdit = pShoujihao;
  157. }
  158. else
  159. {
  160. curEdit = pPassword;
  161. }
  162. std::wstring wsReason = curEdit->GetText();
  163. wsReason += L"6";
  164. curEdit->SetText(wsReason.c_str());
  165. curEdit->SetFocus();
  166. }
  167. else if (senderName == L"jianpan_7")
  168. {
  169. CEditUI* curEdit;
  170. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  171. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  172. if (m_inputType == 1)
  173. {
  174. curEdit = pShoujihao;
  175. }
  176. else
  177. {
  178. curEdit = pPassword;
  179. }
  180. std::wstring wsReason = curEdit->GetText();
  181. wsReason += L"7";
  182. curEdit->SetText(wsReason.c_str());
  183. curEdit->SetFocus();
  184. }
  185. else if (senderName == L"jianpan_8")
  186. {
  187. CEditUI* curEdit;
  188. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  189. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  190. if (m_inputType == 1)
  191. {
  192. curEdit = pShoujihao;
  193. }
  194. else
  195. {
  196. curEdit = pPassword;
  197. }
  198. std::wstring wsReason = curEdit->GetText();
  199. wsReason += L"8";
  200. curEdit->SetText(wsReason.c_str());
  201. curEdit->SetFocus();
  202. }
  203. else if (senderName == L"jianpan_9")
  204. {
  205. CEditUI* curEdit;
  206. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  207. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  208. if (m_inputType == 1)
  209. {
  210. curEdit = pShoujihao;
  211. }
  212. else
  213. {
  214. curEdit = pPassword;
  215. }
  216. std::wstring wsReason = curEdit->GetText();
  217. wsReason += L"9";
  218. curEdit->SetText(wsReason.c_str());
  219. curEdit->SetFocus();
  220. }
  221. else if (senderName == L"jianpan_0")
  222. {
  223. CEditUI* curEdit;
  224. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  225. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  226. if (m_inputType == 1)
  227. {
  228. curEdit = pShoujihao;
  229. }
  230. else
  231. {
  232. curEdit = pPassword;
  233. }
  234. std::wstring wsReason = curEdit->GetText();
  235. wsReason += L"0";
  236. curEdit->SetText(wsReason.c_str());
  237. curEdit->SetFocus();
  238. }
  239. else if (senderName == L"jianpan_x")
  240. {
  241. CEditUI* curEdit;
  242. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  243. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  244. if (m_inputType == 1)
  245. {
  246. curEdit = pShoujihao;
  247. }
  248. else
  249. {
  250. curEdit = pPassword;
  251. }
  252. std::wstring wsReason = curEdit->GetText();
  253. wsReason = wsReason.substr(0, wsReason.length() - 1);
  254. curEdit->SetText(wsReason.c_str());
  255. curEdit->SetFocus();
  256. }
  257. else if (senderName == L"jianpan_qingkong")
  258. {
  259. CEditUI* curEdit;
  260. CEditUI* pShoujihao = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  261. CEditUI* pPassword = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  262. if (m_inputType == 1)
  263. {
  264. curEdit = pShoujihao;
  265. }
  266. else
  267. {
  268. curEdit = pPassword;
  269. }
  270. std::wstring wsReason = curEdit->GetText();
  271. wsReason.clear();
  272. curEdit->SetText(wsReason.c_str());
  273. curEdit->SetFocus();
  274. }
  275. }
  276. else if (msg.sType == _T("textchanged"))
  277. {
  278. if (senderName == L"shoujihao_edit")
  279. {
  280. //只能输入数字,其他的全部删除
  281. CEditUI* m_pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  282. if (!m_pEdit->GetText().IsEmpty())
  283. {
  284. std::wstring ws_Value = m_pEdit->GetText();
  285. std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
  286. for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
  287. {
  288. unsigned char tmp = strValue.at(nIndex);
  289. if (tmp > 57 || tmp < 48)
  290. {
  291. //ASCII码不是数字的都过滤掉
  292. strValue = strValue.substr(0, nIndex);
  293. m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
  294. m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
  295. break;
  296. }
  297. }
  298. }
  299. }
  300. if (senderName == L"password_edit")
  301. {
  302. //只能输入数字,其他的全部删除
  303. CEditUI* m_pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  304. if (!m_pEdit->GetText().IsEmpty())
  305. {
  306. std::wstring ws_Value = m_pEdit->GetText();
  307. std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
  308. for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
  309. {
  310. unsigned char tmp = strValue.at(nIndex);
  311. if (tmp > 57 || tmp < 48)
  312. {
  313. //ASCII码不是数字的都过滤掉
  314. strValue = strValue.substr(0, nIndex);
  315. m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
  316. m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
  317. break;
  318. }
  319. }
  320. }
  321. }
  322. }
  323. else if (msg.sType == _T("setfocus"))
  324. {
  325. if (senderName == L"shoujihao_edit")
  326. {
  327. m_inputType = 1;
  328. }
  329. else if (senderName == L"password_edit")
  330. {
  331. m_inputType = 2;
  332. }
  333. }
  334. }
  335. LRESULT CFulikaShoukuanWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  336. {
  337. LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
  338. styleValue &= ~WS_CAPTION;
  339. ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
  340. // 把自己的窗口句柄与窗口绘制管理器挂接在一起
  341. m_pm.Init(m_hWnd);
  342. m_pm.AddPreMessageFilter(this);
  343. CDialogBuilder builder;
  344. CControlUI* pRoot = builder.Create(_T("fulika_shoukuan_wnd.xml"), (UINT)0, NULL, &m_pm);
  345. ASSERT(pRoot && "Failed to parse XML");
  346. // 把这些控件绘制到本窗口上
  347. m_pm.AttachDialog(pRoot);
  348. // 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
  349. m_pm.AddNotifier(this);
  350. Init();
  351. return 0;
  352. }
  353. LRESULT CFulikaShoukuanWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  354. {
  355. //销毁定时器
  356. KillTimer(m_hWnd, WM_TIMER_WND_CLOSE);
  357. bHandled = FALSE;
  358. return 0;
  359. }
  360. /*
  361. *这个是窗口被销毁的时候调用的
  362. **/
  363. LRESULT CFulikaShoukuanWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  364. {
  365. bHandled = FALSE;
  366. return 0;
  367. }
  368. LRESULT CFulikaShoukuanWnd::OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  369. {
  370. if (::IsIconic(*this))
  371. {
  372. bHandled = FALSE;
  373. }
  374. return (wParam == 0) ? TRUE : FALSE;
  375. }
  376. LRESULT CFulikaShoukuanWnd::OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  377. {
  378. return 0;
  379. }
  380. LRESULT CFulikaShoukuanWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  381. {
  382. return 0;
  383. }
  384. LRESULT CFulikaShoukuanWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  385. {
  386. POINT pt;
  387. pt.x = GET_X_LPARAM(lParam);
  388. pt.y = GET_Y_LPARAM(lParam);
  389. ::ScreenToClient(*this, &pt);
  390. RECT rcClient;
  391. ::GetClientRect(*this, &rcClient);
  392. RECT rcCaption = m_pm.GetCaptionRect();
  393. if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
  394. && pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
  395. {
  396. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
  397. if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
  398. {
  399. return HTCAPTION;
  400. }
  401. }
  402. return HTCLIENT;
  403. }
  404. LRESULT CFulikaShoukuanWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  405. {
  406. SIZE szRoundCorner = m_pm.GetRoundCorner();
  407. if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
  408. {
  409. CDuiRect rcWnd;
  410. ::GetWindowRect(*this, &rcWnd);
  411. rcWnd.Offset(-rcWnd.left, -rcWnd.top);
  412. rcWnd.right++;
  413. rcWnd.bottom++;
  414. HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
  415. ::SetWindowRgn(*this, hRgn, TRUE);
  416. ::DeleteObject(hRgn);
  417. }
  418. bHandled = FALSE;
  419. return 0;
  420. }
  421. LRESULT CFulikaShoukuanWnd::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  422. {
  423. bHandled = TRUE;
  424. return 0;
  425. }
  426. LRESULT CFulikaShoukuanWnd::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  427. {
  428. if (wParam != WM_TIMER_WND_CLOSE)
  429. {
  430. bHandled = FALSE;
  431. return 0;
  432. }
  433. if (m_shoukuan_status == 0 || m_shoukuan_status == 1)
  434. {
  435. }
  436. else if (m_shoukuan_status == 2)
  437. {
  438. }
  439. else if (m_shoukuan_status == 3)
  440. {
  441. m_timer_now--;
  442. if (m_timer_now > 0)
  443. {
  444. CLabelUI* attention = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_success_attention")));
  445. std::wstring ws_attention = L"按任意键关闭窗口," + std::to_wstring(m_timer_now) + L" 秒后自动关闭";
  446. attention->SetText(ws_attention.c_str());
  447. }
  448. else
  449. {
  450. Close(IDOK);
  451. }
  452. }
  453. else if (m_shoukuan_status == 4)
  454. {
  455. m_timer_now--;
  456. if (m_timer_now > 0)
  457. {
  458. CLabelUI* pFailMessage = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_fail_attention")));
  459. std::wstring ws_fail_message = L"失败信息:" + m_fail_message + L",按任意键关闭窗口,";
  460. std::wstring ws_attention = ws_fail_message + std::to_wstring(m_timer_now) + L" 秒后自动关闭";
  461. pFailMessage->SetText(ws_attention.c_str());
  462. }
  463. else
  464. {
  465. Close(IDCANCEL);
  466. }
  467. }
  468. bHandled = TRUE;
  469. return 0;
  470. }
  471. LRESULT CFulikaShoukuanWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
  472. {
  473. LRESULT lRes = 0;
  474. BOOL bHandled = TRUE;
  475. switch (uMsg)
  476. {
  477. case WM_CREATE:
  478. lRes = OnCreate(uMsg, wParam, lParam, bHandled);
  479. break;
  480. case WM_CLOSE:
  481. lRes = OnClose(uMsg, wParam, lParam, bHandled);
  482. break;
  483. case WM_DESTROY:
  484. lRes = OnDestroy(uMsg, wParam, lParam, bHandled);
  485. break;
  486. case WM_NCACTIVATE:
  487. lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
  488. break;
  489. case WM_NCCALCSIZE:
  490. lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
  491. break;
  492. case WM_NCPAINT:
  493. lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
  494. break;
  495. case WM_NCHITTEST:
  496. lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
  497. break;
  498. case WM_SIZE:
  499. lRes = OnSize(uMsg, wParam, lParam, bHandled);
  500. break;
  501. case WM_MOUSEHOVER:
  502. lRes = OnMouseMove(uMsg, wParam, lParam, bHandled);
  503. break;
  504. case WM_SHOUKUAN_STATUS_NEEDPASSWORD:
  505. lRes = OnShoukuanNeedPassword(uMsg, wParam, lParam, bHandled);
  506. break;
  507. case WM_SHOUKUAN_STATUS_SUCCESS:
  508. lRes = OnShoukuanSuccess(uMsg, wParam, lParam, bHandled);
  509. break;
  510. case WM_SHOUKUAN_STATUS_FAIL:
  511. lRes = OnShoukuanFail(uMsg, wParam, lParam, bHandled);
  512. break;
  513. case WM_TIMER:
  514. lRes = OnTimer(uMsg, wParam, lParam, bHandled);
  515. break;
  516. default:
  517. bHandled = FALSE;
  518. }
  519. if (bHandled)
  520. {
  521. return lRes;
  522. }
  523. if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
  524. {
  525. return lRes;
  526. }
  527. return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
  528. }
  529. LRESULT CFulikaShoukuanWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
  530. {
  531. if (uMsg == WM_KEYDOWN)
  532. {
  533. if (wParam == VK_RETURN)
  534. {
  535. if (m_shoukuan_status == 0)
  536. {
  537. if (m_shoukuanModel == 2)
  538. {
  539. StartShoukuan();
  540. }
  541. }
  542. else if (m_shoukuan_status == 1 || m_shoukuan_status == 2 || m_shoukuan_status == 5)
  543. {
  544. //正在支付的过程中,这个时候按Enter键,不做任何处理
  545. }
  546. else if (m_shoukuan_status == 3)
  547. {
  548. //已经明确成功或者失败了,那么久直接关闭就可以了
  549. Close(IDOK);
  550. }
  551. else if (m_shoukuan_status == 4)
  552. {
  553. //Close(IDCANCEL);
  554. if (m_shoukuanModel == 2)
  555. {
  556. StartShoukuan();
  557. }
  558. }
  559. return true;
  560. }
  561. else if (wParam == VK_ESCAPE)
  562. {
  563. StartClose();
  564. return true;
  565. }
  566. if (m_shoukuan_status == 3)
  567. {
  568. Close(IDOK);
  569. return true;
  570. }
  571. else if (m_shoukuan_status == 4)
  572. {
  573. //Close(IDCANCEL);
  574. return true;
  575. }
  576. }
  577. return false;
  578. }
  579. void CFulikaShoukuanWnd::InitMoney(std::wstring value)
  580. {
  581. CLabelUI* pMoneyLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_money_show_money")));
  582. if (pMoneyLabel)
  583. {
  584. pMoneyLabel->SetText(value.c_str());
  585. }
  586. m_money = value;
  587. }
  588. void CFulikaShoukuanWnd::InitFukuanma(std::string fukuanma)
  589. {
  590. m_fukuanma = fukuanma;
  591. this->StartShoukuan();
  592. }
  593. void CFulikaShoukuanWnd::SetCommonParams(std::map<std::string, std::string> params)
  594. {
  595. m_commonParams = params;
  596. }
  597. LRESULT CFulikaShoukuanWnd::OnShoukuanNeedPassword(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  598. {
  599. std::wstring path = CSystem::GetProgramDir() + L"\\music\\pay_password.wav";
  600. if (CSetting::GetInstance()->GetParam("shoukuan_setting_yuyinbobao") == "1")
  601. {
  602. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  603. }
  604. CLabelUI* pFukuanEdit = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_paying_status")));
  605. pFukuanEdit->SetText(L"用户支付中,需要输入密码");
  606. //需要用户输入密码,开始查询状态
  607. std::thread(&CFulikaShoukuanWnd::HandleShoukuanPassword, this).detach();
  608. bHandled = TRUE;
  609. return 0;
  610. }
  611. LRESULT CFulikaShoukuanWnd::OnShoukuanSuccess(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  612. {
  613. //播放收款成功的金额
  614. if (CSetting::GetInstance()->GetParam("setting_is_new_diannei_voice") == "1")
  615. {
  616. std::thread(&CFulikaShoukuanWnd::ReadShoukuanValue, this).detach();
  617. }
  618. Close(IDOK);
  619. bHandled = TRUE;
  620. return 0;
  621. /*
  622. CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_paying_layout")));
  623. paying_layout->SetVisible(false);
  624. CVerticalLayoutUI* pay_success_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_pay_success_layout")));
  625. pay_success_layout->SetVisible(true);
  626. CLabelUI* pMoneyPaySuccess = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_pay_success_money")));
  627. std::wstring valueInfo = L"成功收款:¥" + m_money;
  628. pMoneyPaySuccess->SetText(valueInfo.c_str());
  629. CLabelUI* attention = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_success_attention")));
  630. std::wstring ws_attention = L"按任意键关闭窗口," + to_wstring(m_timer_now) + L" 秒后自动关闭";
  631. attention->SetText(ws_attention.c_str());
  632. SetTimer(m_hWnd, WM_TIMER_WND_CLOSE, 1000, NULL);
  633. SetFocus(m_hWnd);
  634. bHandled = TRUE;
  635. return 0;
  636. */
  637. }
  638. LRESULT CFulikaShoukuanWnd::OnShoukuanFail(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  639. {
  640. std::wstring path = CSystem::GetProgramDir() + L"\\music\\pay_fail.wav";
  641. if (CSetting::GetInstance()->GetParam("setting_is_new_diannei_voice") == "1")
  642. {
  643. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  644. }
  645. CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_paying_layout")));
  646. paying_layout->SetVisible(false);
  647. CVerticalLayoutUI* before_pay_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_before_pay_layout")));
  648. before_pay_layout->SetVisible(true);
  649. CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuanresult")));
  650. pLabel->SetText((L"收款失败:" + m_fail_message).c_str());
  651. pLabel->SetVisible(true);
  652. SetFocus(m_hWnd);
  653. bHandled = TRUE;
  654. return 0;
  655. }
  656. void CFulikaShoukuanWnd::StartShoukuan()
  657. {
  658. CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuanresult")));
  659. //检查收款金额
  660. if (m_money == L"")
  661. {
  662. pLabel->SetText(L"收款金额不能为空,请重新输入!");
  663. pLabel->SetVisible(true);
  664. return;
  665. }
  666. if (m_money == L"0.00")
  667. {
  668. pLabel->SetText(L"收款金额不能为 0 元,请重新输入!");
  669. pLabel->SetVisible(true);
  670. return;
  671. }
  672. double money_value = atof(CLewaimaiString::UnicodeToUTF8(m_money).c_str());
  673. if (!money_value || money_value < 0.01)
  674. {
  675. pLabel->SetText(L"收款金额错误,请重新输入!");
  676. pLabel->SetVisible(true);
  677. return;
  678. }
  679. if (money_value > 50000)
  680. {
  681. pLabel->SetText(L"单笔收款金额不能大于5万,请重新输入!");
  682. pLabel->SetVisible(true);
  683. return;
  684. }
  685. //先判断收款码的格式是否正确
  686. CEditUI* pShoujihaoEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  687. std::wstring ws_Shoujihao = pShoujihaoEdit->GetText();
  688. m_shoujihao = CLewaimaiString::UnicodeToUTF8(ws_Shoujihao);
  689. CEditUI* pPasswordEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("password_edit")));
  690. std::wstring ws_Password = pPasswordEdit->GetText();
  691. m_password = CLewaimaiString::UnicodeToUTF8(ws_Password);
  692. if (m_shoukuanModel == 2)
  693. {
  694. if (ws_Shoujihao.length() == 0)
  695. {
  696. pLabel->SetText(L"手机号不能为空");
  697. pLabel->SetVisible(true);
  698. return;
  699. }
  700. if (ws_Password.length() == 0)
  701. {
  702. pLabel->SetText(L"密码不能为空");
  703. pLabel->SetVisible(true);
  704. return;
  705. }
  706. }
  707. //全部验证通过,就可以开始修改状态了
  708. m_shoukuan_status = 1;
  709. //不加这个的话,edit按回车之后样式有问题
  710. SetFocus(m_hWnd);
  711. CVerticalLayoutUI* before_pay_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_before_pay_layout")));
  712. before_pay_layout->SetVisible(false);
  713. CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_paying_layout")));
  714. paying_layout->SetVisible(true);
  715. CLabelUI* pMoneyPaying = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_paying_money")));
  716. std::wstring valueInfo = L"付款金额:¥" + m_money;
  717. pMoneyPaying->SetText(valueInfo.c_str());
  718. //开启一个线程,开始处理登录
  719. std::thread(&CFulikaShoukuanWnd::HandleShoukuan, this).detach();
  720. }
  721. void CFulikaShoukuanWnd::StartClose()
  722. {
  723. if (m_shoukuan_status == 0)
  724. {
  725. //还没开始支付,直接退出
  726. Close(IDCANCEL);
  727. }
  728. else if (m_shoukuan_status == 1 || m_shoukuan_status == 5)
  729. {
  730. //不能做任何处理
  731. }
  732. else if (m_shoukuan_status == 2)
  733. {
  734. //查询密码的过程中,取消付款
  735. CancelShoukuanPassword();
  736. }
  737. else if (m_shoukuan_status == 3)
  738. {
  739. Sleep(100);
  740. Close(IDOK);
  741. }
  742. else if (m_shoukuan_status == 4)
  743. {
  744. Sleep(100);
  745. Close(IDCANCEL);
  746. }
  747. }
  748. void CFulikaShoukuanWnd::HandleShoukuan()
  749. {
  750. //生成随机的order_no
  751. m_commonParams["zhifu_type"] = std::to_string(10);
  752. m_commonParams["zhifu_code"] = "";
  753. if (m_shoukuanModel == 1)
  754. {
  755. m_commonParams["weixin_password"] = m_fukuanma;
  756. }
  757. else if (m_shoukuanModel == 2)
  758. {
  759. m_commonParams["phone"] = m_shoujihao;
  760. m_commonParams["pay_password"] = md5(m_password);
  761. }
  762. std::string response;
  763. std::string url;
  764. if (m_nType == 1)
  765. {
  766. url = "/diancan/sendorder";
  767. }
  768. else if (m_nType == 2)
  769. {
  770. url = "/dinnercash/pay";
  771. }
  772. else if (m_nType == 4)
  773. {
  774. url = "/shouyin/sendorder";
  775. }
  776. bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), m_commonParams, response);
  777. if (ret == false)
  778. {
  779. m_shoukuan_status = 4;
  780. m_fail_message = L"请求服务器失败,请检查网络设置!";
  781. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  782. return;
  783. }
  784. rapidjson::Document document;
  785. document.Parse(response.c_str());
  786. if (document.HasParseError())
  787. {
  788. LOG_INFO("parse response error!");
  789. m_shoukuan_status = 4;
  790. m_fail_message = L"服务器错误";
  791. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  792. return;
  793. }
  794. if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
  795. {
  796. LOG_INFO("json error!");
  797. m_shoukuan_status = 4;
  798. m_fail_message = L"服务器错误";
  799. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  800. return;
  801. }
  802. rapidjson::Value& v_errcode = document["errcode"];
  803. int errcode;
  804. if (v_errcode.IsString())
  805. {
  806. errcode = atoi(v_errcode.GetString());
  807. }
  808. else
  809. {
  810. errcode = v_errcode.GetInt();
  811. }
  812. if (errcode != 0)
  813. {
  814. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  815. m_shoukuan_status = 4;
  816. std::string errmsg = document["errmsg"].GetString();
  817. m_fail_message = CLewaimaiString::UTF8ToUnicode(errmsg);
  818. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  819. return;
  820. }
  821. if (!document.HasMember("data"))
  822. {
  823. LOG_INFO("json error!");
  824. m_shoukuan_status = 4;
  825. m_fail_message = L"服务器错误";
  826. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  827. return;
  828. }
  829. rapidjson::Value& data = document["data"];
  830. rapidjson::Value& status = data["status"];
  831. std::string s_status = status.GetString();
  832. if (s_status == "success")
  833. {
  834. //支付成功
  835. m_shoukuan_status = 3;
  836. if (m_nType == 1)
  837. {
  838. //快餐才有取餐号
  839. m_take_food_code = data["take_food_code"].GetString();
  840. Value& stock = data["stock"];
  841. m_kucun_string = CLewaimaiJson::JsonToString(stock);
  842. m_show_trade_no = data["show_trade_no"].GetString();
  843. }
  844. else if (m_nType == 2)
  845. {
  846. Value& stock = data["stock"];
  847. m_kucun_string = CLewaimaiJson::JsonToString(stock);
  848. m_show_trade_no = data["show_trade_no"].GetString();
  849. }
  850. else if (m_nType == 4)
  851. {
  852. }
  853. PostMessage(WM_SHOUKUAN_STATUS_SUCCESS, 0, 0);
  854. }
  855. else if (s_status == "fail")
  856. {
  857. //支付失败
  858. m_shoukuan_status = 4;
  859. m_fail_message = CLewaimaiString::UTF8ToUnicode(data["message"].GetString());
  860. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  861. }
  862. else if (s_status == "password")
  863. {
  864. m_shoukuan_status = 2;
  865. //需要查询支付状态
  866. PostMessage(WM_SHOUKUAN_STATUS_NEEDPASSWORD, 0, 0);
  867. }
  868. else
  869. {
  870. m_shoukuan_status = 4;
  871. m_fail_message = L"服务器错误";
  872. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  873. }
  874. }
  875. void CFulikaShoukuanWnd::HandleShoukuanPassword()
  876. {
  877. std::map<std::string, std::string> params;
  878. params["trade_no"] = "";
  879. while (m_shoukuan_status == 2)
  880. {
  881. std::string response;
  882. std::string url;
  883. if (m_nType == 1)
  884. {
  885. url = "/diancan/queryorderstatus";
  886. }
  887. else if (m_nType == 2)
  888. {
  889. url = "/dinnercash/queryorderstatus";
  890. }
  891. else if (m_nType == 4)
  892. {
  893. url = "/shouyin/queryorderstatus";
  894. }
  895. bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
  896. if (ret == false)
  897. {
  898. m_shoukuan_status = 4;
  899. m_fail_message = L"请求服务器失败,请检查网络设置!";
  900. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  901. return;
  902. }
  903. rapidjson::Document document;
  904. document.Parse(response.c_str());
  905. if (document.HasParseError())
  906. {
  907. LOG_INFO("parse response error!");
  908. m_shoukuan_status = 4;
  909. m_fail_message = L"服务器错误";
  910. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  911. return;
  912. }
  913. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  914. {
  915. LOG_INFO("json error!");
  916. m_shoukuan_status = 4;
  917. m_fail_message = L"服务器错误";
  918. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  919. return;
  920. }
  921. rapidjson::Value& v_errcode = document["errcode"];
  922. int errcode = v_errcode.GetInt();
  923. if (errcode != 0)
  924. {
  925. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  926. m_shoukuan_status = 4;
  927. m_fail_message = L"服务器错误";
  928. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  929. return;
  930. }
  931. rapidjson::Value& data = document["data"];
  932. rapidjson::Value& status = data["status"];
  933. std::string s_status = status.GetString();
  934. if (s_status == "success")
  935. {
  936. //支付成功
  937. m_shoukuan_status = 3;
  938. Value& stock = data["stock"];
  939. m_kucun_string = CLewaimaiJson::JsonToString(stock);
  940. m_show_trade_no = data["show_trade_no"].GetString();
  941. if (m_nType == 1)
  942. {
  943. //快餐才有取餐号
  944. m_take_food_code = data["take_food_code"].GetString();
  945. }
  946. PostMessage(WM_SHOUKUAN_STATUS_SUCCESS, 0, 0);
  947. break;
  948. }
  949. else if (s_status == "closed")
  950. {
  951. //表示顾客那边出问题,已经失败了
  952. m_shoukuan_status = 4;
  953. m_fail_message = L"顾客取消支付,请重新扫码收款";
  954. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  955. break;
  956. }
  957. else if (s_status == "fail")
  958. {
  959. //这个只是表示状态未知
  960. Sleep(1000);
  961. }
  962. else
  963. {
  964. m_shoukuan_status = 4;
  965. m_fail_message = L"服务器错误";
  966. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  967. break;
  968. }
  969. }
  970. }
  971. void CFulikaShoukuanWnd::CancelShoukuanPassword()
  972. {
  973. m_shoukuan_status = 5;
  974. std::thread(&CFulikaShoukuanWnd::HandleCancelShoukuan, this).detach();
  975. }
  976. void CFulikaShoukuanWnd::HandleCancelShoukuan()
  977. {
  978. std::map<std::string, std::string> params;
  979. params["trade_no"] = "";
  980. std::string response;
  981. std::string url;
  982. if (m_nType == 1)
  983. {
  984. url = "/diancan/closeorder";
  985. }
  986. else if (m_nType == 2)
  987. {
  988. url = "/dinnercash/closeorder";
  989. }
  990. else if (m_nType == 4)
  991. {
  992. url = "/shouyin/closeorder";
  993. }
  994. bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
  995. if (ret == false)
  996. {
  997. m_shoukuan_status = 4;
  998. m_fail_message = L"请求服务器失败,请检查网络设置!";
  999. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1000. return;
  1001. }
  1002. rapidjson::Document document;
  1003. document.Parse(response.c_str());
  1004. if (document.HasParseError())
  1005. {
  1006. LOG_INFO("parse response error!");
  1007. m_shoukuan_status = 4;
  1008. m_fail_message = L"服务器错误";
  1009. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1010. return;
  1011. }
  1012. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  1013. {
  1014. LOG_INFO("json error!");
  1015. m_shoukuan_status = 4;
  1016. m_fail_message = L"服务器错误";
  1017. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1018. return;
  1019. }
  1020. rapidjson::Value& v_errcode = document["errcode"];
  1021. int errcode = v_errcode.GetInt();
  1022. if (errcode != 0)
  1023. {
  1024. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  1025. m_shoukuan_status = 4;
  1026. m_fail_message = L"服务器错误";
  1027. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1028. return;
  1029. }
  1030. rapidjson::Value& data = document["data"];
  1031. rapidjson::Value& status = data["status"];
  1032. std::string s_status = status.GetString();
  1033. if (s_status == "success")
  1034. {
  1035. //取消成功,订单变为失败状态
  1036. m_shoukuan_status = 4;
  1037. m_fail_message = L"商家取消收款";
  1038. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1039. }
  1040. m_shoukuan_status = 4;
  1041. m_fail_message = L"服务器错误";
  1042. PostMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1043. }
  1044. void CFulikaShoukuanWnd::ReadShoukuanValue()
  1045. {
  1046. CSpeech::SpeakNum(1, CLewaimaiString::UnicodeToUTF8(m_money));
  1047. }
  1048. //处理键盘捕捉结果
  1049. void CFulikaShoukuanWnd::HandleTextCapture(std::string content)
  1050. {
  1051. if (m_shoukuanModel == 1)
  1052. {
  1053. m_fukuanma = content;
  1054. StartShoukuan();
  1055. }
  1056. }