MainFrm.cpp
上传用户:zhenhuadz
上传日期:2007-01-07
资源大小:1511k
文件大小:15k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "anywhere.h"
  5. //所有的视的指针
  6. #include "history.h"//历史记录
  7. #include "sysinfo.h"//系统信息
  8. #include "filesource.h"//文件资源
  9. #include "scrview.h"//看图
  10. #include "remotec.h"
  11. #include "option.h"
  12. #include "thread1.h"
  13. #include "talk.h"
  14. //#include "talksocket.h"
  15. //#include "maincontrol.h"
  16. //#include "leftview.h"//控制菜单
  17. //#include "blocksock.h"
  18. #include "MainFrm.h"
  19. #include "sitebook.h"
  20. //#include "msgman.h"
  21. #include "anywheredoc.h"
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CMainFrame
  29. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  30. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  31.     ON_COMMAND_EX(CG_ID_VIEW_WORKSPACE, OnBarCheck)
  32. ON_UPDATE_COMMAND_UI(CG_ID_VIEW_WORKSPACE, OnUpdateControlBarMenu)
  33. //{{AFX_MSG_MAP(CMainFrame)
  34. ON_WM_CREATE()
  35. ON_WM_DESTROY()
  36. ON_MESSAGE(WM_SETACTIVE,OnSetActive)
  37. ON_COMMAND(ID_VIEWSCR, OnViewscr)
  38. ON_COMMAND(ID_GETINFO, OnGetinfo)
  39. ON_COMMAND(ID_OPTION, OnOption)
  40. ON_COMMAND(ID_SITEBOOK, OnSitebook)
  41. ON_COMMAND(IDS_DISCONNECT, OnDisconnect)
  42. ON_UPDATE_COMMAND_UI(IDS_DISCONNECT, OnUpdateDisconnect)
  43. ON_UPDATE_COMMAND_UI(ID_GETINFO, OnUpdateGetinfo)
  44. ON_UPDATE_COMMAND_UI(ID_LISTFILE, OnUpdateListfile)
  45. ON_UPDATE_COMMAND_UI(ID_VIEWSCR, OnUpdateViewscr)
  46. ON_WM_CLOSE()
  47. ON_UPDATE_COMMAND_UI(ID_OPTION, OnUpdateOption)
  48. //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50. static UINT indicators[] =
  51. {
  52. ID_SEPARATOR,           // status line indicator
  53. ID_INDICATOR_CAPS,
  54. ID_INDICATOR_NUM,
  55. ID_INDICATOR_SCRL,
  56. };
  57. /////////////////////////////////////////////////////////////////////////////
  58. // CMainFrame construction/destruction
  59. CMainFrame::CMainFrame()
  60. {
  61. // TODO: add member initialization code here
  62. //m_pMsgman=new CMsgman;//消息链表管理者
  63. //test code temp linkrc initial
  64. //linkrc.sAddr=CSockAddr("192.168.168.168",7700);
  65. bFirst=true;
  66. }
  67. CMainFrame::~CMainFrame()
  68. {
  69. //delete m_pMsgman;
  70. }
  71. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  72. {
  73. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  74. return -1;
  75. if (!m_wndToolBar.CreateEx(this) ||
  76. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  77. {
  78. TRACE0("Failed to create toolbarn");
  79. return -1;      // fail to create
  80. }
  81.     m_wndToolBar.SetBitmap( IDB_LG,         COOBmpToolBar::LargeHot,         RGB( 33, 231, 222 ) );
  82.     m_wndToolBar.SetBitmap( IDB_LG_BW,      COOBmpToolBar::LargeStandard,   RGB( 33, 231, 222 ) );
  83.     m_wndToolBar.SetBitmap( IDB_LG_DB,      COOBmpToolBar::LargeDisable,     RGB( 170, 170, 170 ) );
  84.     m_wndToolBar.InitImageList();
  85.     // set button to dropdown list
  86.     m_wndToolBar.SetButtonDropDown( ID_FILE_OPEN );
  87.     m_wndToolBar.SetButtonDropDown( ID_FILE_SAVE );
  88.     
  89. /* if (!m_wndDlgBar.Create(this, IDR_MAINFRAME, 
  90. CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
  91. {
  92. TRACE0("Failed to create dialogbarn");
  93. return -1; // fail to create
  94. }
  95. */
  96. if (!m_wndReBar.Create(this) ||
  97. !m_wndReBar.AddBar(&m_wndToolBar))
  98. //||!m_wndReBar.AddBar(&m_wndDlgBar))
  99. {
  100. TRACE0("Failed to create rebarn");
  101. return -1;      // fail to create
  102. }
  103. m_ImageList.Create(IDB_IMAGELIST, 13, 1, RGB(0,255,0));
  104. // CG: The following block was inserted by the 'Dialog Bar' component
  105. {
  106. m_wndWorkspace.SetBtnImageList (&m_ImageList);
  107. m_wndWorkspace.SetMenuID(IDR_MAINFRAME);
  108. // Initialize dialog bar m_wndWorkspace
  109. if (!m_wndWorkspace.Create(this, CG_ID_VIEW_WORKSPACE,
  110. _T("工作区"), CSize(280,200)))
  111. {
  112. TRACE0("Failed to create dialog bar m_wndWorkspacen");
  113. return -1; // fail to create
  114. }
  115. // Add the views to the tab control.
  116. //m_wndWorkspace.AddView(_T("远程机器"),    RUNTIME_CLASS(CHistory));
  117. m_wndWorkspace.AddView(_T("会话"),        RUNTIME_CLASS(CTalk));
  118. //m_wndWorkspace.AddView(_T("历史记录"),    RUNTIME_CLASS(CHistory));
  119. // Define the image list to use with the tab control
  120. m_TabImageList.Create(IDB_IL_TAB, 16, 1, RGB(0,255,0));
  121. m_wndWorkspace.SetTabImageList(&m_TabImageList);
  122. //m_wndWorkspace.EnableToolTips(FALSE);
  123.     // allow bar to be resized when floating
  124.     m_wndWorkspace.SetBarStyle(m_wndWorkspace.GetBarStyle() |
  125.     CBRS_FLYBY | CBRS_SIZE_DYNAMIC|CBRS_TOOLTIPS );
  126. m_wndWorkspace.EnableDocking(CBRS_ALIGN_ANY);
  127. EnableDocking(CBRS_ALIGN_ANY);
  128. DockControlBar(&m_wndWorkspace, AFX_IDW_DOCKBAR_LEFT);
  129. }
  130. /*
  131. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  132. EnableDocking(CBRS_ALIGN_ANY);
  133.     DockControlBar(&m_wndToolBar);
  134. */
  135. if (!m_wndStatusBar.Create(this) ||
  136. !m_wndStatusBar.SetIndicators(indicators,
  137.   sizeof(indicators)/sizeof(UINT)))
  138. {
  139. TRACE0("Failed to create status barn");
  140. return -1;      // fail to create
  141. }
  142. // TODO: Remove this if you don't want tool tips
  143. m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  144. CBRS_TOOLTIPS | CBRS_FLYBY);
  145. /*
  146. {
  147. m_wndOutput.SetBtnImageList (&m_ImageList);
  148. m_wndOutput.SetMenuID(IDR_MAINFRAME);
  149. // Initialize dialog bar m_wndOutput
  150. if (!m_wndOutput.Create(this, CG_ID_VIEW_OUTPUT,
  151. _T("管理窗口"), CSize(200,100)))
  152. {
  153. TRACE0("Failed to create dialog bar m_wndOutputn");
  154. return -1; // fail to create
  155. }
  156.     // allow bar to be resized when floating
  157.     m_wndOutput.SetBarStyle(m_wndOutput.GetBarStyle() |
  158.     CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  159. m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
  160. EnableDocking(CBRS_ALIGN_ANY);
  161. DockControlBar(&m_wndOutput, AFX_IDW_DOCKBAR_BOTTOM);
  162. }
  163. */
  164.  Msginit();
  165.  //test code setactive
  166.  m_Framework.SetActivePane(pObject);
  167.  CenterWindow(GetDesktopWindow());
  168.  /*
  169.   int nIndex;
  170.   TVisualFrameworkIterator it(*m_pFx);
  171.   while (!it.End()) {
  172.     TVisualObject *pObject = it.Get();
  173.     if (pObject->CanFocus()) {
  174.       //nIndex = m_List.AddString(pObject->GetDescription());
  175.   //pObject->GetDescription()
  176.       m_List.SetItemData(nIndex, (DWORD)pObject);
  177.     }
  178.     it ++;
  179.   }
  180.   */
  181. //  m_Framework.SetFont(&m_Font);
  182. return 0;
  183. }
  184. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  185. {
  186. cs.style &=~FWS_ADDTOTITLE;
  187. if( !CFrameWnd::PreCreateWindow(cs) )
  188. return FALSE;
  189.     //cs.style =~FWS_ADDTOTITLE;
  190.     //return CFrameWnd::PreCreateWindow(cs);
  191. // TODO: Modify the Window class or styles here by modifying
  192. //  the CREATESTRUCT cs
  193. return TRUE;
  194. }
  195. /////////////////////////////////////////////////////////////////////////////
  196. // CMainFrame diagnostics
  197. #ifdef _DEBUG
  198. void CMainFrame::AssertValid() const
  199. {
  200. CFrameWnd::AssertValid();
  201. }
  202. void CMainFrame::Dump(CDumpContext& dc) const
  203. {
  204. CFrameWnd::Dump(dc);
  205. }
  206. #endif //_DEBUG
  207. /////////////////////////////////////////////////////////////////////////////
  208. // CMainFrame message handlers
  209. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
  210. {
  211. TVisualObject *pTab=new TVisualObject(20,"",pContext,RUNTIME_CLASS(TTabWnd),TVisualObject::TOS_TABTOP);
  212.     TVisualObject *pTabView1 = new TVisualObject(1,"系统信息", pContext, RUNTIME_CLASS(CSysinfo));
  213.   //TVisualObject *pTabView2 = new TVisualObject(3,"Splitter",1,2,pContext);
  214.     TVisualObject *pTabView2 = new TVisualObject(2,"文件资源", pContext, RUNTIME_CLASS(CFileSource));
  215. TVisualObject *pTab2 = new TVisualObject(11,"远程控制",pContext,RUNTIME_CLASS(TTabWnd),TVisualObject::TOS_TABBOTTOM);
  216. TVisualObject *pTab2View1 = new TVisualObject(3,"控制菜单", pContext,RUNTIME_CLASS(CRemoteC));
  217. //TVisualObject *pTab2View1 = new TVisualObject(5,"控制菜单",1,2, pContext);//, RUNTIME_CLASS(CHistory));
  218. //TVisualObject *pTab2View11=new TVisualObject(6,0,0,pContext,RUNTIME_CLASS(CLeftView),CSize(100,0));
  219. //TVisualObject *pTab2View12=new TVisualObject(7,0,1,pContext,RUNTIME_CLASS(CHistory),CSize(0,0));
  220. //TVisualObject *pTab2View1Sp = new TVisualObject(6,"Splitter",1,2,pContext);
  221. TVisualObject *pTab2View2 = new TVisualObject(4,"查看屏幕", pContext,RUNTIME_CLASS(CScrView));
  222. //TVisualObject *pTab2View3 = new TVisualObject(5,"注册表",pContext,RUNTIME_CLASS(CHistory));
  223. //TVisualObject *pTab3=new TVisualObject(6,"系统设置",pContext,RUNTIME_CLASS(CHistory));
  224.  pTabView1->SetDescription("查看系统消息");
  225.  pTabView2->SetDescription("文件资源");
  226.      pTab2View1->SetDescription("远程控制菜单");
  227.  pTab2View2->SetDescription("查看远程机器屏幕");
  228.  //pTab2View3->SetDescription("注册表"); 
  229.  //pTab3->SetDescription("Manager AnyWhere系统设置");
  230. //TVisualObject *pTabSplitter1 = new TVisualObject(8,"系统设置",1,2,pContext);
  231. //TVisualObject *pSplitLeft     = new TVisualObject(9,0,0,pContext,RUNTIME_CLASS(CHistory),CSize(100,0));
  232. //TVisualObject *pSplitRight    = new TVisualObject(10,0,1,pContext,RUNTIME_CLASS(CHistory),CSize(0,0));
  233. m_Framework.Add(pTab);
  234.     m_Framework.Add(pTab,pTabView1);
  235.     m_Framework.Add(pTab,pTabView2);
  236. m_Framework.Add(pTab,pTab2);
  237. //m_Framework.Add(pTab,pTab3);
  238. m_Framework.Add(pTab2,pTab2View1);
  239. m_Framework.Add(pTab2,pTab2View2);
  240. //m_Framework.Add(pTab2,pTab2View3);
  241. //m_Framework.Add(pTabSplitter1,pSplitLeft);
  242. //m_Framework.Add(pTabSplitter1,pSplitRight);
  243. //m_Framework.Add(pTab2View1,pTab2View11);
  244. //m_Framework.Add(pTab2View1,pTab2View12);
  245.  pTabView1->SetHotKey('1');
  246.  pTabView2->SetHotKey('2');
  247.  pTab2View1->SetHotKey('3');
  248.  pTab2View2->SetHotKey('4');
  249.     //m_Framework.Add(pTab1,pTabView3);
  250. m_Framework.Create(this);
  251.   TVisualFrameworkIterator it(m_Framework);
  252.   while (!it.End()) {
  253.     TVisualObject *pObject = it.Get();
  254.     it++;
  255.   }
  256.   pObject=pTab2View1;
  257.   //m_Framework.SetActiveTab(pTab);
  258.   //SetActiveView((CView *) pTabView1);
  259.   
  260.   
  261.   //m_Framework.SetActiveTab(pTabView1);
  262. return TRUE;
  263. // return CFrameWnd::OnCreateClient(lpcs, pContext);
  264. }
  265. void CMainFrame::OnDestroy() 
  266. {
  267. CFrameWnd::OnDestroy();
  268.    m_Framework.Destroy();
  269. }
  270. void CMainFrame::Msginit()
  271. {
  272.     m_hMainWnd=GetSafeHwnd();
  273. sendevent=CreateEvent(NULL,FALSE,TRUE,NULL);//自动重设
  274. recvevent=CreateEvent(NULL,FALSE,TRUE,NULL);//初始无信号
  275. linkrc.bChat=FALSE;
  276. linkrc.bConnected=FALSE;
  277.     
  278. }
  279. void CMainFrame::ActivateFrame(int nCmdShow) 
  280. {
  281. // TODO: Add your specialized code here and/or call the base class
  282.     CFrameWnd::ActivateFrame(nCmdShow);
  283. //得到文档的指针
  284.   POSITION pos=AfxGetApp()->GetFirstDocTemplatePosition();
  285.   CDocTemplate *ptempl=AfxGetApp()->GetNextDocTemplate(pos);
  286.   POSITION doc_pos=ptempl->GetFirstDocPosition();
  287.   CAnywhereDoc * pDoc=(CAnywhereDoc *)ptempl->GetNextDoc(doc_pos);
  288.   //m_pmsgman=pDoc->m_pmsgman;
  289.   //m_pDoc=pDoc;
  290.   //m_pmsgman->init(GetSafeHwnd());
  291.   //pDoc->m_pFrame=this;//add temp
  292.  
  293.   
  294.   
  295. //to add
  296. CSitebook sitedlg;
  297. if ((IDOK==sitedlg.DoModal())) //& (sitedlg.select))
  298. {
  299.        /*linkrc.ip=sitedlg.m_ip;
  300. linkrc.mainport=sitedlg.mainport;
  301. linkrc.getfileport=sitedlg.getfileport;
  302. linkrc.putfileport=sitedlg.putfileport;
  303. linkrc.viewport=sitedlg.viewport;
  304. linkrc.username=sitedlg.m_username;
  305. linkrc.password=sitedlg.m_password;
  306. linkrc.sAddr=CSockAddr(linkrc.ip,linkrc.mainport);
  307.         //设定主端口及ip
  308.         //strcpy(linkrc.sbuf,linkrc.username);
  309. //strcat(linkrc.sbuf,linkrc.password);
  310. linkrc.bConnected=FALSE;*/
  311. //strcpy(linkrc.sbuf,"GETINFO*");
  312.         /*m_pmsgman->AddMsg("START","开始工作,与远程机器连接",
  313.         first,TRUE,linkrc.sAddr,2);
  314. */
  315.         /*m_pmsgman->AddMsg("GETINFO*","得到远程机器的信息",
  316.         first,TRUE,linkrc.sAddr,2);*/
  317. //m_pmsgman->SendMsg("GETINFO*");
  318. OnGetinfo();
  319.   }
  320. }
  321. LRESULT CMainFrame::OnSetActive(WPARAM wParam, LPARAM lParam)
  322. {
  323.     // TODO: 处理用户自定义消息
  324.     
  325.   //TVisualFramework m_Fx;
  326.   int id=0;
  327.   CString text=*(CString*)lParam;
  328.   /*if (text.Left(8)=="ENDSERVE") {
  329.   id=Respones(text);
  330.   return 1;
  331.   }*/
  332.   if ((BOOL)wParam) {
  333.   id=Respones(text);//处理消息 
  334.   }
  335.   else return 0;//失败返回
  336.     
  337.   //delete (char *)lParam;//
  338.   TVisualFrameworkIterator it(m_Framework);
  339.   while (!it.End()) {
  340.     TVisualObject *pObject = it.Get();
  341.     if ((pObject->CanFocus()) & (pObject->GetID()==id)) {
  342.           
  343. if (id==2) 
  344. ((CFileSource *)(pObject->GetSafeWnd()))->message(text);
  345.         if (id==4)
  346. ((CScrView *)(pObject->GetSafeWnd()))->message(text);
  347.         if (id==1)
  348.     ((CSysinfo *)(pObject->GetSafeWnd()))->message(text);
  349.   m_Framework.SetActivePane(pObject);
  350.   break;
  351.   
  352.       //nIndex = m_List.AddString(pObject->GetDescription());
  353.       //m_List.SetItemData(nIndex, (DWORD)pObject);
  354.     }
  355.     it ++;
  356.   }
  357.   //OnTest2();
  358.          return 0;
  359. }
  360.   
  361. void CMainFrame::OnViewscr() 
  362. {
  363.   DWORD ThreadId;
  364.   strcpy(linkrc.sbuf,"VIEWSCR*");//"查看远程机器屏幕"
  365.   linkrc.m_hWnd=GetSafeHwnd();
  366.   CreateThread(NULL,0,ViewScr,&linkrc,0,&ThreadId);
  367.   //m_pmsgman->SendMsg("VIEWSCR*");
  368.      
  369. }
  370. void CMainFrame::OnGetinfo() 
  371. {
  372.   DWORD ThreadId;
  373.   strcpy(linkrc.sbuf,"GETINFO*");//发送'getinfo*'该信息
  374.   linkrc.m_hWnd=GetSafeHwnd();
  375.   hSend=CreateThread(NULL,0,SendThread,&linkrc,0,&ThreadId);
  376.   /*if (!(m_pmsgman->AddMsg("GETINFO*","请求获得远程机器的系统信息",
  377.     first,TRUE,linkrc.sAddr,2)))
  378.   MessageBox("终止该条命令"," 提示:",MB_OK);
  379.   */
  380.   //m_pmsgman->SendMsg("GETINFO*");
  381.   
  382. }
  383. int CMainFrame::Respones(CString &text)
  384. {
  385. CString order=text.Left(8);
  386. int length=text.GetLength();
  387. text=text.Right(length-8);//text已更改为主要内容
  388. length=text.GetLength();
  389.     
  390. if (order=="GETINFO*")
  391. return 1;
  392. if (order=="VIEWSCR*")
  393. return 4;
  394. if (order=="LISTFILE")
  395. {
  396. text=order+text;
  397. return 2;
  398. }
  399. if (order=="FINDFILE")
  400. {   
  401. text=order+text;
  402. return 2;
  403. }
  404.     if (order=="ENDSERVE")
  405. {
  406.         CString sEnd,caption;
  407. sEnd.LoadString(IDS_ENDSERVER_OK);
  408. caption.LoadString(IDS_CAPTION);
  409. MessageBox(sEnd,caption,MB_OK);
  410. linkrc.bConnected=FALSE;//置为断开连接
  411. }
  412. return 0;//返回值是窗口的id
  413. }
  414. void CMainFrame::OnOption() 
  415. {
  416.   COption option;
  417.   option.DoModal();
  418.   
  419. }
  420. void CMainFrame::OnSitebook() 
  421. {
  422.     CSitebook sitedlg;
  423. if (IDOK==sitedlg.DoModal())// & (sitedlg.select))
  424.      OnGetinfo();
  425.  
  426.   
  427. }
  428. void CMainFrame::OnDisconnect() 
  429. {
  430.   CString sAskmsg,caption;
  431.   sAskmsg.LoadString(IDS_ENDSERVER_ASK);
  432.   caption.LoadString(IDS_CAPTION);
  433.   if (IDYES==MessageBox(sAskmsg,caption,MB_YESNO))
  434.   {
  435.   DWORD ThreadId;
  436.   strcpy(linkrc.sbuf,"ENDSERVE");//发送'getinfo*'该信息
  437.       linkrc.m_hWnd=GetSafeHwnd();
  438.       hSend=CreateThread(NULL,0,SendThread,&linkrc,0,&ThreadId);
  439.   }
  440. }
  441. void CMainFrame::OnUpdateDisconnect(CCmdUI* pCmdUI) 
  442. {
  443.    pCmdUI->Enable(linkrc.bConnected);
  444. }
  445. void CMainFrame::OnUpdateGetinfo(CCmdUI* pCmdUI) 
  446. {
  447. pCmdUI->Enable(linkrc.bConnected);
  448. }
  449. void CMainFrame::OnUpdateListfile(CCmdUI* pCmdUI) 
  450. {
  451.    pCmdUI->Enable(linkrc.bConnected);
  452. }
  453. void CMainFrame::OnUpdateViewscr(CCmdUI* pCmdUI) 
  454. {
  455.    pCmdUI->Enable(linkrc.bConnected);
  456. }
  457. void CMainFrame::OnClose() 
  458. {
  459. if (linkrc.bConnected) {
  460. DWORD ThreadId;
  461. strcpy(linkrc.sbuf,"ENDSERVE");//发送'getinfo*'该信息
  462. linkrc.m_hWnd=GetSafeHwnd();
  463. hSend=CreateThread(NULL,0,SendThread,&linkrc,0,&ThreadId);
  464.     WaitForSingleObject(recvevent,INFINITE);
  465. //Sleep(10000);
  466. }
  467. CFrameWnd::OnClose();
  468. }
  469. void CMainFrame::OnUpdateOption(CCmdUI* pCmdUI) 
  470. {
  471.    pCmdUI->Enable(linkrc.bConnected);
  472.   
  473. }