SendDataDlg.cpp
上传用户:zcy791212
上传日期:2013-03-06
资源大小:196k
文件大小:8k
源码类别:

Modem编程

开发平台:

Visual C++

  1. //
  2. // SendDataDlg.cpp : implementation file
  3. //
  4. #include "stdafx.h"
  5. #include "vc_demo.h"
  6. #include "SendDataDlg.h"
  7. #include "gprsdll.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. int StrParseToHex(CString Str, u32t * pulL)
  14. //输入:Str ------必须是一个8个字节长的表示16进制数的字符串(前头用0补足位置)
  15. //输出:pulL
  16. //返回0表明转换失败
  17. //否则1表明转换成功
  18. {
  19. unsigned long ulL;
  20. unsigned char uszLong[4];
  21. //注意,下面这个宏必须保证hex是一个0~9||a~f||A~F的值。
  22. #define VALUEOFHEX(hex)
  23. (
  24. '0'<=hex&&hex<='9'?hex-'0':
  25. (
  26. 'a'<=hex&&hex<='f'?hex-'a'+10:hex-'A'+10
  27. )
  28. )
  29. #define IFHEXCHAR(hex)
  30. (
  31. '0'<=hex&&hex<='9'
  32. ||
  33. 'a'<=hex&&hex<='f'
  34. ||
  35. 'A'<=hex&&hex<='F'
  36. )
  37. if (!(IFHEXCHAR(Str[0])&&IFHEXCHAR(Str[1])&&IFHEXCHAR(Str[2])&&IFHEXCHAR(Str[3])
  38. &&IFHEXCHAR(Str[4])&&IFHEXCHAR(Str[5])&&IFHEXCHAR(Str[6])&&IFHEXCHAR(Str[7])))
  39. {
  40. return 0;
  41. }
  42. uszLong[3]=VALUEOFHEX(Str[0])*16+VALUEOFHEX(Str[1]);
  43. uszLong[2]=VALUEOFHEX(Str[2])*16+VALUEOFHEX(Str[3]);
  44. uszLong[1]=VALUEOFHEX(Str[4])*16+VALUEOFHEX(Str[5]);
  45. uszLong[0]=VALUEOFHEX(Str[6])*16+VALUEOFHEX(Str[7]);
  46. memcpy(pulL,uszLong,4);
  47. return (1);
  48. }
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CSendDataDlg dialog
  51. CSendDataDlg::CSendDataDlg(CWnd* pParent,CTreeCtrl* ptc)
  52. : CDialog(CSendDataDlg::IDD, pParent)
  53. {
  54. //{{AFX_DATA_INIT(CSendDataDlg)
  55. m_hex = FALSE;
  56. //}}AFX_DATA_INIT
  57. m_pTree=NULL;
  58. if (ptc)
  59. m_pTree=ptc;
  60. }
  61. void CSendDataDlg::DoDataExchange(CDataExchange* pDX)
  62. {
  63. CDialog::DoDataExchange(pDX);
  64. //{{AFX_DATA_MAP(CSendDataDlg)
  65. DDX_Control(pDX, IDC_CMUSERLIST, m_cmuserlist);
  66. DDX_Check(pDX, IDC_CKHEX, m_hex);
  67. //}}AFX_DATA_MAP
  68. }
  69. BEGIN_MESSAGE_MAP(CSendDataDlg, CDialog)
  70. //{{AFX_MSG_MAP(CSendDataDlg)
  71. ON_BN_CLICKED(IDC_BQUIT, OnBquit)
  72. ON_WM_SHOWWINDOW()
  73. ON_BN_CLICKED(IDC_CKHEX, OnCkhex)
  74. ON_WM_SIZE()
  75. ON_BN_CLICKED(IDC_BSEND, OnBsend)
  76. ON_WM_TIMER()
  77. ON_BN_CLICKED(IDC_CKAUTOSEND, OnCkautosend)
  78. ON_BN_CLICKED(IDC_BCR, OnBcr)
  79. ON_BN_CLICKED(IDC_BLF, OnBlf)
  80. //}}AFX_MSG_MAP
  81. END_MESSAGE_MAP()
  82. /////////////////////////////////////////////////////////////////////////////
  83. // CSendDataDlg message handlers
  84. void CSendDataDlg::AddUserId()
  85. {
  86. HTREEITEM hti;
  87. CString str;
  88. if ((m_pTree) && (m_pTree->GetFirstVisibleItem()))
  89. {
  90. hti=m_pTree->GetChildItem(m_pTree->GetFirstVisibleItem());
  91.     while (hti)
  92. {
  93.      str=m_pTree->GetItemText(hti);
  94.         m_cmuserlist.AddString(str.GetBuffer(0));
  95.     hti=m_pTree->GetNextItem(hti,TVGN_NEXT);
  96. }
  97. }
  98. m_cmuserlist.SetWindowText(m_userid);
  99. }
  100. void CSendDataDlg::SetUserId(char *userid)
  101. {
  102. m_userid=userid;
  103. }
  104. void CSendDataDlg::OnBquit() 
  105. {
  106.     this->OnCancel();
  107. }
  108. void CSendDataDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
  109. {
  110. CDialog::OnShowWindow(bShow, nStatus);
  111.     this->AddUserId();
  112. this->SendMessage(WM_SIZE);
  113. ((CEdit *)GetDlgItem(IDC_INTERVAL))->SetWindowText("200");
  114. }
  115. int  CSendDataDlg::StrToHex(char *str,char *hex)
  116. {
  117. int i,slen;
  118. slen=strlen(str);
  119. for (i=0;i<slen;i++)
  120. {
  121. sprintf(hex+i*3,"%02X ",str[i]&0xFF);
  122. }
  123. return 0;
  124. }
  125. int  CSendDataDlg::HexToStr(char *hex,char *str)
  126. {
  127. int i,hlen,iData,iFlag;
  128. char ch;
  129. iData=0;
  130. iFlag=0;
  131. hlen=strlen(hex);
  132. for (i=0;i<hlen;i++)
  133. {
  134. if (' '==hex[i]) 
  135. continue;
  136. ch=hex[i];
  137. if ((ch>='0') && (ch<='9'))
  138. {
  139. ch-=0x30;
  140. }
  141. else if ((ch>='a') && (ch<='f'))
  142. {
  143. ch-=0x57;
  144. }
  145. else if ((ch>='A') && (ch<='F'))
  146. {
  147. ch-=0x37;
  148. }
  149. else
  150. {
  151. *str='';
  152.     return -1;
  153. }
  154. if (0==iFlag)
  155. {
  156. iData=ch;
  157. iFlag=1;
  158. }
  159. else
  160. {
  161. iData=(iData<<4) +ch;
  162. iFlag=0;
  163. *str++=iData;
  164. }
  165. }
  166. *str='';
  167. return 0;
  168. }
  169. void CSendDataDlg::OnCkhex() 
  170. {
  171. char *hexbuf,*strbuf;
  172. int  iLen;
  173. CEdit *pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  174.     this->UpdateData(TRUE);
  175. hexbuf=new char[3096];
  176. strbuf=new char[1024];
  177. if (m_hex)
  178. {
  179. iLen=pEdit->GetWindowText(strbuf,1024);
  180. strbuf[iLen]='';
  181. if (0==this->StrToHex(strbuf,hexbuf))
  182. pEdit->SetWindowText(hexbuf);
  183. else
  184. {
  185. m_hex=FALSE;
  186. UpdateData(FALSE);
  187. }
  188. }
  189. else
  190. {
  191. iLen=pEdit->GetWindowText(hexbuf,3096);
  192. hexbuf[iLen]='';
  193. if (0==this->HexToStr(hexbuf,strbuf))
  194. pEdit->SetWindowText(strbuf);
  195. else
  196. {
  197. m_hex=TRUE;
  198. UpdateData(FALSE);
  199. }
  200. }
  201. delete hexbuf;
  202. delete strbuf;
  203. }
  204. void CSendDataDlg::OnSize(UINT nType, int cx, int cy) 
  205. {
  206. CDialog::OnSize(nType, cx, cy);
  207. if (!this->IsWindowVisible())
  208. return;
  209. CRect rt;
  210. CEdit *pEdit;
  211. CButton *pButton;
  212.     pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  213. pEdit->GetWindowRect(&rt);
  214.     pEdit->MoveWindow(11,36,cx-25,cy-77);
  215. pEdit=(CEdit *)GetDlgItem(IDC_EDSENDCOUNT);
  216. pEdit->GetWindowRect(&rt);
  217. pEdit->MoveWindow(cx-104,9,rt.Width(),rt.Height());
  218.     CStatic *pStatic=(CStatic *)GetDlgItem(IDC_STATIC1);
  219. pStatic->GetWindowRect(&rt);
  220. pStatic->MoveWindow(cx-164,13,rt.Width(),rt.Height());
  221. pButton=(CButton *)GetDlgItem(IDC_CKHEX);
  222. pButton->GetWindowRect(&rt);
  223. pButton->MoveWindow(12,cy-rt.Height()-10,rt.Width(),rt.Height());
  224. pButton=(CButton *)GetDlgItem(IDC_BCR);
  225. pButton->GetWindowRect(&rt);
  226. pButton->MoveWindow(60,cy-rt.Height()-10,rt.Width(),rt.Height());
  227. pButton=(CButton *)GetDlgItem(IDC_BLF);
  228. pButton->GetWindowRect(&rt);
  229. pButton->MoveWindow(90,cy-rt.Height()-10,rt.Width(),rt.Height());
  230. pButton=(CButton *)GetDlgItem(IDC_CKAUTOSEND);
  231. pButton->GetWindowRect(&rt);
  232. pButton->MoveWindow(120,cy-rt.Height()-10,rt.Width(),rt.Height());
  233. pButton=(CButton *)GetDlgItem(IDC_INTERVAL);
  234. pButton->GetWindowRect(&rt);
  235. pButton->MoveWindow(180,cy-rt.Height()-10,rt.Width(),rt.Height());
  236. pButton=(CButton *)GetDlgItem(IDC_BQUIT);
  237. pButton->GetWindowRect(&rt);
  238. pButton->MoveWindow(cx-74,cy-rt.Height()-10,rt.Width(),rt.Height());
  239. pButton=(CButton *)GetDlgItem(IDC_BSEND);
  240. pButton->GetWindowRect(&rt);
  241. pButton->MoveWindow(cx-144,cy-rt.Height()-10,rt.Width(),rt.Height());
  242. }
  243. void CSendDataDlg::OnBsend() 
  244. {
  245.     char *strbuf,*hexbuf;
  246. CString useridstr;
  247. this->UpdateData(TRUE);
  248. hexbuf=new char[3096];
  249. strbuf=new char[1024];
  250. if (m_hex)
  251. {
  252. ((CEdit *)GetDlgItem(IDC_EDSHOW))->GetWindowText(hexbuf,3096);
  253. this->HexToStr(hexbuf,strbuf);
  254. }
  255. else
  256. ((CEdit *)GetDlgItem(IDC_EDSHOW))->GetWindowText(strbuf,1024);
  257. this->m_cmuserlist.GetWindowText(useridstr);
  258. u32t modemid;
  259. if (0 == StrParseToHex(useridstr,&modemid))
  260. {
  261. MessageBox("注意!Modem的id号错误,将不进行发送!","错误!");
  262. return;
  263. }
  264. //todo_edw :should add
  265. DSSendData(modemid,
  266.   strlen(strbuf),
  267.       (unsigned char *)strbuf);
  268. CString text;
  269. ((CEdit *)GetDlgItem(IDC_EDSENDCOUNT))->GetWindowText(text);
  270. int count=atoi(text.GetBuffer(0));
  271. char pbuf[32];
  272. sprintf(pbuf,"%d",count+strlen(strbuf));
  273. ((CEdit *)GetDlgItem(IDC_EDSENDCOUNT))->SetWindowText(pbuf);
  274. delete strbuf;
  275. delete hexbuf;
  276. }
  277. void CSendDataDlg::OnTimer(UINT nIDEvent) 
  278. {
  279. if (1==nIDEvent)
  280. this->OnBsend();
  281. CDialog::OnTimer(nIDEvent);
  282. }
  283. void CSendDataDlg::OnCkautosend() 
  284. {
  285.     CButton *pButton;
  286. CEdit   *pEdit;
  287. char    buf[32];
  288. int     interval;
  289. pEdit=(CEdit *)GetDlgItem(IDC_INTERVAL);
  290. pEdit->GetWindowText(buf,32);
  291. interval=atoi(buf);
  292. if (interval<=0) 
  293. return;
  294. pButton=(CButton *)GetDlgItem(IDC_CKAUTOSEND);
  295. if (1==pButton->GetCheck())
  296. {
  297. this->SetTimer(1,interval,NULL);
  298. }
  299. else
  300. {
  301. this->KillTimer(1);
  302. }
  303. }
  304. void CSendDataDlg::OnBcr() 
  305. {
  306. CString text;
  307. CEdit *pEdit;
  308. pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  309. pEdit->GetWindowText(text);
  310.     UpdateData(TRUE);
  311. if (m_hex)
  312. {
  313. pEdit->SetWindowText(text+"0D ");
  314. }
  315. else
  316. {
  317. pEdit->SetWindowText(text+"r");
  318. }
  319. }
  320. void CSendDataDlg::OnBlf() 
  321. {
  322. CString text;
  323. CEdit *pEdit;
  324. pEdit=(CEdit *)GetDlgItem(IDC_EDSHOW);
  325. pEdit->GetWindowText(text);
  326.     UpdateData(TRUE);
  327. if (m_hex)
  328. {
  329. pEdit->SetWindowText(text+"0A ");
  330. }
  331. else
  332. {
  333. pEdit->SetWindowText(text+"n");
  334. }
  335. }