TXSPDlg.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. // TXSPDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ylgl.h"
  5. #include "TXSPDlg.h"
  6. #include "MyMdi.H"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // TXSPDlg
  14. IMPLEMENT_DYNCREATE(TXSPDlg, MyFormView)
  15. TXSPDlg::TXSPDlg()
  16. : MyFormView(TXSPDlg::IDD)
  17. {
  18. //{{AFX_DATA_INIT(TXSPDlg)
  19. m_taoxiid = _T("");
  20. m_taoxijiage = _T("");
  21. m_zs = _T("");
  22. //}}AFX_DATA_INIT
  23. }
  24. TXSPDlg::~TXSPDlg()
  25. {
  26. }
  27. void TXSPDlg::DoDataExchange(CDataExchange* pDX)
  28. {
  29. MyFormView::DoDataExchange(pDX);
  30. //{{AFX_DATA_MAP(TXSPDlg)
  31. DDX_Control(pDX, IDC_LIST2, m_List2);
  32. DDX_Control(pDX, IDC_LIST1, m_List1);
  33. DDX_Control(pDX, IDC_STATIC1, m_static1);
  34. DDX_Control(pDX, IDC_COMBOtaoxiname, m_combotaoxiname);
  35. DDX_Text(pDX, IDC_EDITtaoxiid, m_taoxiid);
  36. DDX_Text(pDX, IDC_EDITtaoxijiage, m_taoxijiage);
  37. DDX_Text(pDX, IDC_EDITzs, m_zs);
  38. //}}AFX_DATA_MAP
  39. }
  40. BEGIN_MESSAGE_MAP(TXSPDlg, MyFormView)
  41. //{{AFX_MSG_MAP(TXSPDlg)
  42. ON_BN_CLICKED(IDC_BUTsave, OnBUTsave)
  43. ON_BN_CLICKED(IDC_BUTdel, OnBUTdel)
  44. ON_BN_CLICKED(IDC_BUTclose, OnBUTclose)
  45. ON_CBN_SELCHANGE(IDC_COMBOtaoxiname, OnSelchangeCOMBOtaoxiname)
  46. ON_BN_CLICKED(IDC_BUTspbox, OnBUTspbox)
  47. ON_WM_TIMER()
  48. ON_BN_CLICKED(IDC_BUTsave2, OnBUTsave2)
  49. ON_BN_CLICKED(IDC_BUTdel2, OnBUTdel2)
  50. ON_BN_CLICKED(IDC_BUTspbox2, OnBUTspbox2)
  51. ON_BN_CLICKED(IDC_BUTclose2, OnBUTclose2)
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // TXSPDlg diagnostics
  56. #ifdef _DEBUG
  57. void TXSPDlg::AssertValid() const
  58. {
  59. MyFormView::AssertValid();
  60. }
  61. void TXSPDlg::Dump(CDumpContext& dc) const
  62. {
  63. MyFormView::Dump(dc);
  64. }
  65. #endif //_DEBUG
  66. /////////////////////////////////////////////////////////////////////////////
  67. // TXSPDlg message handlers
  68. void TXSPDlg::OnInitialUpdate()
  69. {
  70. MyFormView::OnInitialUpdate();
  71. // TODO: Add your specialized code here and/or call the base class
  72. CMyMdi Mdi;
  73. Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this);
  74. // Here we create the outbar control using the splitter as its parent
  75. // and setting its id to the first pane.
  76. CRect rc2;
  77. GetWindowRect(rc2);
  78. ::MoveWindow(m_hWnd,g_rc.left,g_rc.top,g_rc.Width(),g_rc.Height(),TRUE);
  79. EnumChildWindows(m_hWnd,(WNDENUMPROC)EnumChildProc,0);
  80. m_combotaoxiname.GetWindowRect (rc2);
  81. ScreenToClient(rc2);
  82. rc2.bottom +=200;
  83. m_combotaoxiname.MoveWindow (rc2);
  84. m_static1.SetFont (&g_titlefont);
  85. g_sendhead.bsql=0;
  86. g_sendhead.code[0]=6;
  87. g_sendhead.code[1]=7;
  88. g_sendhead.code[2]=10;
  89. g_sendhead.code[3]=4;
  90. g_sendhead.tabcount=4;
  91. g_pMainWnd->ProcessChatMessageRequest2(6);if(g_bSendOK==0)return;
  92. DataToArray(&m_List1array, &m_List2array, &m_List3array, &m_sparray);
  93. for(int i=0; i<m_List1array.GetSize (); i++)
  94. m_combotaoxiname.AddString (m_List1array.ElementAt (i).ElementAt (1));
  95. m_List1.InitStyle();
  96. m_List1.InsertColumn(0,_T("编号"),LVCFMT_LEFT,80);
  97. m_List1.InsertColumn(1,_T("商品名称"),LVCFMT_LEFT,200);
  98. m_List1.InsertColumn(2,_T("数量"),LVCFMT_LEFT,60);
  99. m_List2.InitStyle();
  100. m_List2.InsertColumn(0,_T("编号"),LVCFMT_LEFT,80);
  101. m_List2.InsertColumn(1,_T("商品名称"),LVCFMT_LEFT,200);
  102. m_List2.InsertColumn(2,_T("数量"),LVCFMT_LEFT,60);
  103. }
  104. void TXSPDlg::OnSelchangeCOMBOtaoxiname()
  105. {
  106. // TODO: Add your control notification handler code here
  107. int pos=m_combotaoxiname.GetCurSel ();
  108. if(pos==-1)return;
  109. m_taoxiid = m_List1array.ElementAt (pos).ElementAt (0);
  110. m_taoxijiage = m_List1array.ElementAt (pos).ElementAt (2);
  111. m_zs = m_List1array.ElementAt (pos).ElementAt (3);
  112. UpdateData(false);
  113. FillGrid();
  114. }
  115. void TXSPDlg::FillGrid()
  116. {
  117. m_List1.DeleteAllItems ();
  118. int pos=0;
  119. for(int i=0; i<m_List2array.GetSize (); i++)
  120. {
  121. if(m_List2array.ElementAt (i).ElementAt (0)!=m_taoxiid)continue;
  122. m_List1.InsertItem(pos, m_List2array.ElementAt (i).ElementAt (1));
  123. m_List1.SetItemText(pos,1, GetSPNameFromId(m_List2array.ElementAt (i).ElementAt (1)));
  124. m_List1.SetItemText(pos,2, m_List2array.ElementAt (i).ElementAt (2));
  125. pos++;
  126. }
  127. //#ifndef MODERN_VERSION
  128. #if 0
  129. for( i=0; i<m_List3array.GetSize (); i++)
  130. {
  131. if(m_List3array.ElementAt (i).ElementAt (0)!=m_taoxiid)continue;
  132. m_List1.InsertItem(pos, m_List3array.ElementAt (i).ElementAt (1));
  133. m_List1.SetItemText(pos,1, GetSPNameFromId(m_List3array.ElementAt (i).ElementAt (1)));
  134. m_List1.SetItemText(pos,2, m_List3array.ElementAt (i).ElementAt (2));
  135. pos++;
  136. }
  137. #else
  138. m_List2.DeleteAllItems ();
  139. pos=0;
  140. for( i=0; i<m_List3array.GetSize (); i++)
  141. {
  142. if(m_List3array.ElementAt (i).ElementAt (0)!=m_taoxiid)continue;
  143. m_List2.InsertItem(pos, m_List3array.ElementAt (i).ElementAt (1));
  144. m_List2.SetItemText(pos,1, GetSPNameFromId(m_List3array.ElementAt (i).ElementAt (1)));
  145. m_List2.SetItemText(pos,2, m_List3array.ElementAt (i).ElementAt (2));
  146. pos++;
  147. }
  148. #endif
  149. }
  150. CString TXSPDlg::GetSPNameFromId(CString id)
  151. {
  152. for(int i=0; i<m_sparray.GetSize (); i++)
  153. {
  154. if(id==m_sparray.ElementAt (i).ElementAt (0))
  155. return m_sparray.ElementAt (i).ElementAt (1);
  156. }
  157. id.TrimLeft ("0");
  158. for( i=0; i<m_sparray.GetSize (); i++)
  159. {
  160. if(id==m_sparray.ElementAt (i).ElementAt (0))
  161. return m_sparray.ElementAt (i).ElementAt (1);
  162. }
  163. return "";
  164. }
  165. BOOL TXSPDlg::PreTranslateMessage(MSG* pMsg)
  166. {
  167. // TODO: Add your specialized code here and/or call the base class
  168. if(pMsg->message==WM_KEYDOWN)
  169. {
  170. switch( pMsg->wParam )
  171. {
  172. case 0x43: // copy
  173. if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
  174. {
  175. GetFocus()->SendMessage(WM_COPY);
  176. return TRUE;
  177. }
  178. break;
  179. case 0x56: //Ctrl + V:
  180. if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
  181. {
  182. GetFocus()->SendMessage(WM_PASTE);
  183. return TRUE;
  184. }
  185. break;
  186. case 0x58: // cut
  187. if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
  188. {
  189. GetFocus()->SendMessage(WM_CUT);
  190. return TRUE;
  191. }
  192. break;
  193. case 0x5A: //undo
  194. case 0x59: //redo
  195. if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
  196. {
  197. GetFocus()->SendMessage(WM_UNDO);
  198. return TRUE;
  199. }
  200. break;
  201. }
  202. }
  203. else if(pMsg->message==WM_LBUTTONDBLCLK)
  204. {
  205. if(0)
  206. {//list1
  207. CPoint pt;
  208. CRect rc,rc2;
  209. ::GetCursorPos (&pt);
  210. m_List1.GetWindowRect (rc2);
  211. if(rc2.PtInRect (pt)==0) return MyFormView::PreTranslateMessage(pMsg);
  212. pt.x-=rc2.left ;
  213. pt.y-=rc2.top ;
  214. POSITION pos;
  215. pos=m_List1.GetFirstSelectedItemPosition();
  216. if(pos==NULL)return 1;
  217. int iItem=m_List1.GetNextSelectedItem(pos);
  218. m_List1.GetSubItemRect( iItem, 2, LVIR_BOUNDS, rc);
  219. if(rc.PtInRect (pt))
  220. return MyFormView::PreTranslateMessage(pMsg);
  221. else
  222. return 1;
  223. }
  224. }
  225. return MyFormView::PreTranslateMessage(pMsg);
  226. }
  227. void TXSPDlg::SetSPName1()
  228. {
  229. for(int i=0; i<m_List1.GetItemCount (); i++)
  230. {
  231. m_List1.SetItemText(i,1, GetSPNameFromId(m_List1.GetItemText (i, 0)));
  232. }
  233. }
  234. void TXSPDlg::SetSPName2()
  235. {
  236. for(int i=0; i<m_List2.GetItemCount (); i++)
  237. {
  238. m_List2.SetItemText(i,1, GetSPNameFromId(m_List2.GetItemText (i, 0)));
  239. }
  240. }
  241. void TXSPDlg::OnTimer(UINT nIDEvent)
  242. {
  243. // TODO: Add your message handler code here and/or call default
  244. if(nIDEvent==1)
  245. {
  246. KillTimer(nIDEvent);
  247. SetSPName1();
  248. }
  249. else if(nIDEvent==2)
  250. {
  251. KillTimer(nIDEvent);
  252. SetSPName2();
  253. }
  254. }
  255. void TXSPDlg::OnBUTsave()
  256. {
  257. // TODO: Add your control notification handler code here
  258. int pos=m_combotaoxiname.GetCurSel ();
  259. if(pos==-1)return;
  260. CArray<CStringArray, CStringArray>sparray;
  261. sparray.SetSize(m_List1.GetItemCount ());
  262. int realcount=0;
  263. for(int i=0; i<m_List1.GetItemCount (); i++)
  264. {
  265. if(m_List1.GetItemText (i, 0).IsEmpty ())continue;
  266. sparray.ElementAt (realcount).Add ( m_List1array.ElementAt (pos).ElementAt (0) );
  267. sparray.ElementAt (realcount).Add ( m_List1.GetItemText (i, 0) );
  268. sparray.ElementAt (realcount).Add ( m_List1.GetItemText (i, 2) );
  269. realcount++;
  270. }
  271. sparray.SetSize(realcount);
  272. if(realcount==0)
  273. {
  274. sparray.SetSize(1);
  275. sparray.ElementAt (0).Add (m_List1array.ElementAt (pos).ElementAt (0));
  276. }
  277. CMemFile memfile;
  278. CArchive ar(&memfile, CArchive::store);
  279. for(int ii=0; ii<sparray.GetSize (); ii++)
  280. {
  281. sparray.ElementAt (ii).Serialize (ar);
  282. }
  283. ar.Close();
  284. int length=memfile.GetLength ();
  285. BYTE *pData = memfile.Detach();
  286. int size=sparray.GetSize ();
  287. BYTE *pData2=new BYTE[length+sizeof(int)];
  288. memcpy(pData2, pData, length);
  289. memcpy(pData2+length, &size, sizeof(int));
  290. delete []pData;
  291. length+=sizeof(int);
  292. g_nSendCode=1;
  293. g_pMainWnd->ProcessChatMessageRequest2(pData2, length);
  294. g_nSendCode=0;
  295. delete []pData2;
  296. if(g_bSendOK==0)return;
  297. g_sendhead.bsql=0;
  298. g_sendhead.code[0]=7;
  299. g_sendhead.code[1]=10;
  300. g_sendhead.tabcount=2;
  301. g_pMainWnd->ProcessChatMessageRequest2(7);if(g_bSendOK==0)return;
  302. DataToArray(&m_List2array, &m_List3array);
  303. AfxMessageBox("保存成功!", MB_ICONINFORMATION);
  304. }
  305. void TXSPDlg::OnBUTdel()
  306. {
  307. // TODO: Add your control notification handler code here
  308. POSITION pos;
  309. pos=m_List1.GetFirstSelectedItemPosition();
  310. if(pos==NULL)
  311. {
  312. AfxMessageBox("请先选中您要删除的项目!", MB_ICONINFORMATION);
  313. return;
  314. }
  315. int iItem=m_List1.GetNextSelectedItem(pos);
  316. m_List1.DeleteItem (iItem);
  317. int count=m_List1.GetItemCount ();
  318. if(count==0)return;
  319. if(iItem==count)
  320. iItem=0;
  321. m_List1.SetItemState (iItem, LVIS_SELECTED, LVIS_SELECTED);
  322. }
  323. void TXSPDlg::OnBUTspbox()
  324. {
  325. // TODO: Add your control notification handler code here
  326. SPBox dlg;
  327. if(dlg.DoModal ()!=IDOK)return;
  328. for(int a=0; a<dlg.m_spidarray .GetSize (); a++)
  329. {
  330. dlg.m_spid=dlg.m_spidarray.ElementAt (a);
  331. dlg.m_spname=dlg.m_spnamearray.ElementAt (a);
  332. dlg.m_lb=dlg.m_lbarray.ElementAt (a);
  333. int pos=m_List1.GetItemCount ();
  334. if(pos)
  335. {
  336. if(m_List1.GetItemText (pos-1, 0).IsEmpty ()&&m_List1.GetItemText (pos-1, 1).IsEmpty ()&&m_List1.GetItemText (pos-1, 2).IsEmpty ())
  337. {
  338. pos--;
  339. m_List1.SetItemText(pos,0, dlg.m_spid);
  340. m_List1.SetItemText(pos,1, GetSPNameFromId(dlg.m_spid));
  341. }
  342. else
  343. {
  344. m_List1.InsertItem(pos, dlg.m_spid);
  345. m_List1.SetItemText(pos,1, GetSPNameFromId(dlg.m_spid));
  346. m_List1.SetItemText(pos, 2, "1");
  347. }
  348. }
  349. else
  350. {
  351. m_List1.InsertItem(pos, dlg.m_spid);
  352. m_List1.SetItemText(pos,1, GetSPNameFromId(dlg.m_spid));
  353. m_List1.SetItemText(pos, 2, "1");
  354. }
  355. }
  356. }
  357. void TXSPDlg::OnBUTclose()
  358. {
  359. // TODO: Add your control notification handler code here
  360. GetParent()->SendMessage(WM_CLOSE);
  361. }
  362. void TXSPDlg::OnBUTsave2()
  363. {
  364. // TODO: Add your control notification handler code here
  365. int pos=m_combotaoxiname.GetCurSel ();
  366. if(pos==-1)return;
  367. CArray<CStringArray, CStringArray>sparray;
  368. sparray.SetSize(m_List2.GetItemCount ());
  369. int realcount=0;
  370. for(int i=0; i<m_List2.GetItemCount (); i++)
  371. {
  372. if(m_List2.GetItemText (i, 0).IsEmpty ())continue;
  373. sparray.ElementAt (realcount).Add ( m_List1array.ElementAt (pos).ElementAt (0) );
  374. sparray.ElementAt (realcount).Add ( m_List2.GetItemText (i, 0) );
  375. sparray.ElementAt (realcount).Add ( m_List2.GetItemText (i, 2) );
  376. realcount++;
  377. }
  378. sparray.SetSize(realcount);
  379. if(realcount==0)
  380. {
  381. sparray.SetSize(1);
  382. sparray.ElementAt (0).Add (m_List1array.ElementAt (pos).ElementAt (0));
  383. }
  384. CMemFile memfile;
  385. CArchive ar(&memfile, CArchive::store);
  386. for(int ii=0; ii<sparray.GetSize (); ii++)
  387. {
  388. sparray.ElementAt (ii).Serialize (ar);
  389. }
  390. ar.Close();
  391. int length=memfile.GetLength ();
  392. BYTE *pData = memfile.Detach();
  393. int size=sparray.GetSize ();
  394. BYTE *pData2=new BYTE[length+sizeof(int)];
  395. memcpy(pData2, pData, length);
  396. memcpy(pData2+length, &size, sizeof(int));
  397. delete []pData;
  398. length+=sizeof(int);
  399. g_nSendCode=2;
  400. g_pMainWnd->ProcessChatMessageRequest2(pData2, length);
  401. g_nSendCode=0;
  402. delete []pData2;
  403. if(g_bSendOK==0)return;
  404. g_sendhead.bsql=0;
  405. g_sendhead.code[0]=7;
  406. g_sendhead.code[1]=10;
  407. g_sendhead.tabcount=2;
  408. g_pMainWnd->ProcessChatMessageRequest2(7);if(g_bSendOK==0)return;
  409. DataToArray(&m_List2array, &m_List3array);
  410. AfxMessageBox("保存成功!", MB_ICONINFORMATION);
  411. }
  412. void TXSPDlg::OnBUTdel2()
  413. {
  414. // TODO: Add your control notification handler code here
  415. POSITION pos;
  416. pos=m_List2.GetFirstSelectedItemPosition();
  417. if(pos==NULL)
  418. {
  419. AfxMessageBox("请先选中您要删除的项目!", MB_ICONINFORMATION);
  420. return;
  421. }
  422. int iItem=m_List2.GetNextSelectedItem(pos);
  423. m_List2.DeleteItem (iItem);
  424. int count=m_List2.GetItemCount ();
  425. if(count==0)return;
  426. if(iItem==count)
  427. iItem=0;
  428. m_List2.SetItemState (iItem, LVIS_SELECTED, LVIS_SELECTED);
  429. }
  430. void TXSPDlg::OnBUTspbox2()
  431. {
  432. // TODO: Add your control notification handler code here
  433. SPBox dlg;
  434. dlg.m_mode=1;
  435. if(dlg.DoModal ()!=IDOK)return;
  436. for(int a=0; a<dlg.m_spidarray .GetSize (); a++)
  437. {
  438. dlg.m_spid=dlg.m_spidarray.ElementAt (a);
  439. dlg.m_spname=dlg.m_spnamearray.ElementAt (a);
  440. dlg.m_lb=dlg.m_lbarray.ElementAt (a);
  441. int pos=m_List2.GetItemCount ();
  442. if(pos)
  443. {
  444. if(m_List2.GetItemText (pos-1, 0).IsEmpty ()&&m_List2.GetItemText (pos-1, 1).IsEmpty ()&&m_List2.GetItemText (pos-1, 2).IsEmpty ())
  445. {
  446. pos--;
  447. m_List2.SetItemText(pos,0, dlg.m_spid);
  448. m_List2.SetItemText(pos,1, GetSPNameFromId(dlg.m_spid));
  449. m_List2.SetItemText(pos,2, "1");
  450. }
  451. else
  452. {
  453. m_List2.InsertItem(pos, dlg.m_spid);
  454. m_List2.SetItemText(pos,1, GetSPNameFromId(dlg.m_spid));
  455. m_List2.SetItemText(pos,2, "1");
  456. }
  457. }
  458. else
  459. {
  460. m_List2.InsertItem(pos, dlg.m_spid);
  461. m_List2.SetItemText(pos,1, GetSPNameFromId(dlg.m_spid));
  462. m_List2.SetItemText(pos,2, "1");
  463. }
  464. }
  465. }
  466. void TXSPDlg::OnBUTclose2()
  467. {
  468. // TODO: Add your control notification handler code here
  469. GetParent()->SendMessage(WM_CLOSE);
  470. }