CHuiyuanShoukuanWnd.cpp 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310
  1. #include "../pch/pch.h"
  2. #include "CHuiyuanShoukuanWnd.h"
  3. #include "CMessageboxWnd.h"
  4. #include "../helper/CSpeech.h"
  5. #include "../helper/MD5.h"
  6. #define WM_TIMER_WND_CLOSE 200001
  7. void CHuiyuanShoukuanWnd::Init()
  8. {
  9. //::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
  10. }
  11. void CHuiyuanShoukuanWnd::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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. wstring ws_Value = m_pEdit->GetText();
  285. 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. wstring ws_Value = m_pEdit->GetText();
  307. 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 CHuiyuanShoukuanWnd::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("huiyuan_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 CHuiyuanShoukuanWnd::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 CHuiyuanShoukuanWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  364. {
  365. bHandled = FALSE;
  366. return 0;
  367. }
  368. LRESULT CHuiyuanShoukuanWnd::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 CHuiyuanShoukuanWnd::OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  377. {
  378. return 0;
  379. }
  380. LRESULT CHuiyuanShoukuanWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  381. {
  382. return 0;
  383. }
  384. LRESULT CHuiyuanShoukuanWnd::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 CHuiyuanShoukuanWnd::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 CHuiyuanShoukuanWnd::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  422. {
  423. bHandled = TRUE;
  424. return 0;
  425. }
  426. LRESULT CHuiyuanShoukuanWnd::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"按任意键关闭窗口," + 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 + 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 CHuiyuanShoukuanWnd::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 CHuiyuanShoukuanWnd::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. Close(IDOK);
  549. }
  550. else if (m_shoukuan_status == 4)
  551. {
  552. //Close(IDCANCEL);
  553. if (m_shoukuanModel == 2)
  554. {
  555. StartShoukuan();
  556. }
  557. }
  558. return true;
  559. }
  560. else if (wParam == VK_ESCAPE)
  561. {
  562. StartClose();
  563. return true;
  564. }
  565. if (m_shoukuan_status == 3)
  566. {
  567. Close(IDOK);
  568. return true;
  569. }
  570. else if (m_shoukuan_status == 4)
  571. {
  572. //Close(IDCANCEL);
  573. return true;
  574. }
  575. }
  576. return false;
  577. }
  578. void CHuiyuanShoukuanWnd::InitMoney(std::wstring value)
  579. {
  580. CLabelUI* pMoneyLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_money_show_money")));
  581. if (pMoneyLabel)
  582. {
  583. pMoneyLabel->SetText(value.c_str());
  584. }
  585. m_money = value;
  586. }
  587. void CHuiyuanShoukuanWnd::InitFukuanma(std::string fukuanma)
  588. {
  589. m_fukuanma = fukuanma;
  590. this->StartShoukuan();
  591. }
  592. void CHuiyuanShoukuanWnd::SetCommonParams(std::map<string, string> params)
  593. {
  594. m_commonParams = params;
  595. }
  596. LRESULT CHuiyuanShoukuanWnd::OnShoukuanNeedPassword(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  597. {
  598. wstring path = CSystem::GetProgramDir() + L"\\music\\pay_password.wav";
  599. if (CSetting::GetParam("setting_is_new_diannei_voice") == "1")
  600. {
  601. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  602. }
  603. CLabelUI* pFukuanEdit = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_paying_status")));
  604. pFukuanEdit->SetText(L"用户支付中,需要输入密码");
  605. //需要用户输入密码,开始查询状态
  606. std::thread(&CHuiyuanShoukuanWnd::HandleShoukuanPassword, this).detach();
  607. bHandled = TRUE;
  608. return 0;
  609. }
  610. LRESULT CHuiyuanShoukuanWnd::OnShoukuanSuccess(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  611. {
  612. //播放收款成功的金额
  613. if (CSetting::GetParam("setting_is_new_diannei_voice") == "1")
  614. {
  615. std::thread(&CHuiyuanShoukuanWnd::ReadShoukuanValue, this).detach();
  616. }
  617. CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_paying_layout")));
  618. paying_layout->SetVisible(false);
  619. CVerticalLayoutUI* pay_success_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_pay_success_layout")));
  620. pay_success_layout->SetVisible(true);
  621. CLabelUI* pMoneyPaySuccess = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_pay_success_money")));
  622. std::wstring valueInfo = L"成功收款:¥" + m_money;
  623. pMoneyPaySuccess->SetText(valueInfo.c_str());
  624. CLabelUI* attention = static_cast<CLabelUI*>(m_pm.FindControl(_T("shouyin_pay_success_attention")));
  625. std::wstring ws_attention = L"按任意键关闭窗口," + to_wstring(m_timer_now) + L" 秒后自动关闭";
  626. attention->SetText(ws_attention.c_str());
  627. SetTimer(m_hWnd, WM_TIMER_WND_CLOSE, 1000, NULL);
  628. SetFocus(m_hWnd);
  629. bHandled = TRUE;
  630. return 0;
  631. }
  632. LRESULT CHuiyuanShoukuanWnd::OnShoukuanFail(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  633. {
  634. wstring path = CSystem::GetProgramDir() + L"\\music\\pay_fail.wav";
  635. if (CSetting::GetParam("setting_is_new_diannei_voice") == "1")
  636. {
  637. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  638. }
  639. CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_paying_layout")));
  640. paying_layout->SetVisible(false);
  641. CVerticalLayoutUI* before_pay_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_before_pay_layout")));
  642. before_pay_layout->SetVisible(true);
  643. CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuanresult")));
  644. pLabel->SetText((L"收款失败:" + m_fail_message).c_str());
  645. pLabel->SetVisible(true);
  646. SetFocus(m_hWnd);
  647. bHandled = TRUE;
  648. return 0;
  649. }
  650. void CHuiyuanShoukuanWnd::StartShoukuan()
  651. {
  652. CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuanresult")));
  653. //检查收款金额
  654. if (m_money == L"")
  655. {
  656. pLabel->SetText(L"收款金额不能为空,请重新输入!");
  657. pLabel->SetVisible(true);
  658. return;
  659. }
  660. if (m_money == L"0.00")
  661. {
  662. pLabel->SetText(L"收款金额不能为 0 元,请重新输入!");
  663. pLabel->SetVisible(true);
  664. return;
  665. }
  666. double money_value = atof(CLewaimaiString::UnicodeToUTF8(m_money).c_str());
  667. if (!money_value || money_value < 0.01)
  668. {
  669. pLabel->SetText(L"收款金额错误,请重新输入!");
  670. pLabel->SetVisible(true);
  671. return;
  672. }
  673. if (money_value > 50000)
  674. {
  675. pLabel->SetText(L"单笔收款金额不能大于5万,请重新输入!");
  676. pLabel->SetVisible(true);
  677. return;
  678. }
  679. //先判断收款码的格式是否正确
  680. CEditUI* pShoujihaoEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("shoujihao_edit")));
  681. std::wstring ws_Shoujihao = pShoujihaoEdit->GetText();
  682. if (ws_Shoujihao.length() == 0)
  683. {
  684. pLabel->SetText(L"手机号不能为空");
  685. pLabel->SetVisible(true);
  686. return;
  687. }
  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. if (ws_Password.length() == 0)
  692. {
  693. pLabel->SetText(L"密码不能为空");
  694. pLabel->SetVisible(true);
  695. return;
  696. }
  697. m_password = CLewaimaiString::UnicodeToUTF8(ws_Password);
  698. //全部验证通过,就可以开始修改状态了
  699. m_shoukuan_status = 1;
  700. //不加这个的话,edit按回车之后样式有问题
  701. SetFocus(m_hWnd);
  702. CVerticalLayoutUI* before_pay_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_before_pay_layout")));
  703. before_pay_layout->SetVisible(false);
  704. CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("shoukuan_paying_layout")));
  705. paying_layout->SetVisible(true);
  706. CLabelUI* pMoneyPaying = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_paying_money")));
  707. std::wstring valueInfo = L"付款金额:¥" + m_money;
  708. pMoneyPaying->SetText(valueInfo.c_str());
  709. //开启一个线程,开始处理登录
  710. std::thread(&CHuiyuanShoukuanWnd::HandleShoukuan, this).detach();
  711. }
  712. void CHuiyuanShoukuanWnd::StartClose()
  713. {
  714. if (m_shoukuan_status == 0)
  715. {
  716. //还没开始支付,直接退出
  717. Close(IDCANCEL);
  718. }
  719. else if (m_shoukuan_status == 1 || m_shoukuan_status == 5)
  720. {
  721. //不能做任何处理
  722. }
  723. else if (m_shoukuan_status == 2)
  724. {
  725. //查询密码的过程中,取消付款
  726. CancelShoukuanPassword();
  727. }
  728. else if (m_shoukuan_status == 3)
  729. {
  730. Sleep(100);
  731. Close(IDOK);
  732. }
  733. else if (m_shoukuan_status == 4)
  734. {
  735. Sleep(100);
  736. Close(IDCANCEL);
  737. }
  738. }
  739. void CHuiyuanShoukuanWnd::HandleShoukuan()
  740. {
  741. //生成随机的order_no
  742. m_commonParams["zhifu_type"] = to_string(4);
  743. m_commonParams["zhifu_code"] = "";
  744. if (m_shoukuanModel == 1)
  745. {
  746. std::map<string, string> param;
  747. param["weixin_password"] = m_fukuanma;
  748. //先查询会员信息
  749. std::string response;
  750. std::string url = "/member/membercheckbyqrcode";
  751. bool ret = CZhipuziHttpClient::Request(url.c_str(), param, response);
  752. if (ret == false)
  753. {
  754. m_shoukuan_status = 4;
  755. m_fail_message = L"请求服务器失败,请检查网络设置!";
  756. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  757. return;
  758. }
  759. rapidjson::Document document;
  760. document.Parse(response.c_str());
  761. if (document.HasParseError())
  762. {
  763. LOG_INFO("parse response error!");
  764. m_shoukuan_status = 4;
  765. m_fail_message = L"服务器错误";
  766. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  767. return;
  768. }
  769. if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
  770. {
  771. LOG_INFO("json error!");
  772. m_shoukuan_status = 4;
  773. m_fail_message = L"服务器错误";
  774. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  775. return;
  776. }
  777. rapidjson::Value& v_errcode = document["errcode"];
  778. int errcode = v_errcode.GetInt();
  779. if (errcode != 0)
  780. {
  781. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  782. m_shoukuan_status = 4;
  783. std::string errmsg = document["errmsg"].GetString();
  784. m_fail_message = CLewaimaiString::UTF8ToUnicode(errmsg);
  785. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  786. return;
  787. }
  788. if (!document.HasMember("data"))
  789. {
  790. LOG_INFO("json error!");
  791. m_shoukuan_status = 4;
  792. m_fail_message = L"服务器错误";
  793. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  794. return;
  795. }
  796. rapidjson::Value& rows = document["data"]["rows"];
  797. if (rows.Size() == 0)
  798. {
  799. //没找到会员
  800. m_shoukuan_status = 4;
  801. m_fail_message = L"未找到对应会员信息";
  802. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  803. return;
  804. }
  805. std::string member_id = rows[0]["id"].GetString();
  806. m_commonParams["member_id"] = member_id;
  807. }
  808. else if (m_shoukuanModel == 2)
  809. {
  810. m_commonParams["phone"] = m_shoujihao;
  811. m_commonParams["pay_password"] = md5(m_password);
  812. }
  813. std::string response;
  814. std::string url = "/diancan/sendorder";
  815. bool ret = CZhipuziHttpClient::Request(url.c_str(), m_commonParams, response);
  816. if (ret == false)
  817. {
  818. m_shoukuan_status = 4;
  819. m_fail_message = L"请求服务器失败,请检查网络设置!";
  820. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  821. return;
  822. }
  823. rapidjson::Document document;
  824. document.Parse(response.c_str());
  825. if (document.HasParseError())
  826. {
  827. LOG_INFO("parse response error!");
  828. m_shoukuan_status = 4;
  829. m_fail_message = L"服务器错误";
  830. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  831. return;
  832. }
  833. if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
  834. {
  835. LOG_INFO("json error!");
  836. m_shoukuan_status = 4;
  837. m_fail_message = L"服务器错误";
  838. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  839. return;
  840. }
  841. rapidjson::Value& v_errcode = document["errcode"];
  842. int errcode = v_errcode.GetInt();
  843. if (errcode != 0)
  844. {
  845. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  846. m_shoukuan_status = 4;
  847. std::string errmsg = document["errmsg"].GetString();
  848. m_fail_message = CLewaimaiString::UTF8ToUnicode(errmsg);
  849. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  850. return;
  851. }
  852. if (!document.HasMember("data"))
  853. {
  854. LOG_INFO("json error!");
  855. m_shoukuan_status = 4;
  856. m_fail_message = L"服务器错误";
  857. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  858. return;
  859. }
  860. rapidjson::Value& data = document["data"];
  861. rapidjson::Value& status = data["status"];
  862. std::string s_status = status.GetString();
  863. if (s_status == "success")
  864. {
  865. //支付成功
  866. m_shoukuan_status = 3;
  867. Value& stock = data["stock"];
  868. m_kucun_string = CLewaimaiJson::JsonToString(stock);
  869. m_take_food_code = data["take_food_code"].GetString();
  870. m_show_trade_no = data["show_trade_no"].GetString();
  871. SendMessage(WM_SHOUKUAN_STATUS_SUCCESS, 0, 0);
  872. }
  873. else if (s_status == "fail")
  874. {
  875. //支付失败
  876. m_shoukuan_status = 4;
  877. m_fail_message = CLewaimaiString::UTF8ToUnicode(data["message"].GetString());
  878. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  879. }
  880. else if (s_status == "password")
  881. {
  882. m_shoukuan_status = 2;
  883. //需要查询支付状态
  884. SendMessage(WM_SHOUKUAN_STATUS_NEEDPASSWORD, 0, 0);
  885. }
  886. else
  887. {
  888. m_shoukuan_status = 4;
  889. m_fail_message = L"服务器错误";
  890. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  891. }
  892. }
  893. void CHuiyuanShoukuanWnd::HandleShoukuanPassword()
  894. {
  895. std::map<string, string> params;
  896. params["trade_no"] = "";
  897. while (m_shoukuan_status == 2)
  898. {
  899. std::string response;
  900. std::string url = "/diancan/queryorderstatus";
  901. bool ret = CZhipuziHttpClient::Request(url.c_str(), params, response);
  902. if (ret == false)
  903. {
  904. m_shoukuan_status = 4;
  905. m_fail_message = L"请求服务器失败,请检查网络设置!";
  906. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  907. return;
  908. }
  909. rapidjson::Document document;
  910. document.Parse(response.c_str());
  911. if (document.HasParseError())
  912. {
  913. LOG_INFO("parse response error!");
  914. m_shoukuan_status = 4;
  915. m_fail_message = L"服务器错误";
  916. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  917. return;
  918. }
  919. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  920. {
  921. LOG_INFO("json error!");
  922. m_shoukuan_status = 4;
  923. m_fail_message = L"服务器错误";
  924. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  925. return;
  926. }
  927. rapidjson::Value& v_errcode = document["errcode"];
  928. int errcode = v_errcode.GetInt();
  929. if (errcode != 0)
  930. {
  931. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  932. m_shoukuan_status = 4;
  933. m_fail_message = L"服务器错误";
  934. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  935. return;
  936. }
  937. rapidjson::Value& data = document["data"];
  938. rapidjson::Value& status = data["status"];
  939. std::string s_status = status.GetString();
  940. if (s_status == "success")
  941. {
  942. //支付成功
  943. m_shoukuan_status = 3;
  944. Value& stock = data["stock"];
  945. m_kucun_string = CLewaimaiJson::JsonToString(stock);
  946. m_take_food_code = data["take_food_code"].GetString();
  947. m_show_trade_no = data["show_trade_no"].GetString();
  948. SendMessage(WM_SHOUKUAN_STATUS_SUCCESS, 0, 0);
  949. break;
  950. }
  951. else if (s_status == "closed")
  952. {
  953. //表示顾客那边出问题,已经失败了
  954. m_shoukuan_status = 4;
  955. m_fail_message = L"顾客取消支付,请重新扫码收款";
  956. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  957. break;
  958. }
  959. else if (s_status == "fail")
  960. {
  961. //这个只是表示状态未知
  962. Sleep(1000);
  963. }
  964. else
  965. {
  966. m_shoukuan_status = 4;
  967. m_fail_message = L"服务器错误";
  968. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  969. break;
  970. }
  971. }
  972. }
  973. void CHuiyuanShoukuanWnd::CancelShoukuanPassword()
  974. {
  975. m_shoukuan_status = 5;
  976. std::thread(&CHuiyuanShoukuanWnd::HandleCancelShoukuan, this).detach();
  977. }
  978. void CHuiyuanShoukuanWnd::HandleCancelShoukuan()
  979. {
  980. std::map<string, string> params;
  981. params["trade_no"] = "";
  982. std::string response;
  983. std::string url = "/diancan/closeorder";
  984. bool ret = CZhipuziHttpClient::Request(url.c_str(), params, response);
  985. if (ret == false)
  986. {
  987. m_shoukuan_status = 4;
  988. m_fail_message = L"请求服务器失败,请检查网络设置!";
  989. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  990. return;
  991. }
  992. rapidjson::Document document;
  993. document.Parse(response.c_str());
  994. if (document.HasParseError())
  995. {
  996. LOG_INFO("parse response error!");
  997. m_shoukuan_status = 4;
  998. m_fail_message = L"服务器错误";
  999. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1000. return;
  1001. }
  1002. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  1003. {
  1004. LOG_INFO("json error!");
  1005. m_shoukuan_status = 4;
  1006. m_fail_message = L"服务器错误";
  1007. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1008. return;
  1009. }
  1010. rapidjson::Value& v_errcode = document["errcode"];
  1011. int errcode = v_errcode.GetInt();
  1012. if (errcode != 0)
  1013. {
  1014. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  1015. m_shoukuan_status = 4;
  1016. m_fail_message = L"服务器错误";
  1017. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1018. return;
  1019. }
  1020. rapidjson::Value& data = document["data"];
  1021. rapidjson::Value& status = data["status"];
  1022. std::string s_status = status.GetString();
  1023. if (s_status == "success")
  1024. {
  1025. //取消成功,订单变为失败状态
  1026. m_shoukuan_status = 4;
  1027. m_fail_message = L"商家取消收款";
  1028. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1029. }
  1030. m_shoukuan_status = 4;
  1031. m_fail_message = L"服务器错误";
  1032. SendMessage(WM_SHOUKUAN_STATUS_FAIL, 0, 0);
  1033. }
  1034. void CHuiyuanShoukuanWnd::ReadShoukuanValue()
  1035. {
  1036. CSpeech::SpeakNum(1, CLewaimaiString::UnicodeToUTF8(m_money));
  1037. }
  1038. //处理键盘捕捉结果
  1039. void CHuiyuanShoukuanWnd::HandleTextCapture(std::string content)
  1040. {
  1041. if (m_shoukuanModel == 1)
  1042. {
  1043. m_fukuanma = content;
  1044. StartShoukuan();
  1045. }
  1046. }