SendDataDlg.cpp
上传用户:sdxhgc
上传日期:2013-09-14
资源大小:388k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. // SendDataDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "vc_demo.h"
  5. #include "SendDataDlg.h"
  6. #include "wcomm_dll.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CSendDataDlg dialog
  14. CSendDataDlg::CSendDataDlg(CWnd* pParent,CTreeCtrl* ptc)
  15. : CDialog(CSendDataDlg::IDD, pParent)
  16. {
  17. //{{AFX_DATA_INIT(CSendDataDlg)
  18. m_hex = FALSE;
  19. //}}AFX_DATA_INIT
  20. m_pTree=NULL;
  21. if (ptc)
  22. m_pTree=ptc;
  23. }
  24. void CSendDataDlg::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CDialog::DoDataExchange(pDX);
  27. //{{AFX_DATA_MAP(CSendDataDlg)
  28. DDX_Control(pDX, IDC_CMUSERLIST, m_cmuserlist);
  29. DDX_Check(pDX, IDC_CKHEX, m_hex);
  30. //}}AFX_DATA_MAP
  31. }
  32. BEGIN_MESSAGE_MAP(CSendDataDlg, CDialog)
  33. //{{AFX_MSG_MAP(CSendDataDlg)
  34. ON_BN_CLICKED(IDC_BQUIT, OnBquit)
  35. ON_WM_SHOWWINDOW()
  36. ON_BN_CLICKED(IDC_CKHEX, OnCkhex)
  37. ON_WM_SIZE()
  38. ON_BN_CLICKED(IDC_BSEND, OnBsend)
  39. ON_WM_TIMER()
  40. ON_BN_CLICKED(IDC_CKAUTOSEND, OnCkautosend)
  41. ON_BN_CLICKED(IDC_BCR, OnBcr)
  42. ON_BN_CLICKED(IDC_BLF, OnBlf)
  43. //}}AFX_MSG_MAP
  44. END_MESSAGE_MAP()
  45. /////////////////////////////////////////////////////////////////////////////
  46. // CSendDataDlg message handlers
  47. void CSendDataDlg::AddUserId()
  48. {
  49. HTREEITEM hti;
  50. CString str;
  51. if ((m_pTree) && (m_pTree->GetFirstVisibleItem()))
  52. {
  53. hti=m_pTree->GetChildItem(m_pTree->GetFirstVisibleItem());
  54.     while (hti)
  55. {
  56.      str=m_pTree->GetItemText(hti);
  57.         m_cmuserlist.AddString(str.GetBuffer(0));
  58.     hti=m_pTree->GetNextItem(hti,TVGN_NEXT);
  59. }
  60. }
  61. m_cmuserlist.SetWindowText(m_userid);
  62. }
  63. void CSendDataDlg::SetUserId(char *userid)
  64. {
  65. m_userid=userid;
  66. }
  67. void CSendDataDlg::OnBquit() 
  68. {
  69.     this->OnCancel();
  70. }
  71. void CSendDataDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
  72. {
  73. CDialog::OnShowWindow(bShow, nStatus);
  74.     this->AddUserId();
  75. this->SendMessage(WM_SIZE);
  76. ((CEdit *)GetDlgItem(IDC_INTERVAL))->SetWindowText("200");
  77. }
  78. int  CSendDataDlg::StrToHex(char *str,char *hex)
  79. {
  80. int i,slen;
  81. slen=strlen(str);
  82. for (i=0;i<slen;i++)
  83. {
  84. sprintf(hex+i*3,"%02X ",str[i]&0xFF);
  85. }
  86. return 0;
  87. }
  88. int  CSendDataDlg::HexToStr(char *hex,char *str)
  89. {
  90. int i,hlen,iData,iFlag;
  91. char ch;
  92. iData=0;
  93. iFlag=0;
  94. hlen=strlen(hex);
  95. for (i=0;i<hlen;i++)
  96. {
  97. if (' '==hex[i]) 
  98. continue;
  99. ch=hex[i];
  100. if ((ch>='0') && (ch<='9'))
  101. {
  102. ch-=0x30;
  103. }
  104. else if ((ch>='a') && (ch<='f'))
  105. {
  106. ch-=0x57;
  107. }
  108. else if ((ch>='A') && (ch<='F'))
  109. {
  110. ch-=0x37;
  111. }
  112. else
  113. {
  114. *str='';
  115.     return -1;
  116. }
  117. if (0==iFlag)
  118. {
  119. iData=ch;
  120. iFlag=1;
  121. }
  122. else
  123. {
  124. iData=(iData<<4) +ch;
  125. iFlag=0;
  126. *str++=iData;
  127. }
  128. }
  129. *str='';
  130. return 0;
  131. }
  132. void CSendDataDlg::OnCkhex() 
  133. {
  134. char *hexbuf,*strbuf;
  135. int  iLen;
  136. CEdit *pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  137.     this->UpdateData(TRUE);
  138. hexbuf=new char[3096];
  139. strbuf=new char[1024];
  140. if (m_hex)
  141. {
  142. iLen=pEdit->GetWindowText(strbuf,1024);
  143. strbuf[iLen]='';
  144. if (0==this->StrToHex(strbuf,hexbuf))
  145. pEdit->SetWindowText(hexbuf);
  146. else
  147. {
  148. m_hex=FALSE;
  149. UpdateData(FALSE);
  150. }
  151. }
  152. else
  153. {
  154. iLen=pEdit->GetWindowText(hexbuf,3096);
  155. hexbuf[iLen]='';
  156. if (0==this->HexToStr(hexbuf,strbuf))
  157. pEdit->SetWindowText(strbuf);
  158. else
  159. {
  160. m_hex=TRUE;
  161. UpdateData(FALSE);
  162. }
  163. }
  164. delete hexbuf;
  165. delete strbuf;
  166. }
  167. void CSendDataDlg::OnSize(UINT nType, int cx, int cy) 
  168. {
  169. CDialog::OnSize(nType, cx, cy);
  170. if (!this->IsWindowVisible())
  171. return;
  172. CRect rt;
  173. CEdit *pEdit;
  174. CButton *pButton;
  175.     pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  176. pEdit->GetWindowRect(&rt);
  177.     pEdit->MoveWindow(11,36,cx-25,cy-77);
  178. pEdit=(CEdit *)GetDlgItem(IDC_EDSENDCOUNT);
  179. pEdit->GetWindowRect(&rt);
  180. pEdit->MoveWindow(cx-104,9,rt.Width(),rt.Height());
  181.     CStatic *pStatic=(CStatic *)GetDlgItem(IDC_STATIC1);
  182. pStatic->GetWindowRect(&rt);
  183. pStatic->MoveWindow(cx-164,13,rt.Width(),rt.Height());
  184. pButton=(CButton *)GetDlgItem(IDC_CKHEX);
  185. pButton->GetWindowRect(&rt);
  186. pButton->MoveWindow(12,cy-rt.Height()-10,rt.Width(),rt.Height());
  187. pButton=(CButton *)GetDlgItem(IDC_BCR);
  188. pButton->GetWindowRect(&rt);
  189. pButton->MoveWindow(60,cy-rt.Height()-10,rt.Width(),rt.Height());
  190. pButton=(CButton *)GetDlgItem(IDC_BLF);
  191. pButton->GetWindowRect(&rt);
  192. pButton->MoveWindow(90,cy-rt.Height()-10,rt.Width(),rt.Height());
  193. pButton=(CButton *)GetDlgItem(IDC_CKAUTOSEND);
  194. pButton->GetWindowRect(&rt);
  195. pButton->MoveWindow(120,cy-rt.Height()-10,rt.Width(),rt.Height());
  196. pButton=(CButton *)GetDlgItem(IDC_INTERVAL);
  197. pButton->GetWindowRect(&rt);
  198. pButton->MoveWindow(180,cy-rt.Height()-10,rt.Width(),rt.Height());
  199. pButton=(CButton *)GetDlgItem(IDC_BQUIT);
  200. pButton->GetWindowRect(&rt);
  201. pButton->MoveWindow(cx-74,cy-rt.Height()-10,rt.Width(),rt.Height());
  202. pButton=(CButton *)GetDlgItem(IDC_BSEND);
  203. pButton->GetWindowRect(&rt);
  204. pButton->MoveWindow(cx-144,cy-rt.Height()-10,rt.Width(),rt.Height());
  205. }
  206. void CSendDataDlg::OnBsend() 
  207. {
  208.     char *strbuf,*hexbuf;
  209. char userid[12];
  210. this->UpdateData(TRUE);
  211. hexbuf=new char[3200];   //3072+128
  212. strbuf=new char[1152];   //1024+128
  213. if (m_hex)
  214. {
  215. ((CEdit *)GetDlgItem(IDC_EDSHOW))->GetWindowText(hexbuf,3200);
  216. this->HexToStr(hexbuf,strbuf);
  217. }
  218. else
  219. ((CEdit *)GetDlgItem(IDC_EDSHOW))->GetWindowText(strbuf,1152);
  220. this->m_cmuserlist.GetWindowText(userid,12);
  221. userid[11]='';
  222. do_send_user_data((unsigned char *)userid,
  223.               (unsigned char *)strbuf,
  224.   strlen(strbuf),
  225.   NULL);
  226. CString text;
  227. ((CEdit *)GetDlgItem(IDC_EDSENDCOUNT))->GetWindowText(text);
  228. int count=atoi(text.GetBuffer(0));
  229. char pbuf[32];
  230. sprintf(pbuf,"%d",count+strlen(strbuf));
  231. ((CEdit *)GetDlgItem(IDC_EDSENDCOUNT))->SetWindowText(pbuf);
  232. delete strbuf;
  233. delete hexbuf;
  234. }
  235. void CSendDataDlg::OnTimer(UINT nIDEvent) 
  236. {
  237. if (1==nIDEvent)
  238. this->OnBsend();
  239. CDialog::OnTimer(nIDEvent);
  240. }
  241. void CSendDataDlg::OnCkautosend() 
  242. {
  243.     CButton *pButton;
  244. CEdit   *pEdit;
  245. char    buf[32];
  246. int     interval;
  247. pEdit=(CEdit *)GetDlgItem(IDC_INTERVAL);
  248. pEdit->GetWindowText(buf,32);
  249. interval=atoi(buf);
  250. if (interval<=0) 
  251. return;
  252. pButton=(CButton *)GetDlgItem(IDC_CKAUTOSEND);
  253. if (1==pButton->GetCheck())
  254. {
  255. this->SetTimer(1,interval,NULL);
  256. }
  257. else
  258. {
  259. this->KillTimer(1);
  260. }
  261. }
  262. void CSendDataDlg::OnBcr() 
  263. {
  264. CString text;
  265. CEdit *pEdit;
  266. pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  267. pEdit->GetWindowText(text);
  268.     UpdateData(TRUE);
  269. if (m_hex)
  270. {
  271. pEdit->SetWindowText(text+"0D ");
  272. }
  273. else
  274. {
  275. pEdit->SetWindowText(text+"r");
  276. }
  277. }
  278. void CSendDataDlg::OnBlf() 
  279. {
  280. CString text;
  281. CEdit *pEdit;
  282. pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  283. pEdit->GetWindowText(text);
  284.     UpdateData(TRUE);
  285. if (m_hex)
  286. {
  287. pEdit->SetWindowText(text+"0A ");
  288. }
  289. else
  290. {
  291. pEdit->SetWindowText(text+"n");
  292. }
  293. }