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

通讯编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "vc_demo.h"
  5. #include "time.h"
  6. #include "SettingDlg.h"
  7. #include "senddatadlg.h"
  8. #include "WordThread.h"
  9. #include "AddUserDlg1.h"
  10. #include "MainFrm.h"
  11. #include "vc_demoView.h"
  12. #include "wcomm_dll.h"
  13. #include "winsock2.h"
  14. #include "GPRS_SMM.h"
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. #define NEWMENUITEM WM_USER+0x13
  21. /*
  22. int g_nCount = 0;
  23. UINT pfnReadData(LPVOID pParam)
  24. {
  25. char mess[512];
  26. data_record dr;
  27. CMainFrame* pt = (CMainFrame *)pParam;
  28. g_nCount = 0;
  29. SetWorkMode(1);   //0-use Window Messge, nonblock   1-block mode
  30. start_gprs_server((HWND)0x01,0x01,5003,mess);
  31. pt->AddTextToEditView(mess);
  32. while(g_nCount<10)//for (;;)
  33. {
  34. if (0 == do_read_proc(&dr,mess,true))
  35. {
  36. if (dr.m_data_len>=0)
  37. pt->AddTextToEditView(dr.m_userid);
  38. if (dr.m_data_len>0)
  39. pt->AddTextToEditView(dr.m_data_buf);
  40. }
  41.         Sleep(20);
  42. }
  43. stop_gprs_server(mess);
  44. pt->AddTextToEditView(mess);
  45. return 1;
  46. }
  47. */
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CMainFrame
  50. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  51. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  52. //{{AFX_MSG_MAP(CMainFrame)
  53. ON_WM_CREATE()
  54. ON_COMMAND(ID_MICLEAR, OnMiclear)
  55. ON_COMMAND(ID_MIOFFLINE, OnMioffline)
  56. ON_COMMAND(ID_MIREFRESHTABLE, OnMirefreshtable)
  57. ON_COMMAND(ID_MISENDDATA, OnMisenddata)
  58. ON_COMMAND(ID_MISTARTSERVICE, OnMistartservice)
  59. ON_COMMAND(ID_MISTOPSERVICE, OnMistopservice)
  60. ON_COMMAND(ID_QUIT, OnQuit)
  61. ON_WM_CLOSE()
  62. ON_MESSAGE(RV_MESS,ProcessRvData)
  63. ON_COMMAND(ID_MIANSWER, OnMianswer)
  64. ON_COMMAND(ID_MISHOWDATA, OnMishowdata)
  65. ON_COMMAND(ID_SHOWMENU, OnShowmenu)
  66. ON_COMMAND(ID_HELPCONTENT, OnHelpcontent)
  67. ON_WM_TIMER()
  68. ON_UPDATE_COMMAND_UI(ID_MISTARTSERVICE, OnUpdateMistartservice)
  69. ON_UPDATE_COMMAND_UI(ID_MIOFFLINE, OnUpdateMistopservice)
  70. ON_UPDATE_COMMAND_UI(ID_MIANSWER, OnUpdateMianswer)
  71. ON_COMMAND(ID_MISERVERSETTING, OnMiserversetting)
  72. ON_UPDATE_COMMAND_UI(ID_SHOWMENU, OnUpdateShowmenu)
  73. ON_COMMAND(ID_MIOFFLINEALL, OnMiofflineall)
  74. ON_COMMAND(ID_MIVIEWWORD, OnMiviewword)
  75. ON_UPDATE_COMMAND_UI(ID_MIVIEWWORD, OnUpdateMiviewword)
  76. ON_COMMAND(ID_USERINFOIN, OnUserinfoin)
  77. ON_COMMAND(ID_USERINFOOUT, OnUserinfoout)
  78. ON_COMMAND(ID_MENUSMSSTART, OnMenusmsstart)
  79. ON_COMMAND(ID_MENUSMSEXIT, OnMenusmsexit)
  80. ON_COMMAND(ID_Adduser, OnAdduser)
  81. ON_COMMAND(ID_DELETE_USER, OnDeleteUser)
  82. ON_UPDATE_COMMAND_UI(ID_Adduser, OnUpdateAdduser)
  83. ON_UPDATE_COMMAND_UI(ID_DELETE_USER, OnUpdateDeleteUser)
  84. ON_UPDATE_COMMAND_UI(ID_USERINFOIN, OnUpdateUserinfoin)
  85. ON_UPDATE_COMMAND_UI(ID_USERINFOOUT, OnUpdateUserinfoout)
  86. ON_COMMAND(ID_DISCONNECT_PPP, OnDisconnectPpp)
  87. ON_UPDATE_COMMAND_UI(ID_DISCONNECT_PPP, OnUpdateDisconnectPpp)
  88. ON_COMMAND(ID_STOP_TO_SEND, OnStopToSend)
  89. ON_UPDATE_COMMAND_UI(ID_STOP_TO_SEND, OnUpdateStopToSend)
  90. ON_COMMAND(ID_START_TO_SEND, OnStartToSend)
  91. ON_UPDATE_COMMAND_UI(ID_START_TO_SEND, OnUpdateStartToSend)
  92. ON_COMMAND(ID_DISCARD_DATA, OnDiscardData)
  93. ON_UPDATE_COMMAND_UI(ID_DISCARD_DATA, OnUpdateDiscardData)
  94. ON_COMMAND(ID_MENUWNDHIDTREE, OnMenuwndhidtree)
  95. ON_COMMAND(ID_MENUWNDHIDLIST, OnMenuwndhidlist)
  96. ON_UPDATE_COMMAND_UI(ID_MIREFRESHTABLE, OnUpdateMistopservice)
  97. ON_UPDATE_COMMAND_UI(ID_MISENDDATA, OnUpdateMistopservice)
  98. ON_UPDATE_COMMAND_UI(ID_MISTOPSERVICE, OnUpdateMistopservice)
  99. ON_UPDATE_COMMAND_UI(ID_MIOFFLINEALL, OnUpdateMistopservice)
  100. ON_COMMAND(ID_MENUWNDHIDEDIT, OnMenuwndhidedit)
  101. //}}AFX_MSG_MAP
  102. ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnUpdateViewStyles)
  103. ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnViewStyle)
  104. ON_MESSAGE(ID_MISENDDATA,OnMisenddata)
  105. END_MESSAGE_MAP()
  106. static UINT indicators[] =
  107. {
  108. ID_SEPARATOR, 
  109. ID_SEPARATOR, 
  110.     ID_SEPARATOR 
  111. // status line indicator
  112. //ID_INDICATOR_CAPS,
  113. //ID_INDICATOR_NUM,
  114. //ID_INDICATOR_SCRL,
  115. //0x1234
  116. };
  117. /////////////////////////////////////////////////////////////////////////////
  118. // CMainFrame construction/destruction
  119. CMainFrame::CMainFrame()
  120. {
  121. // TODO: add member initialization code here
  122. m_bAutoMenuEnable=false;
  123. this->m_bServerRunning=false;
  124.     this->m_bAnswer=FALSE;
  125. this->m_viewword=TRUE;
  126. memset(this->m_userid,0x00,12);
  127. this->m_IsAdduserDlg =FALSE;
  128. init_option(&m_option);
  129. }
  130. CMainFrame::~CMainFrame()
  131. {
  132. }
  133. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  134. {
  135. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  136. return -1;
  137. if (!m_wndMenuBar.Create(this) ||
  138. !m_wndMenuBar.LoadMenuBar(IDR_MAINFRAME))
  139. {
  140. TRACE0("Failed to create toolbarn");
  141. return -1;      // faile to create
  142. }
  143. if (!m_wndToolBar.CreateEx(this, 
  144. TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | TBSTYLE_LIST,
  145. WS_CHILD | WS_VISIBLE | CBRS_TOP
  146. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY 
  147. | CBRS_SIZE_DYNAMIC
  148. )
  149. || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  150. {
  151. TRACE0("Failed to create toolbarn");
  152. return -1;      // fail to create
  153. }
  154. if (!m_wndStatusBar.Create(this) ||
  155. !m_wndStatusBar.SetIndicators(indicators,
  156.   sizeof(indicators)/sizeof(UINT)))
  157. {
  158. TRACE0("Failed to create status barn");
  159. return -1;      // fail to create
  160. }
  161. // TODO: Delete these three lines if you don't want the toolbar to
  162. //  be dockable
  163. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  164. m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
  165. EnableDocking(CBRS_ALIGN_ANY);
  166. DockControlBar(&m_wndMenuBar);
  167. DockControlBar(&m_wndToolBar);
  168. SetToolBarStyle();
  169. SetStatusBarStyle();
  170. AddToSysMenu();
  171. return 0;
  172. }
  173. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
  174. CCreateContext* pContext)
  175. {
  176. // create splitter window
  177. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  178. return FALSE;
  179. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(130, 100), pContext))
  180. {
  181. m_wndSplitter.DestroyWindow();
  182. return FALSE;
  183. }
  184. if (!m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE | WS_CHILD | WS_BORDER,m_wndSplitter.IdFromRowCol(0,1)))
  185. return FALSE;
  186. if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CVc_demoView), CSize(100, 200), pContext) ||
  187. !m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CBottomEditView), CSize(100, 100), pContext))
  188. {
  189. m_wndSplitter2.DestroyWindow();
  190. return FALSE;
  191. }
  192. // if (!m_wndSplitter2.CreateStatic(&m_wndSplitter,3,1,WS_VISIBLE | WS_CHILD | WS_BORDER,m_wndSplitter.IdFromRowCol(0,1)))
  193. // return FALSE;
  194. // if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CVc_demoView), CSize(100, 450), pContext) ||
  195. // !m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CListView2), CSize(100, 100), pContext)||
  196. // !m_wndSplitter2.CreateView(2, 0, RUNTIME_CLASS(CBottomEditView), CSize(100, 50), pContext))
  197. // {
  198. // m_wndSplitter2.DestroyWindow();
  199. // return FALSE;
  200. // }
  201. return TRUE;
  202. }
  203. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  204. {
  205. if( !CFrameWnd::PreCreateWindow(cs) )
  206. return FALSE;
  207. // TODO: Modify the Window class or styles here by modifying
  208. //  the CREATESTRUCT cs
  209. return TRUE;
  210. }
  211. /////////////////////////////////////////////////////////////////////////////
  212. // CMainFrame diagnostics
  213. #ifdef _DEBUG
  214. void CMainFrame::AssertValid() const
  215. {
  216. CFrameWnd::AssertValid();
  217. }
  218. void CMainFrame::Dump(CDumpContext& dc) const
  219. {
  220. CFrameWnd::Dump(dc);
  221. }
  222. #endif //_DEBUG
  223. /////////////////////////////////////////////////////////////////////////////
  224. // CMainFrame message handlers
  225. CVc_demoView* CMainFrame::GetRightPane()
  226. {
  227. CWnd* pWnd = m_wndSplitter2.GetPane(0, 0);
  228. CVc_demoView* pView = DYNAMIC_DOWNCAST(CVc_demoView, pWnd);
  229. return pView;
  230. }
  231. CLeftView* CMainFrame::GetLeftPane()
  232. {
  233. CWnd* pWnd = m_wndSplitter.GetPane(0, 0);
  234. CLeftView* pView = DYNAMIC_DOWNCAST(CLeftView, pWnd);
  235. return pView;
  236. }
  237. CBottomEditView* CMainFrame::GetBottompane()
  238. {
  239. CWnd* pWnd = m_wndSplitter2.GetPane(1, 0);
  240. CBottomEditView* pView = DYNAMIC_DOWNCAST(CBottomEditView, pWnd);
  241. return pView;
  242. }
  243. void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
  244. {
  245. // TODO: customize or extend this code to handle choices on the
  246. // View menu.
  247. CVc_demoView* pView = GetRightPane(); 
  248. // if the right-hand pane hasn't been created or isn't a view,
  249. // disable commands in our range
  250. if (pView == NULL)
  251. pCmdUI->Enable(FALSE);
  252. else
  253. {
  254. DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK;
  255. // if the command is ID_VIEW_LINEUP, only enable command
  256. // when we're in LVS_ICON or LVS_SMALLICON mode
  257. if (pCmdUI->m_nID == ID_VIEW_LINEUP)
  258. {
  259. if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
  260. pCmdUI->Enable();
  261. else
  262. pCmdUI->Enable(FALSE);
  263. }
  264. else
  265. {
  266. // otherwise, use dots to reflect the style of the view
  267. pCmdUI->Enable();
  268. BOOL bChecked = FALSE;
  269. switch (pCmdUI->m_nID)
  270. {
  271. case ID_VIEW_DETAILS:
  272. bChecked = (dwStyle == LVS_REPORT);
  273. break;
  274. case ID_VIEW_SMALLICON:
  275. bChecked = (dwStyle == LVS_SMALLICON);
  276. break;
  277. case ID_VIEW_LARGEICON:
  278. bChecked = (dwStyle == LVS_ICON);
  279. break;
  280. case ID_VIEW_LIST:
  281. bChecked = (dwStyle == LVS_LIST);
  282. break;
  283. default:
  284. bChecked = FALSE;
  285. break;
  286. }
  287. pCmdUI->SetRadio(bChecked ? 1 : 0);
  288. }
  289. }
  290. }
  291. void CMainFrame::OnViewStyle(UINT nCommandID)
  292. {
  293. // TODO: customize or extend this code to handle choices on the
  294. // View menu.
  295. CVc_demoView* pView = GetRightPane();
  296. // if the right-hand pane has been created and is a CVc_demoView,
  297. // process the menu commands...
  298. if (pView != NULL)
  299. {
  300. DWORD dwStyle = -1;
  301. switch (nCommandID)
  302. {
  303. case ID_VIEW_LINEUP:
  304. {
  305. // ask the list control to snap to grid
  306. CListCtrl& refListCtrl = pView->GetListCtrl();
  307. refListCtrl.Arrange(LVA_SNAPTOGRID);
  308. }
  309. break;
  310. // other commands change the style on the list control
  311. case ID_VIEW_DETAILS:
  312. dwStyle = LVS_REPORT;
  313. break;
  314. case ID_VIEW_SMALLICON:
  315. dwStyle = LVS_SMALLICON;
  316. break;
  317. case ID_VIEW_LARGEICON:
  318. dwStyle = LVS_ICON;
  319. break;
  320. case ID_VIEW_LIST:
  321. dwStyle = LVS_LIST;
  322. break;
  323. }
  324. // change the style; window will repaint automatically
  325. if (dwStyle != -1)
  326. pView->ModifyStyle(LVS_TYPEMASK, dwStyle);
  327. }
  328. }
  329. void CMainFrame::SetToolBarStyle()
  330. {
  331. CImageList img;
  332. m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40, 100);
  333.   m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
  334.     //m_wndToolBar.SetButtonStyle(8,TBSTYLE_CHECK);
  335. m_wndToolBar.SetButtonStyle(8,m_wndToolBar.GetButtonStyle(8) 
  336.                            | TBSTYLE_DROPDOWN);
  337. img.Create(IDB_HOTTOOLBAR, 32, 0, RGB(255, 0, 255));
  338. m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
  339. img.Detach();
  340. img.Create(IDB_COLDTOOLBAR, 32, 0, RGB(255, 0, 255));
  341. m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
  342. img.Detach();
  343. for(int i = 0; i < m_wndToolBar.GetCount(); i++) 
  344. UINT id = m_wndToolBar.GetItemID(i); 
  345. CString s;
  346.     if (!s.LoadString(id)) 
  347. continue;
  348.     int j = s.Find(_T('n')); 
  349.     if(j < 0) continue;
  350.     s = s.Right(s.GetLength() - j - 1); 
  351.     m_wndToolBar.SetButtonText(i,s); 
  352. }
  353. CRect rect; 
  354. m_wndToolBar.GetItemRect(0,&rect); 
  355. m_wndToolBar.SetSizes(rect.Size(),CSize(32,32));
  356. }
  357. void CMainFrame::OnMiclear() 
  358. {
  359. // TODO: Add your command handler code here
  360. CEdit &ce=this->GetBottompane()->GetEditCtrl();
  361. ce.SetWindowText("");
  362. }
  363. void CMainFrame::OnMioffline() 
  364. {
  365. char buf[64];
  366. if (11==strlen(m_userid))
  367. {
  368. sprintf(buf,"确认使  %s 下线吗?",this->m_userid);
  369.     if (IDYES==MessageBox(buf,"确认",MB_YESNO | MB_ICONINFORMATION))
  370. {
  371. do_close_one_user((unsigned char *)m_userid,NULL);
  372. this->RefreshUserTable();
  373. }
  374. }
  375. }
  376. void CMainFrame::OnMirefreshtable() 
  377. {
  378. this->RefreshUserTable();
  379. }
  380. void CMainFrame::OnMisenddata() 
  381. {
  382. CTreeCtrl &tc=this->GetLeftPane()->GetTreeCtrl();
  383. CSendDataDlg sdd(NULL,&tc);
  384. sdd.SetUserId(this->m_userid);
  385. sdd.DoModal();
  386. }
  387. void CMainFrame::OnMistartservice() 
  388. {
  389. char mess[512];
  390. int iResult;
  391. //AddFilterIP(inet_addr("192.168.0.243"));
  392. //SetCustomIP(inet_addr("192.168.0.1"));
  393. /*iResult=start_gprs_server(this->m_hWnd,
  394.                       RV_MESS,
  395.   m_option.m_iServerPort,
  396.   mess);*/
  397. iResult=start_net_service(this->m_hWnd,
  398.                       RV_MESS,
  399.   m_option.m_iServerPort,
  400.   mess);
  401. if (iResult>=0)
  402. {    
  403. // if ((m_option.m_bSysAutoPoll) && (m_option.m_iPollTimeInterval>0) && (m_option.m_iOffLineTime>0))
  404. //            this->SetTimer(1,(m_option.m_iPollTimeInterval)*1000,NULL);
  405.     m_bServerRunning=true;
  406. }
  407. AddTextToEditView(mess,false);
  408. //AfxBeginThread(RUNTIME_CLASS(CWordThread));
  409. }
  410. void CMainFrame::OnMistopservice() 
  411. {
  412. // TODO: Add your command handler code here
  413. char mess[512];
  414. if (m_option.m_bSysAutoPoll)
  415. this->KillTimer(1);
  416. do_close_all_user(mess);
  417. //this->AddTextToEditView(mess);
  418. //stop_gprs_server(mess);
  419. stop_net_service(mess);
  420. this->AddTextToEditView(mess,true);
  421. this->m_bServerRunning=false;
  422. this->GetRightPane()->ClearAllItem();
  423. this->GetLeftPane()->ClearAllItem();
  424. }
  425. void CMainFrame::OnQuit() 
  426. {
  427. // TODO: Add your command handler code here
  428. this->OnClose();
  429. }
  430. void CMainFrame::OnClose() 
  431. {
  432. // TODO: Add your message handler code here and/or call default
  433. if (IDYES==MessageBox("确定要退出吗?","退出",MB_YESNO | MB_ICONINFORMATION))
  434. {
  435. if (m_bServerRunning)
  436. {
  437. this->OnMistopservice();
  438. }
  439. CFrameWnd::OnClose();
  440. }
  441. }
  442. void CMainFrame::ProcessRvData(WPARAM wparam, LPARAM lparam)
  443. {
  444. data_record dr;
  445. static char buf[2048];
  446. if (do_read_proc(&dr,NULL,m_bAnswer)>=0)
  447. {
  448. if (dr.m_data_len>0)
  449. {
  450. //whether show head or not
  451. if (m_option.m_bShowHead)
  452. {
  453. sprintf(buf,"rnuserid:%s,time:%s,len:%d",
  454. dr.m_userid,dr.m_recv_date,dr.m_data_len);
  455. this->AddTextToEditView(buf);
  456. }
  457. //Hex or not to show data
  458. if (m_option.m_bHexShow)
  459. {
  460. this->PrintData(dr.m_data_buf, dr.m_data_len);
  461. }
  462. else
  463. {
  464. this->AddTextToEditView(dr.m_data_buf);
  465. }
  466. }
  467. else //data_len=0,it means logon or logout
  468. {
  469. this->RefreshUserTable();
  470. if (0x01==dr.m_data_type)
  471. sprintf(buf,"%s  登录",dr.m_userid);
  472. else if (0x02==dr.m_data_type)
  473. sprintf(buf,"%s  注销",dr.m_userid);
  474. else if (0x0d==dr.m_data_type)
  475. sprintf(buf,"%s  参数设置成功",dr.m_userid);
  476. else if (0x0b==dr.m_data_type)
  477. sprintf(buf,"%s  参数查询成功",dr.m_userid);
  478. else if (0x06==dr.m_data_type)
  479. {
  480. sprintf(buf,"%s  断开PPP连接成功",dr.m_userid);
  481. delete_one_user((unsigned char *)dr.m_userid,NULL);
  482. this->RefreshUserTable();
  483. }
  484. else if (0x07==dr.m_data_type)
  485. sprintf(buf,"%s  停止向DSC发送数据",dr.m_userid);
  486. else if (0x08==dr.m_data_type)
  487. sprintf(buf,"%s  允许向DSC发送数据",dr.m_userid);
  488. else if (0x0A==dr.m_data_type)
  489. sprintf(buf,"%s   丢弃用户数据",dr.m_userid);
  490. else
  491. sprintf(buf,"%s",dr.m_userid);
  492. this->m_wndStatusBar.SetPaneText(1,buf,TRUE);
  493. }
  494. }
  495. }
  496. void CMainFrame::AddTextToEditView(char * szContent,bool newline)
  497. {
  498. if (szContent)
  499. {
  500.     CString text;
  501.     CEdit &ce=this->GetBottompane()->GetEditCtrl();
  502.     if (ce.GetLineCount()>100)
  503.     ce.SetWindowText("");
  504. ce.GetWindowText(text);
  505. if (newline)
  506. ce.SetWindowText(text+"rn"+szContent);
  507. else
  508. ce.SetWindowText(text+szContent);
  509. ce.LineScroll(ce.GetLineCount());
  510. }
  511. }
  512. void CMainFrame::AddTextToEditView(int iContent,bool newline)
  513. {
  514. CString text;
  515. char buf[32];
  516. sprintf(buf,"%d",iContent);
  517.     CEdit &ce=this->GetBottompane()->GetEditCtrl();
  518. if (ce.GetLineCount()>100)
  519. ce.SetWindowText("");
  520. ce.GetWindowText(text);
  521. if (newline)
  522. ce.SetWindowText(text+"rn"+buf);
  523. else
  524. ce.SetWindowText(text+buf);
  525. ce.LineScroll(ce.GetLineCount());
  526. }
  527. void CMainFrame::RefreshUserTable(int flag)
  528. {
  529. int i,iMaxDTUAmount;
  530. user_info ui;
  531. bool   bShow;
  532. time_t t_now,t_update;
  533. this->GetRightPane()->ClearAllItem();
  534. this->GetLeftPane()->ClearAllItem();
  535. iMaxDTUAmount=get_max_user_amount();
  536. for (i=0;i<iMaxDTUAmount;i++)
  537. {
  538. ui.m_status=0;
  539. get_user_at(i,&ui);
  540. if (1==ui.m_status)
  541. {
  542. bShow=true;
  543. //flag=1 means refresh usertable , 0 means not
  544. if ((m_option.m_bSysAutoPoll) && (1==flag))
  545. {
  546. /* if type of update time is ulong then use */
  547. /* the following code                       */
  548. t_now=time(NULL);
  549. t_update=*((time_t *)ui.m_update_time);
  550. if ((t_now-t_update)>=m_option.m_iOffLineTime)
  551. {
  552. do_close_one_user((unsigned char *)ui.m_userid,NULL);
  553. bShow=false;
  554. }                
  555. /* if type of update time is char * then use */
  556. /* following code                            */
  557. /*
  558. if (this->CompareDateTimeAndNow(ui.m_update_time)>=m_option.m_iOffLineTime)
  559. {
  560. do_close_one_user((unsigned char *)ui.m_userid,NULL);
  561. bShow=false;
  562. }
  563. */
  564. }
  565. if (bShow)
  566. {
  567. //add to ListView of right top
  568. this->GetRightPane()->InsertUserItem(
  569. ui.m_userid,ui.m_logon_date,
  570. ui.m_update_time,ui.m_local_addr,
  571. ui.m_local_port,ui.m_sin_addr,ui.m_sin_port);
  572. //add to TreeView of left
  573. this->GetLeftPane()->InsertUserItem(ui.m_userid);
  574. }
  575. }
  576. }
  577. this->GetLeftPane()->GetTreeCtrl().Expand(
  578. this->GetLeftPane()->GetTreeCtrl().GetFirstVisibleItem(),TVE_EXPAND);
  579. }
  580. void CMainFrame::OnMianswer() 
  581. {
  582.     m_bAnswer=!m_bAnswer;
  583. }
  584. void CMainFrame::OnMiserversetting() 
  585. {
  586. this->GetPara(0);
  587. }
  588. void CMainFrame::OnMishowdata() 
  589. {
  590. this->GetPara(1);
  591. }
  592. void CMainFrame::OnShowmenu() 
  593. {
  594.     ShowControlBar(&m_wndMenuBar,!m_wndMenuBar.IsWindowVisible(),FALSE);
  595. m_wndToolBar.SetButtonStyle(6,TBSTYLE_BUTTON);
  596. }
  597. void CMainFrame::OnHelpcontent() 
  598. {
  599. MessageBox("深圳市宏电技术开发有限公司");
  600. }
  601. void CMainFrame::SetStatusBarStyle()
  602. {
  603. m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_STRETCH,100);  
  604. m_wndStatusBar.SetPaneText(1,"",TRUE);
  605. //m_wndStatusBar.SetPaneText(2,"GPRS VC DEMO 3.0   宏电技术",TRUE);
  606. m_wndStatusBar.SetPaneText(2,"DSC API演示程序 2.1 版(VC++6.0)",TRUE);
  607. }
  608. void CMainFrame::OnTimer(UINT nIDEvent) 
  609. {
  610. // TODO: Add your message handler code here and/or call default
  611. if (1==nIDEvent)
  612. this->RefreshUserTable(1);
  613. CFrameWnd::OnTimer(nIDEvent);
  614. }
  615. void CMainFrame::PrintData(char *szData, int datalen)
  616. {
  617. char buf[128];
  618. int i,j,len,totallen;
  619. totallen=datalen;//strlen(szData);  原来的错误
  620. for (i=0;i<totallen;i+=16)
  621. {
  622. len=(totallen-i)>16?16:(totallen-i);
  623. sprintf(buf,"%04X  :  ",i);
  624. for (j=0;j<len;j++)
  625. {
  626. sprintf(buf+9+j*3,"%02X ",szData[i+j]&0xFF);
  627. buf[64+j]=szData[i+j];
  628. }
  629.         memset(buf+len*3+9,' ',64-len*3-9);
  630. buf[64+len]='';
  631. this->AddTextToEditView(buf);
  632. }
  633. }
  634. void CMainFrame::OnUpdateMistartservice(CCmdUI* pCmdUI) 
  635. {
  636. // TODO: Add your command update UI handler code here
  637. pCmdUI->Enable(!m_bServerRunning);
  638. }
  639. void CMainFrame::OnUpdateMistopservice(CCmdUI* pCmdUI) 
  640. {
  641. // TODO: Add your command update UI handler code here
  642. pCmdUI->Enable(m_bServerRunning);
  643. }
  644. void CMainFrame::OnUpdateMianswer(CCmdUI* pCmdUI) 
  645. {
  646. // TODO: Add your command update UI handler code here
  647. pCmdUI->SetCheck(m_bAnswer);
  648. }
  649. void CMainFrame::init_option(LPOPTION pOption)
  650. {
  651. pOption->m_bSaveToLog=FALSE;
  652. pOption->m_iLogItemCount=200;
  653. pOption->m_bShowDataHead=TRUE;
  654. pOption->m_iServerPort=30243;
  655. pOption->m_bSysAutoPoll=TRUE;
  656. pOption->m_iPollTimeInterval=30;
  657. pOption->m_iOffLineTime=120;
  658. pOption->m_bShowHead=TRUE;
  659. pOption->m_bHexShow=TRUE;
  660. }
  661. void CMainFrame::GetPara(int tabindex)
  662. {
  663. CSettingDlg sdlg(NULL,tabindex,!m_bServerRunning);
  664. sdlg.m_bSaveToLog=m_option.m_bSaveToLog;
  665. sdlg.m_iLogItemCount.Format("%d",m_option.m_iLogItemCount);
  666. sdlg.m_iOffLineTime.Format("%d",m_option.m_iOffLineTime);
  667. sdlg.m_iPollTime.Format("%d",m_option.m_iPollTimeInterval);
  668. sdlg.m_iServerPort.Format("%d",m_option.m_iServerPort);
  669. sdlg.m_bSysAutoPoll=m_option.m_bSysAutoPoll;
  670. sdlg.m_bShowHead=m_option.m_bShowHead;
  671. sdlg.m_bHexShow=m_option.m_bHexShow;
  672. if (IDOK==sdlg.DoModal())
  673. {
  674. m_option.m_bSaveToLog=sdlg.m_bSaveToLog;
  675. m_option.m_iLogItemCount=atoi(sdlg.m_iLogItemCount.GetBuffer(0));
  676. m_option.m_iOffLineTime=atoi(sdlg.m_iOffLineTime.GetBuffer(0));
  677. m_option.m_iPollTimeInterval=atoi(sdlg.m_iPollTime.GetBuffer(0));
  678. m_option.m_iServerPort=atoi(sdlg.m_iServerPort.GetBuffer(0));
  679. m_option.m_bSysAutoPoll=sdlg.m_bSysAutoPoll;
  680.     m_option.m_bShowHead=sdlg.m_bShowHead;
  681.     m_option.m_bHexShow=sdlg.m_bHexShow;
  682. }
  683. }
  684. void CMainFrame::SetUserId(char *szUserId)
  685. {
  686. strncpy(this->m_userid,szUserId,11);
  687. this->m_userid[11]='';
  688. }
  689. void CMainFrame::OnUpdateShowmenu(CCmdUI* pCmdUI) 
  690. {
  691.     pCmdUI->SetCheck(m_wndMenuBar.IsWindowVisible());
  692. }
  693. void CMainFrame::OnMiofflineall() 
  694. {
  695.     do_close_all_user(NULL);
  696. this->RefreshUserTable();
  697. }
  698. void CMainFrame::OnMiviewword() 
  699. {
  700. // TODO: Add your command handler code here
  701.     if (!IsWindowVisible()) 
  702. return;
  703. CRect rect; 
  704. m_viewword=!m_viewword;
  705.     m_wndToolBar.SetShowWord(m_viewword);
  706.     m_wndToolBar.GetItemRect(0,&rect); 
  707. if (m_viewword)
  708. {
  709.     m_wndToolBar.SetSizes(CSize(SHOWTEXTLEN,rect.Size().cy),CSize(32,32));
  710. }
  711. else
  712. {
  713.         m_wndToolBar.SetSizes(CSize(NOTEXTLEN,rect.Size().cy),CSize(32,32));
  714. }
  715. ShowControlBar(&m_wndToolBar,TRUE,FALSE);
  716. }
  717. void CMainFrame::OnUpdateMiviewword(CCmdUI* pCmdUI) 
  718. {
  719. pCmdUI->Enable(m_wndToolBar.IsWindowVisible());
  720.     pCmdUI->SetCheck(m_viewword);
  721. }
  722. BOOL CMainFrame::IsShowToolBarWord()
  723. {
  724. return m_viewword;
  725. }
  726. int CMainFrame::CompareDateTimeAndNow(char * szDateTime)
  727. {
  728.     int nYear,nMonth,nDay,nHour,nMin,nSec;
  729. char temp[20];
  730.     memset(temp,0,20);
  731. strncpy(temp,szDateTime,4);
  732. nYear = atoi(temp);
  733. memset(temp,0,20);
  734. strncpy(temp,&(szDateTime[5]),2);
  735. nMonth = atoi(temp);
  736. memset(temp,0,20);
  737. strncpy(temp,&(szDateTime[8]),2);
  738. nDay = atoi(temp);
  739. memset(temp,0,20);
  740. strncpy(temp,&(szDateTime[11]),2);
  741. nHour = atoi(temp);
  742. memset(temp,0,20);
  743. strncpy(temp,&(szDateTime[14]),2);
  744. nMin = atoi(temp);
  745. memset(temp,0,20);
  746. strncpy(temp,&(szDateTime[17]),4);
  747. nSec = atoi(temp);
  748. CTime updatetime(nYear,nMonth,nDay,nHour,nMin,nSec);
  749. time_t stUpdatetime = updatetime.GetTime();
  750. CTime currenttime = CTime::GetCurrentTime();
  751.     return (currenttime.GetTime()-stUpdatetime);
  752. }
  753. void CMainFrame::AddToSysMenu()
  754. {
  755. CMenu *pMenu;
  756. pMenu=this->GetSystemMenu(FALSE);
  757. ASSERT(pMenu);
  758. pMenu->AppendMenu(MF_SEPARATOR);
  759. //pMenu->AppendMenu(MF_STRING,NEWMENUITEM,"显示工具栏");
  760. pMenu->AppendMenu(MF_STRING,ID_SHOWMENU,"显示/隐藏菜单栏(&U)");
  761. pMenu->AppendMenu(MF_STRING,ID_VIEW_TOOLBAR,"显示/隐藏工具栏(&T)");
  762. }
  763. LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  764. {
  765. // TODO: Add your specialized code here and/or call the base class
  766.     if (WM_SYSCOMMAND==message)
  767. {
  768. if (ID_VIEW_TOOLBAR==wParam)
  769. {
  770. ShowControlBar(&m_wndToolBar,!m_wndToolBar.IsWindowVisible(),FALSE);
  771. return 0;
  772. }
  773. else if (ID_SHOWMENU==wParam)
  774. {
  775. ShowControlBar(&m_wndMenuBar,!m_wndMenuBar.IsWindowVisible(),FALSE);
  776. return 0;
  777. }
  778. }
  779. return CFrameWnd::WindowProc(message, wParam, lParam);
  780. }
  781. void CMainFrame::OnUserinfoin() 
  782. {
  783. int i;
  784. int nMaxUser;
  785. user_info UserInfo;
  786. FILE *fp;
  787. int  nBytesRead;
  788. fp = fopen("UserInfo.dat", "r");
  789. if (NULL == fp)
  790. {
  791. return;
  792. }
  793. DeleteAllUser();
  794. nMaxUser = get_max_user_amount();
  795. for (i=0; i<nMaxUser; i++)
  796. {
  797. nBytesRead = fread((char *)&UserInfo, 1, sizeof(user_info), fp);
  798. *((time_t *)UserInfo.m_update_time) = time(NULL);
  799. if (nBytesRead < sizeof(user_info))
  800. {
  801. break;
  802. }
  803. AddOneUser(&UserInfo);
  804. }
  805. fclose(fp);
  806. RefreshUserTable(0);
  807. }
  808. void CMainFrame::OnUserinfoout() 
  809. {
  810. int i;
  811. int nMaxUser;
  812. user_info UserInfo;
  813. FILE *fp;
  814. fp = fopen("UserInfo.dat", "w");
  815. if (NULL == fp)
  816. {
  817. return;
  818. }
  819. nMaxUser = get_max_user_amount();
  820. for (i=0; i<nMaxUser; i++)
  821. {
  822. get_user_at(i, &UserInfo);
  823. if (1 == UserInfo.m_status)
  824. {
  825. fwrite((char *)&UserInfo, 1, sizeof(user_info), fp);
  826. }
  827. }
  828. fclose(fp);
  829. }
  830. void CMainFrame::OnMenusmsstart() 
  831. {
  832. // TODO: Add your command handler code here
  833. //需要配置波特率、数据位、停止位、校验码,其余不需配置;
  834. /*Test SMM call 
  835.  *Add by sea on sep 16,2003"*/
  836. int iResult = 0;
  837. DCB dcb;
  838. dcb.BaudRate = 115200;
  839. dcb.ByteSize = 8;
  840. dcb.StopBits = 0;//ONESTOPBITS;
  841. dcb.Parity = 0 ;
  842.     iResult = SMMInit("202.96.134.133",5001,
  843.  "COM5", &dcb,
  844.  "13800755500","13510006407",1);
  845. if(iResult<0) 
  846. AddTextToEditView("smm error",false);
  847. SMMSetting("10.0.0.1",5002);
  848. SetModemType(1);
  849. iResult = MakeDTUOnLine(1,"13902944285");
  850. // AfxBeginThread(pfnReadData,this,THREAD_PRIORITY_NORMAL);
  851. }
  852. void CMainFrame::OnMenusmsexit() 
  853. {
  854. // TODO: Add your command handler code here
  855. // g_nCount = 200;
  856. SMMFree();
  857. }
  858. void CMainFrame::OnAdduser() 
  859. {
  860. // TODO: Add your command handler code here
  861. if(!m_IsAdduserDlg)
  862. {
  863. m_IsAdduserDlg=TRUE;
  864.     CAddUserDlg * adduserdlg=new CAddUserDlg;
  865.     adduserdlg->Create (IDD_AddUser,this);
  866.     adduserdlg->ShowWindow (SW_SHOW);
  867. }
  868.     return;
  869. }
  870. void CMainFrame::OnDeleteUser() 
  871. {
  872. // TODO: Add your command handler code here
  873. if (11==strlen(m_userid))
  874. {
  875. delete_one_user((unsigned char *)m_userid,NULL);
  876. this->RefreshUserTable();
  877. }
  878. }
  879. void CMainFrame::OnUpdateAdduser(CCmdUI* pCmdUI) 
  880. {
  881. // TODO: Add your command update UI handler code here
  882. pCmdUI->Enable(m_bServerRunning);
  883. }
  884. void CMainFrame::OnUpdateDeleteUser(CCmdUI* pCmdUI) 
  885. {
  886. // TODO: Add your command update UI handler code here
  887. pCmdUI->Enable(m_bServerRunning);
  888. }
  889. void CMainFrame::OnUpdateUserinfoin(CCmdUI* pCmdUI) 
  890. {
  891. // TODO: Add your command update UI handler code here
  892. pCmdUI->Enable(m_bServerRunning);
  893. }
  894. void CMainFrame::OnUpdateUserinfoout(CCmdUI* pCmdUI) 
  895. {
  896. // TODO: Add your command update UI handler code here
  897. pCmdUI->Enable(m_bServerRunning);
  898. }
  899. void CMainFrame::OnDisconnectPpp() 
  900. {
  901. // TODO: Add your command handler code here
  902. if (11==strlen(m_userid))
  903. {
  904. do_disconnect_ppp_link((unsigned char *)m_userid,NULL);
  905. }
  906. }
  907. void CMainFrame::OnUpdateDisconnectPpp(CCmdUI* pCmdUI) 
  908. {
  909. // TODO: Add your command update UI handler code here
  910. pCmdUI->Enable(m_bServerRunning);
  911. }
  912. void CMainFrame::OnStopToSend() 
  913. {
  914. // TODO: Add your command handler code here
  915. if (11==strlen(m_userid))
  916. {
  917. do_stop_send_data((unsigned char *)m_userid,NULL);
  918. }
  919. }
  920. void CMainFrame::OnUpdateStopToSend(CCmdUI* pCmdUI) 
  921. {
  922. // TODO: Add your command update UI handler code here
  923. pCmdUI->Enable(m_bServerRunning);
  924. }
  925. void CMainFrame::OnStartToSend() 
  926. {
  927. // TODO: Add your command handler code here
  928. if (11==strlen(m_userid))
  929. {
  930. do_start_send_data((unsigned char *)m_userid,NULL);
  931. }
  932. }
  933. void CMainFrame::OnUpdateStartToSend(CCmdUI* pCmdUI) 
  934. {
  935. // TODO: Add your command update UI handler code here
  936. pCmdUI->Enable(m_bServerRunning);
  937. }
  938. void CMainFrame::OnDiscardData() 
  939. {
  940. // TODO: Add your command handler code here
  941. if (11==strlen(m_userid))
  942. {
  943. do_flush_cache_data((unsigned char *)m_userid,NULL);
  944. }
  945. }
  946. void CMainFrame::OnUpdateDiscardData(CCmdUI* pCmdUI) 
  947. {
  948. // TODO: Add your command update UI handler code here
  949. pCmdUI->Enable(m_bServerRunning);
  950. }
  951. void CMainFrame::OnMenuwndhidtree() 
  952. {
  953. // this->GetLeftPane()->ShowWindow(SW_HIDE);
  954. int col1,col2;
  955. m_wndSplitter.SetColumnInfo(0,0,0);
  956. m_wndSplitter.RecalcLayout();
  957. m_wndSplitter.GetColumnInfo(1,col1,col2);
  958. col1;
  959. col2;
  960. }
  961. void CMainFrame::OnMenuwndhidlist() 
  962. {
  963. //this->GetRightPane()->ShowWindow(SW_HIDE);
  964. m_wndSplitter2.SetRowInfo(0,700,0);
  965. m_wndSplitter2.RecalcLayout();
  966. //  m_wndSplitter.RecalcLayout();
  967. // m_wndSplitter.SetColumnInfo(1,50,0);
  968. m_wndSplitter.RecalcLayout();
  969. }
  970. void CMainFrame::OnMenuwndhidedit() 
  971. {
  972. m_wndSplitter.SetColumnInfo(0,130,0);
  973. m_wndSplitter.RecalcLayout();
  974. }