PeeperFrm.cpp
上传用户:xztxsm
上传日期:2007-02-12
资源大小:150k
文件大小:29k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // 远程控制软件-偷窥者  主窗口                                               //
  3. // 日期:2001/10/02                                                           //
  4. // 作者:刘东发                                                               //
  5. // Email:dongfa@yeah.net                                                     //
  6. // http://dongfa.yeah.net                                                    //
  7. // OICQ:5584173  阿东                                                        //
  8. // 作者声明:                                                                 //
  9. //     此部分代码全是作者所写,可以随便传播,但要保持文件的完整性,有问题     //
  10. // 或者意见请来信,谢谢!                                                      //
  11. ///////////////////////////////////////////////////////////////////////////////
  12. #include "stdafx.h"
  13. #include "PeeperClient.h"
  14. #include "PeeperFrm.h"
  15. #include "PeeperWnd.h"
  16. #include "PeeperClientDoc.h"
  17. #include "../peeperzip.h"
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23. CMainClientWnd::CMainClientWnd()
  24. {
  25. m_bStretch = FALSE;
  26. }
  27. CMainClientWnd::~CMainClientWnd()
  28. {
  29. }
  30. BEGIN_MESSAGE_MAP(CMainClientWnd, CWnd)
  31. //{{AFX_MSG_MAP(CMainClientWnd)
  32. ON_WM_PAINT()
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. BOOL CMainClientWnd::SetBkBitmap(HBITMAP hBmp, BOOL bStretch)
  36. {
  37. if(m_memDC.m_hDC != NULL)
  38. {
  39. m_memDC.DeleteDC();
  40. }
  41. m_memDC.CreateCompatibleDC(NULL);
  42. BITMAP bm;
  43. ::GetObject(hBmp, sizeof(bm), &bm);
  44. m_szBmp.cx = bm.bmWidth;
  45. m_szBmp.cy = bm.bmHeight;
  46. ::SelectObject(m_memDC.m_hDC, hBmp);
  47. m_bStretch = bStretch;
  48. return TRUE;
  49. }
  50. BOOL CMainClientWnd::PaintBmp()
  51. {
  52. CClientDC dc(this);
  53. if(m_memDC.m_hDC != NULL)
  54. {
  55. CRect rect;
  56. GetClientRect(&rect);
  57. if(m_bStretch)
  58. {
  59. dc.SetStretchBltMode(COLORONCOLOR);
  60. dc.StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(),
  61. &m_memDC, 0, 0, m_szBmp.cx, m_szBmp.cy, SRCCOPY);
  62. }
  63. else
  64. {
  65. int nXn = rect.Width()/m_szBmp.cx;
  66. int nYn = rect.Height()/m_szBmp.cy;
  67. if(rect.Width()%m_szBmp.cx > 0)
  68. nXn ++;
  69. if(rect.Height()%m_szBmp.cy > 0)
  70. nYn ++;
  71. for(int i = 0; i < nXn; i ++)
  72. {
  73. for(int j = 0; j < nYn; j ++)
  74. {
  75. int w = min(m_szBmp.cx, rect.Width() - i*m_szBmp.cx);
  76. int h = min(m_szBmp.cy, rect.Height() - j*m_szBmp.cy);
  77. dc.BitBlt(i*m_szBmp.cx, j*m_szBmp.cy, w, h, &m_memDC, 0, 0, SRCCOPY);
  78. }
  79. }
  80. }
  81. }
  82. return TRUE;
  83. }
  84. void CMainClientWnd::OnPaint() 
  85. {
  86. CPaintDC dc(this);
  87. PaintBmp();
  88. }
  89. IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
  90. BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
  91. //{{AFX_MSG_MAP(CChildFrame)
  92. ON_WM_GETMINMAXINFO()
  93. ON_WM_CREATE()
  94. ON_WM_MDIACTIVATE()
  95. //}}AFX_MSG_MAP
  96. END_MESSAGE_MAP()
  97. CChildFrame::CChildFrame()
  98. {
  99. }
  100. CChildFrame::~CChildFrame()
  101. {
  102. }
  103. int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  104. {
  105. if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
  106. return -1;
  107. ModifyStyleEx(WS_EX_CLIENTEDGE, WS_EX_STATICEDGE);
  108. CRect rect;
  109. GetWindowRect(&rect);
  110. rect.right += 1;
  111. rect.bottom += 1;
  112. MoveWindow(rect);
  113. return 0;
  114. }
  115. BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
  116. {
  117. return CMDIChildWnd::PreCreateWindow(cs);
  118. }
  119. void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
  120. {
  121. lpMMI->ptMaxSize.x = 3200;
  122. lpMMI->ptMaxSize.y = 2400;
  123. lpMMI->ptMaxTrackSize.x = 3200;
  124. lpMMI->ptMaxTrackSize.y = 2400;
  125. CMDIChildWnd::OnGetMinMaxInfo(lpMMI);
  126. }
  127. void CChildFrame::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd) 
  128. {
  129. CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
  130. CMainFrame *pMainWnd = (CMainFrame *)AfxGetMainWnd();
  131. if(pMainWnd)
  132. {
  133. pMainWnd->OnFileNew();
  134. }
  135. }
  136. CPeeperBar::CPeeperBar()
  137. {
  138. }
  139. CPeeperBar::~CPeeperBar()
  140. {
  141. }
  142. BEGIN_MESSAGE_MAP(CPeeperBar, CDialogBar)
  143. //{{AFX_MSG_MAP(CPeeperBar)
  144. //}}AFX_MSG_MAP
  145. END_MESSAGE_MAP()
  146. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
  147. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  148. //{{AFX_MSG_MAP(CMainFrame)
  149. ON_WM_CREATE()
  150. ON_BN_CLICKED(IDC_BTN_COMMAND_EXEC, OnMenuCommand)
  151. ON_UPDATE_COMMAND_UI(ID_FILE_CLOSESERVER, OnUpdateMenuCommand)
  152. ON_WM_GETMINMAXINFO()
  153. ON_BN_CLICKED(IDC_BTN_COMPUTER_EXEC, OnMenuCommand)
  154. ON_BN_CLICKED(IDC_BTN_FILE_EXEC, OnMenuCommand)
  155. ON_BN_CLICKED(IDC_BTN_FILE_SOURCE, OnMenuCommand)
  156. ON_BN_CLICKED(IDC_BTN_FILE_TARGET, OnMenuCommand)
  157. ON_CBN_SELCHANGE(IDC_COMBO_FILE_TYPE, OnMenuCommand)
  158. ON_COMMAND(ID_FILE_CLOSESERVER, OnMenuCommand)
  159. ON_COMMAND(ID_VIEW_SEND, OnMenuCommand)
  160. ON_COMMAND(ID_FILE_MANAGE, OnMenuCommand)
  161. ON_COMMAND(ID_VIEW_COMPUTER, OnMenuCommand)
  162. ON_COMMAND(ID_TOOL_DIBVIEW_FULL, OnMenuCommand)
  163. ON_COMMAND(ID_OPTION_PAUSE, OnMenuCommand)
  164. ON_COMMAND(ID_OPTION_MOUSE_MOVE, OnMenuCommand)
  165. ON_COMMAND(ID_OPTION_MOUSE_LBUTTON, OnMenuCommand)
  166. ON_COMMAND(ID_OPTION_MOUSE_RBUTTON, OnMenuCommand)
  167. ON_COMMAND(ID_OPTION_MOUSE_LDBLCLK, OnMenuCommand)
  168. ON_COMMAND(ID_OPTION_MOUSE_RDBLCLK, OnMenuCommand)
  169. ON_COMMAND(ID_OPTION_KEY, OnMenuCommand)
  170. ON_COMMAND(ID_OPTION_DIB, OnMenuCommand)
  171. ON_COMMAND(ID_OPTION_1BITS, OnMenuCommand)
  172. ON_COMMAND(ID_OPTION_4BITS, OnMenuCommand)
  173. ON_COMMAND(ID_OPTION_8BITS, OnMenuCommand)
  174. ON_COMMAND(ID_OPTION_24BITS, OnMenuCommand)
  175. ON_COMMAND(ID_OPTION_NOZIP, OnMenuCommand)
  176. ON_COMMAND(ID_OPTION_LZ77, OnMenuCommand)
  177. ON_COMMAND(ID_OPTION_LZW, OnMenuCommand)
  178. // ON_COMMAND(ID_OPTION_JPEG, OnMenuCommand)
  179. ON_COMMAND(ID_OPTION_LZSS, OnMenuCommand)
  180. ON_COMMAND(ID_OPTION_ARI, OnMenuCommand)
  181. ON_COMMAND(ID_HELP_REGISTER, OnMenuCommand)
  182. ON_COMMAND(ID_HELP_HELP, OnMenuCommand)
  183. ON_UPDATE_COMMAND_UI(ID_VIEW_SEND, OnUpdateMenuCommand)
  184. ON_UPDATE_COMMAND_UI(ID_FILE_MANAGE, OnUpdateMenuCommand)
  185. ON_UPDATE_COMMAND_UI(ID_VIEW_COMPUTER, OnUpdateMenuCommand)
  186. ON_UPDATE_COMMAND_UI(ID_TOOL_DIBVIEW_FULL, OnUpdateMenuCommand)
  187. ON_UPDATE_COMMAND_UI(ID_OPTION_PAUSE, OnUpdateMenuCommand)
  188. ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_MOVE, OnUpdateMenuCommand)
  189. ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_LBUTTON, OnUpdateMenuCommand)
  190. ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_RBUTTON, OnUpdateMenuCommand)
  191. ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_LDBLCLK, OnUpdateMenuCommand)
  192. ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_RDBLCLK, OnUpdateMenuCommand)
  193. ON_UPDATE_COMMAND_UI(ID_OPTION_KEY, OnUpdateMenuCommand)
  194. ON_UPDATE_COMMAND_UI(ID_OPTION_DIB, OnUpdateMenuCommand)
  195. ON_UPDATE_COMMAND_UI(ID_OPTION_1BITS, OnUpdateMenuCommand)
  196. ON_UPDATE_COMMAND_UI(ID_OPTION_4BITS, OnUpdateMenuCommand)
  197. ON_UPDATE_COMMAND_UI(ID_OPTION_8BITS, OnUpdateMenuCommand)
  198. ON_UPDATE_COMMAND_UI(ID_OPTION_24BITS, OnUpdateMenuCommand)
  199. ON_UPDATE_COMMAND_UI(ID_OPTION_NOZIP, OnUpdateMenuCommand)
  200. ON_UPDATE_COMMAND_UI(ID_OPTION_LZ77, OnUpdateMenuCommand)
  201. ON_UPDATE_COMMAND_UI(ID_OPTION_LZW, OnUpdateMenuCommand)
  202. ON_UPDATE_COMMAND_UI(ID_OPTION_JPEG, OnUpdateMenuCommand)
  203. ON_UPDATE_COMMAND_UI(ID_OPTION_LZSS, OnUpdateMenuCommand)
  204. ON_UPDATE_COMMAND_UI(ID_OPTION_ARI, OnUpdateMenuCommand)
  205. //信息条
  206. ON_UPDATE_COMMAND_UI(ID_STATUS_CONN_INFO, OnUpdateMenuCommand)
  207. ON_UPDATE_COMMAND_UI(ID_STATUS_TIME, OnUpdateMenuCommand)
  208. ON_WM_DRAWITEM()
  209. ON_WM_MEASUREITEM()
  210. //}}AFX_MSG_MAP
  211. END_MESSAGE_MAP()
  212. static UINT indicators[] =
  213. {
  214. ID_SEPARATOR,
  215. ID_STATUS_CONN_INFO,
  216. ID_STATUS_TIME,
  217. };
  218. CMainFrame::CMainFrame()
  219. {
  220. m_bIsFullScreen = FALSE;
  221. }
  222. CMainFrame::~CMainFrame()
  223. {
  224. }
  225. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  226. {
  227. if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  228. return -1;
  229. if (!m_wndToolBar.Create(this) ||
  230. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  231. {
  232. TRACE0("Failed to create toolbarn");
  233. return -1;      // fail to create
  234. }
  235. m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT);
  236. if (!m_wndStatusBar.Create(this) ||
  237. !m_wndStatusBar.SetIndicators(indicators,
  238.   sizeof(indicators)/sizeof(UINT)))
  239. {
  240. TRACE0("Failed to create status barn");
  241. return -1;      // fail to create
  242. }
  243. //改变信息条的区域
  244. UINT nID = 0;
  245. UINT nStyle = 0;
  246. int cxWidth = 0;
  247. m_wndStatusBar.GetPaneInfo(1, nID, nStyle, cxWidth);
  248. m_wndStatusBar.SetPaneInfo(1, nID, nStyle, 200);
  249. UINT nStyle1 = 0;
  250. m_wndStatusBar.GetPaneInfo(0, nID, nStyle1, cxWidth);
  251. m_wndStatusBar.SetPaneInfo(0, nID, nStyle, 200);
  252. m_wndStatusBar.GetPaneInfo(2, nID, nStyle, cxWidth);
  253. m_wndStatusBar.SetPaneInfo(2, nID, nStyle | SBPS_STRETCH, 0);
  254. m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  255. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  256. if (!m_wndCommand.Create(this, IDD_DLGBAR_COMMAND, CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE, IDD_DLGBAR_COMMAND)) { TRACE0("Failed to create dialog bar m_wndCommandn"); return -1; // fail to create }
  257. if (!m_wndFile.Create(this, IDD_DLGBAR_FILE,
  258. CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
  259. IDD_DLGBAR_FILE))
  260. {
  261. TRACE0("Failed to create dialog bar m_wndFilen");
  262. return -1; // fail to create
  263. }
  264. if (!m_wndComputer.Create(this, IDD_DLGBAR_COMPUTER,
  265. CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
  266. IDD_DLGBAR_COMPUTER))
  267. {
  268. TRACE0("Failed to create dialog bar m_wndFilen");
  269. return -1; // fail to create
  270. }
  271. if (!m_wndDibView.Create(this) ||
  272. !m_wndDibView.LoadToolBar(IDR_TOOLBAR_DIBVIEW))
  273. {
  274. TRACE0("Failed to create toolbarn");
  275. return -1;      // fail to create
  276. }
  277. m_wndDibView.ModifyStyle(0, TBSTYLE_FLAT);
  278. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  279. m_wndCommand.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM); m_wndFile.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
  280. m_wndComputer.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
  281. m_wndDibView.EnableDocking(CBRS_ALIGN_ANY);
  282. EnableDocking(CBRS_ALIGN_ANY);
  283. DockControlBar(&m_wndToolBar);
  284. DockControlBar(&m_wndFile, AFX_IDW_DOCKBAR_BOTTOM);
  285. RecalcLayout();
  286. CRect rcMain;
  287. CRect rcTool;
  288. GetWindowRect(&rcMain);
  289. m_wndToolBar.GetWindowRect(&rcTool);
  290. rcMain.top = rcTool.top;
  291. rcMain.left = rcTool.right;
  292. rcMain.bottom = rcMain.top + rcTool.Height();
  293. DockControlBar(&m_wndCommand, AFX_IDW_DOCKBAR_TOP, &rcMain);
  294. RecalcLayout();
  295. GetWindowRect(&rcMain);
  296. m_wndCommand.GetWindowRect(&rcTool);
  297. rcMain.top = rcTool.top;
  298. rcMain.left = rcTool.right;
  299. rcMain.bottom = rcMain.top + rcTool.Height();
  300. DockControlBar(&m_wndComputer, AFX_IDW_DOCKBAR_TOP, &rcMain);
  301. RecalcLayout();
  302. m_wndToolBar.SetWindowText(_T("主工具条"));
  303. m_wndCommand.SetWindowText(_T("命令工具条"));
  304. m_wndFile.SetWindowText(_T("文件操作工具条"));
  305. m_wndComputer.SetWindowText(_T("电脑控制工具条"));
  306. ShowControlBar(&m_wndCommand, FALSE, FALSE);
  307. ShowControlBar(&m_wndComputer, FALSE, FALSE);
  308. ShowControlBar(&m_wndFile, FALSE, FALSE);
  309. ShowControlBar(&m_wndDibView, FALSE, FALSE);
  310. //init some data
  311. CComboBox *pCombo = (CComboBox *)(m_wndCommand.GetDlgItem(IDC_COMBO_COMMAND_TYPE));
  312. if(pCombo)
  313. {
  314. int nItem = pCombo->AddString(_T("消息"));
  315. pCombo->SetItemData(nItem, PL_MSG);
  316. nItem = pCombo->AddString(_T("命令"));
  317. pCombo->SetItemData(nItem, PL_FUNC_EXEC);
  318. pCombo->SetCurSel(0);
  319. }
  320. pCombo = (CComboBox *)(m_wndFile.GetDlgItem(IDC_COMBO_FILE_TYPE));
  321. if(pCombo)
  322. {
  323. int nItem = pCombo->AddString(_T("拷贝到远程"));
  324. pCombo->SetItemData(nItem, PL_FUNC_FILE_COPY_S);
  325. nItem = pCombo->AddString(_T("拷贝到本地"));
  326. pCombo->SetItemData(nItem, PL_FUNC_FILE_COPY_C);
  327. nItem = pCombo->AddString(_T("删除文件"));
  328. pCombo->SetItemData(nItem, PL_FUNC_FILE_DELETE);
  329. nItem = pCombo->AddString(_T("移动文件"));
  330. pCombo->SetItemData(nItem, PL_FUNC_FILE_MOVE);
  331. pCombo->SetCurSel(0);
  332. }
  333. pCombo = (CComboBox *)(m_wndComputer.GetDlgItem(IDC_COMBO_COMPUTER_TYPE));
  334. if(pCombo)
  335. {
  336. int nItem = pCombo->AddString(_T("注销"));
  337. pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+0);
  338. nItem = pCombo->AddString(_T("重启"));
  339. pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+1);
  340. nItem = pCombo->AddString(_T("关机"));
  341. pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+2);
  342. nItem = pCombo->AddString(_T("锁定"));
  343. pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+3);
  344. nItem = pCombo->AddString(_T("解锁"));
  345. pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+4);
  346. pCombo->SetCurSel(0);
  347. }
  348. //设置背景,通过一个图像
  349. m_wndClientWnd.SubclassWindow(m_hWndMDIClient);
  350. HBITMAP hBmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_MAINCLIENT_BK));
  351. m_wndClientWnd.SetBkBitmap(hBmp, FALSE);
  352. ::DeleteObject(hBmp);
  353. //设置自己的风格菜单
  354. m_hPeeperMenu.SetBkImage(IDB_BITMAP_MENU_BK);
  355. // //设置系统菜单
  356. // m_hPeeperSysMenu.AttachMenu(GetSystemMenu(FALSE)->GetSafeHmenu(), 0, CSize(0, 0));
  357. #if 0
  358. HGLOBAL hDib = ::PL_ReadDataFromFile(_T("d:\test.doc"));
  359. #endif 
  360. #if 0 //为了C_LZSS测试
  361. HGLOBAL hUnZip = PL_LZSS_Zip(hDib);
  362. HGLOBAL hZip = PL_LZSS_UnZip(hUnZip);
  363. #endif //为了C_LZSS测试
  364. #if 0//为了C_ARI测试
  365. HGLOBAL hUnZip = PL_ARI_Zip(hDib);
  366. HGLOBAL hZip = PL_ARI_UnZip(hUnZip);
  367. #endif//为了C_ARI测试
  368. #if 0 //为了LZ77测试
  369. HGLOBAL hZip = ::PL_LZ77_Zip(hDib);
  370. HGLOBAL hUnZip = ::PL_LZ77_UnZip(hZip);
  371. #endif
  372. #if 0 // 为了LZW测试
  373. HGLOBAL hZip = PL_LZW_Zip(hDib);
  374. HGLOBAL hUnZip = PL_LZW_UnZip(hZip);
  375. PL_WriteDataToFile(_T("d:\test_lzw.doc"), hUnZip);
  376. #endif
  377. return 0;
  378. }
  379. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  380. {
  381. return CMDIFrameWnd::PreCreateWindow(cs);
  382. }
  383. BOOL CMainFrame::PeeperMenuAttach(HMENU hMenu)
  384. {
  385. BOOL bRet = m_hPeeperMenu.AttachMenu(hMenu, IDR_MAINFRAME, CSize(16, 15));
  386. m_hPeeperMenu.AddToolBar(IDR_TOOLBAR_DIBVIEW, CSize(16, 15));
  387. return bRet;
  388. }
  389. BOOL CMainFrame::PeeperClientMenuAttach(HMENU hMenu)
  390. {
  391. return m_hPeeperClientMenu.AttachMenu(hMenu, IDR_MAINFRAME, CSize(16, 15));
  392. }
  393. int CMainFrame::GetClientCount()
  394. {
  395. int nCount = 0;
  396. POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
  397. while(pos)
  398. {
  399. CDocTemplate* pTemplate = (CDocTemplate*)AfxGetApp()->GetNextDocTemplate(pos);
  400. POSITION pos2 = pTemplate->GetFirstDocPosition();
  401. while(pos2)
  402. {
  403. CDocument * pDocument = pTemplate->GetNextDoc(pos2);
  404. if(pDocument)
  405. {
  406. nCount ++;
  407. }
  408. }
  409. break ;
  410. }
  411. return nCount;
  412. }
  413. CChildFrame *CMainFrame::GetCurFrame()
  414. {
  415. CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  416. if(pFrame)
  417. {
  418. return (CChildFrame *)pFrame->GetActiveFrame();
  419. }
  420. return NULL;
  421. }
  422. CPeeperWnd *CMainFrame::GetCurPeeperWnd()
  423. {  
  424. CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  425. if(pFrame)
  426. {
  427. CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
  428. if(pChild)
  429. {
  430. return (CPeeperWnd *)pChild->GetActiveView();
  431. }
  432. }
  433. return NULL;
  434. }
  435. CPeeperClientDoc *CMainFrame::GetCurPeeperDoc()
  436. {
  437. CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  438. if(pFrame)
  439. {
  440. CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
  441. if(pChild)
  442. {
  443. return (CPeeperClientDoc *)pChild->GetActiveDocument();
  444. }
  445. }
  446. return NULL;
  447. }
  448. void CMainFrame::OnFileClose()
  449. {
  450. CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
  451. if(!pPeeperWnd)
  452. {
  453. ShowControlBar(&m_wndCommand, FALSE, FALSE);
  454. ShowControlBar(&m_wndComputer, FALSE, FALSE);
  455. ShowControlBar(&m_wndFile, FALSE, FALSE);
  456. ShowControlBar(&m_wndDibView, FALSE, FALSE);
  457. RecalcLayout();
  458. }
  459. }
  460. void CMainFrame::OnFileNew()
  461. {
  462. return ;
  463. }
  464. void CMainFrame::OnMenuCommand() 
  465. {
  466. const MSG *pMsg = CWnd::GetCurrentMessage();
  467. if(pMsg != NULL)
  468. {
  469. int nMenuID = (int)(LOWORD(pMsg->wParam));
  470. CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
  471. switch(nMenuID)
  472. {
  473. case ID_VIEW_SEND:
  474. {
  475. ShowControlBar(&m_wndCommand, !(m_wndCommand.IsWindowVisible()), TRUE);
  476. }
  477. break ;
  478. case ID_FILE_MANAGE:
  479. {
  480. ShowControlBar(&m_wndFile, !(m_wndFile.IsWindowVisible()), TRUE);
  481. }
  482. break ;
  483. case ID_VIEW_COMPUTER:
  484. {
  485. ShowControlBar(&m_wndComputer, !(m_wndComputer.IsWindowVisible()), TRUE);
  486. }
  487. break ;
  488. case ID_TOOL_DIBVIEW_FULL:
  489. {
  490. ShowControlBar(&m_wndDibView, !(m_wndDibView.IsWindowVisible()), TRUE);
  491. OnFullScreen();
  492. }
  493. break ;
  494. case ID_FILE_CLOSESERVER:
  495. {
  496. if(pPeeperWnd && pPeeperWnd->GetState())
  497. {
  498. pPeeperWnd->CloseServer();
  499. }
  500. }
  501. break ;
  502. case ID_OPTION_PAUSE:
  503. {
  504. if(pPeeperWnd)
  505. {
  506. BOOL bPause = pPeeperWnd->IsPause();
  507. if(bPause)
  508. {
  509. pPeeperWnd->Resume();
  510. }
  511. else
  512. {
  513. pPeeperWnd->Pause();
  514. }
  515. }
  516. }
  517. break ;
  518. case ID_OPTION_MOUSE_MOVE:
  519. {
  520. if(pPeeperWnd)
  521. {
  522. BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_MOVE);
  523. pPeeperWnd->SetEnableFlag(PL_ENABLE_MOUSE_MOVE, !bOld);
  524. }
  525. }
  526. break ;
  527. case ID_OPTION_MOUSE_LBUTTON:
  528. {
  529. if(pPeeperWnd)
  530. {
  531. BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_LBUTTON);
  532. pPeeperWnd->SetEnableFlag(PL_ENABLE_MOUSE_LBUTTON, !bOld);
  533. }
  534. }
  535. break ;
  536. case ID_OPTION_MOUSE_RBUTTON:
  537. {
  538. if(pPeeperWnd)
  539. {
  540. BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_RBUTTON);
  541. pPeeperWnd->SetEnableFlag(PL_ENABLE_MOUSE_RBUTTON, !bOld);
  542. }
  543. }
  544. break ;
  545. case ID_OPTION_MOUSE_LDBLCLK:
  546. {
  547. if(pPeeperWnd)
  548. {
  549. BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_LDBLCLK);
  550. pPeeperWnd->SetEnableFlag(PL_ENABLE_MOUSE_LDBLCLK, !bOld);
  551. }
  552. }
  553. break ;
  554. case ID_OPTION_MOUSE_RDBLCLK:
  555. {
  556. if(pPeeperWnd)
  557. {
  558. BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_RDBLCLK);
  559. pPeeperWnd->SetEnableFlag(PL_ENABLE_MOUSE_RDBLCLK, !bOld);
  560. }
  561. }
  562. break ;
  563. case ID_OPTION_KEY:
  564. {
  565. if(pPeeperWnd)
  566. {
  567. BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_KEY);
  568. pPeeperWnd->SetEnableFlag(PL_ENABLE_KEY, !bOld);
  569. }
  570. }
  571. break ;
  572. case ID_OPTION_DIB:
  573. {
  574. if(pPeeperWnd)
  575. {
  576. BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_DIB);
  577. pPeeperWnd->SetEnableFlag(PL_ENABLE_DIB, !bOld);
  578. }
  579. }
  580. break ;
  581. case ID_OPTION_1BITS:
  582. case ID_OPTION_4BITS:
  583. case ID_OPTION_8BITS:
  584. case ID_OPTION_24BITS:
  585. {
  586. if(pPeeperWnd)
  587. {
  588. pPeeperWnd->SetColorType(PL_ColorType(nMenuID - ID_OPTION_1BITS));
  589. }
  590. }
  591. break ;
  592. case ID_OPTION_NOZIP:
  593. case ID_OPTION_LZ77:
  594. case ID_OPTION_LZW:
  595. case ID_OPTION_JPEG:
  596. case ID_OPTION_LZSS:
  597. case ID_OPTION_ARI:
  598. {
  599. if(pPeeperWnd)
  600. {
  601. pPeeperWnd->SetZipType(PL_ZipType(nMenuID - ID_OPTION_NOZIP));
  602. }
  603. }
  604. break ;
  605. case IDC_BTN_COMMAND_EXEC:
  606. {
  607. OnExecCommand();
  608. }
  609. break ;
  610. case IDC_BTN_COMPUTER_EXEC:
  611. {
  612. OnExecComputer();
  613. }
  614. break ;
  615. case IDC_BTN_FILE_EXEC:
  616. {
  617. OnExecFile();
  618. }
  619. break ;
  620. case IDC_BTN_FILE_SOURCE:
  621. {
  622. }
  623. break ;
  624. case IDC_BTN_FILE_TARGET:
  625. {
  626. }
  627. break ;
  628. case IDC_COMBO_FILE_TYPE:
  629. {
  630. ;
  631. }
  632. break ;
  633. case ID_HELP_HELP:
  634. {
  635. TCHAR chApp[255];
  636. memset(chApp, 0, sizeof(TCHAR)*255);
  637. GetModuleFileName(NULL, chApp, 255);
  638. CString strApp = CString(chApp);
  639. int nPos = strApp.ReverseFind(_T('\'));
  640. if(nPos > 0)
  641. {
  642. strApp = strApp.Left(nPos);
  643. }
  644. ::ShellExecute(NULL, "open", "Readme.txt", NULL, strApp, 
  645. SW_SHOWNORMAL);
  646. }
  647. break ;
  648. case ID_HELP_REGISTER:
  649. {
  650. CRegisterDlg dlgReg;
  651. dlgReg.DoModal();
  652. dlgReg.m_strUserName;
  653. dlgReg.m_strCode;
  654. }
  655. break ;
  656. default :
  657. break ;
  658. }
  659. }
  660. }
  661. void CMainFrame::OnUpdateMenuCommand(CCmdUI* pCmdUI) 
  662. {
  663. CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
  664. switch(pCmdUI->m_nID)
  665. {
  666. case ID_VIEW_SEND:
  667. {
  668. if(!pPeeperWnd)
  669. {
  670. pCmdUI->Enable(FALSE);
  671. }
  672. pCmdUI->SetCheck(m_wndCommand.IsWindowVisible());
  673. }
  674. break ;
  675. case ID_FILE_MANAGE:
  676. {
  677. if(!pPeeperWnd)
  678. {
  679. pCmdUI->Enable(FALSE);
  680. }
  681. pCmdUI->SetCheck(m_wndFile.IsWindowVisible());
  682. }
  683. break ;
  684. case ID_VIEW_COMPUTER:
  685. {
  686. if(!pPeeperWnd)
  687. {
  688. pCmdUI->Enable(FALSE);
  689. }
  690. pCmdUI->SetCheck(m_wndComputer.IsWindowVisible());
  691. }
  692. break ;
  693. case ID_TOOL_DIBVIEW_FULL:
  694. {
  695. if(!pPeeperWnd)
  696. {
  697. pCmdUI->Enable(FALSE);
  698. ShowControlBar(&m_wndDibView, FALSE, FALSE);
  699. }
  700. else
  701. {
  702. pCmdUI->Enable(TRUE);
  703. }
  704. }
  705. break ;
  706. case ID_FILE_CLOSESERVER:
  707. {
  708. pCmdUI->Enable((pPeeperWnd && pPeeperWnd->GetState()));
  709. }
  710. break ;
  711. case ID_OPTION_PAUSE:
  712. {
  713. if(pPeeperWnd)
  714. {
  715. BOOL bPause = pPeeperWnd->IsPause();
  716. pCmdUI->SetCheck(!bPause);
  717. }
  718. else
  719. {
  720. pCmdUI->Enable(FALSE);
  721. }
  722. }
  723. break ;
  724. case ID_OPTION_MOUSE_MOVE:
  725. {
  726. if(pPeeperWnd)
  727. {
  728. BOOL bSet = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_MOVE);
  729. pCmdUI->SetCheck(bSet);
  730. }
  731. else
  732. {
  733. pCmdUI->Enable(FALSE);
  734. }
  735. }
  736. break ;
  737. case ID_OPTION_MOUSE_LBUTTON:
  738. {
  739. if(pPeeperWnd)
  740. {
  741. BOOL bSet = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_LBUTTON);
  742. pCmdUI->SetCheck(bSet);
  743. }
  744. else
  745. {
  746. pCmdUI->Enable(FALSE);
  747. }
  748. }
  749. break ;
  750. case ID_OPTION_MOUSE_RBUTTON:
  751. {
  752. if(pPeeperWnd)
  753. {
  754. BOOL bSet = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_RBUTTON);
  755. pCmdUI->SetCheck(bSet);
  756. }
  757. else
  758. {
  759. pCmdUI->Enable(FALSE);
  760. }
  761. }
  762. break ;
  763. case ID_OPTION_MOUSE_LDBLCLK:
  764. {
  765. if(pPeeperWnd)
  766. {
  767. BOOL bSet = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_LDBLCLK);
  768. pCmdUI->SetCheck(bSet);
  769. }
  770. else
  771. {
  772. pCmdUI->Enable(FALSE);
  773. }
  774. }
  775. break ;
  776. case ID_OPTION_MOUSE_RDBLCLK:
  777. {
  778. if(pPeeperWnd)
  779. {
  780. BOOL bSet = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_RDBLCLK);
  781. pCmdUI->SetCheck(bSet);
  782. }
  783. else
  784. {
  785. pCmdUI->Enable(FALSE);
  786. }
  787. }
  788. break ;
  789. case ID_OPTION_KEY:
  790. {
  791. if(pPeeperWnd)
  792. {
  793. BOOL bSet = pPeeperWnd->GetEnableFlag(PL_ENABLE_KEY);
  794. pCmdUI->SetCheck(bSet);
  795. }
  796. else
  797. {
  798. pCmdUI->Enable(FALSE);
  799. }
  800. }
  801. break ;
  802. case ID_OPTION_DIB:
  803. {
  804. if(pPeeperWnd)
  805. {
  806. BOOL bSet = pPeeperWnd->GetEnableFlag(PL_ENABLE_DIB);
  807. pCmdUI->SetCheck(bSet);
  808. }
  809. else
  810. {
  811. pCmdUI->Enable(FALSE);
  812. }
  813. }
  814. break ;
  815. case ID_OPTION_1BITS:
  816. case ID_OPTION_4BITS:
  817. case ID_OPTION_8BITS:
  818. case ID_OPTION_24BITS:
  819. {
  820. if(pPeeperWnd)
  821. {
  822. if((UINT)(pPeeperWnd->GetColorType()+ID_OPTION_1BITS) == pCmdUI->m_nID)
  823. {
  824. pCmdUI->SetRadio(TRUE);
  825. }
  826. else
  827. {
  828. pCmdUI->SetRadio(FALSE);
  829. }
  830. }
  831. else
  832. {
  833. pCmdUI->Enable(FALSE);
  834. }
  835. }
  836. break ;
  837. case ID_OPTION_NOZIP:
  838. case ID_OPTION_LZ77:
  839. case ID_OPTION_LZW:
  840. case ID_OPTION_JPEG:
  841. case ID_OPTION_LZSS:
  842. case ID_OPTION_ARI:
  843. {
  844. if(pPeeperWnd)
  845. {
  846. if((UINT)(pPeeperWnd->GetZipType()+ID_OPTION_NOZIP) == pCmdUI->m_nID)
  847. {
  848. pCmdUI->SetRadio(TRUE);
  849. }
  850. else
  851. {
  852. pCmdUI->SetRadio(FALSE);
  853. }
  854. }
  855. else
  856. {
  857. pCmdUI->Enable(FALSE);
  858. }
  859. }
  860. break ;
  861. case ID_STATUS_CONN_INFO:
  862. {
  863. CString strInfo;
  864. if(pPeeperWnd)
  865. {
  866. strInfo = pPeeperWnd->GetClientInfo();
  867. }
  868. else
  869. {
  870. strInfo.LoadString(ID_STATUS_CONN_INFO);
  871. }
  872. m_wndStatusBar.SetPaneText(1, strInfo);
  873. }
  874. break ;
  875. case ID_STATUS_TIME:
  876. {
  877. CString strInfo;
  878. CString str;
  879. strInfo.LoadString(ID_STATUS_TIME);
  880. if(pPeeperWnd)
  881. {
  882. UINT nTime = pPeeperWnd->GetConnectTime();
  883. str.Format(strInfo, nTime/60, nTime%60);
  884. }
  885. else
  886. {
  887. str.Format(strInfo, 0, 0);
  888. }
  889. m_wndStatusBar.SetPaneText(2, str);
  890. }
  891. break ;
  892. default :
  893. break ;
  894. }
  895. }
  896. void CMainFrame::OnFullScreen()
  897. {
  898. CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
  899. CChildFrame *pFrame = GetCurFrame();
  900. if(pPeeperWnd && pFrame)
  901. {
  902. SIZE sz = ::PL_GetScreenSize();
  903. CToolBarCtrl &bcCtrl = m_wndDibView.GetToolBarCtrl();
  904. BOOL bCheck = bcCtrl.IsButtonChecked(ID_TOOL_DIBVIEW_FULL);
  905. bcCtrl.CheckButton(ID_TOOL_DIBVIEW_FULL, !bCheck);
  906. if(!bCheck)
  907. {
  908. if(pFrame->IsZoomed())
  909. {
  910. m_nOldCmdShow = SW_SHOWMAXIMIZED;
  911. }
  912. else
  913. {
  914. m_nOldCmdShow = SW_SHOWNORMAL;
  915. }
  916. pFrame->ShowWindow(SW_SHOWMAXIMIZED);
  917. ShowControlBar(&m_wndDibView, TRUE, FALSE);
  918. FloatControlBar(&m_wndDibView, CPoint(sz.cx - 60, 10));
  919. RecalcLayout(); // must
  920. CRect rc;
  921. CRect rect;
  922. GetWindowRect(&m_rcOldRect);
  923. pPeeperWnd->GetWindowRect(&rc);
  924. rect.left = m_rcOldRect.left - rc.left - 2;
  925. rect.top = m_rcOldRect.top - rc.top - 2;
  926. rect.right = sz.cx + m_rcOldRect.right - rc.right + 2;
  927. rect.bottom = sz.cy + m_rcOldRect.bottom - rc.bottom + 2;
  928. MoveWindow(rect);
  929. m_bIsFullScreen = TRUE;
  930. }
  931. else
  932. {
  933. ShowControlBar(&m_wndDibView, FALSE, FALSE);
  934. pFrame->ShowWindow(m_nOldCmdShow);
  935. DockControlBar(&m_wndDibView);
  936. MoveWindow(m_rcOldRect);
  937. m_bIsFullScreen = FALSE;
  938. }
  939. }
  940. }
  941. void CMainFrame::OnExecCommand() 
  942. {
  943. CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
  944. if(pPeeperWnd)
  945. {
  946. char chData[1024];
  947. ZeroMemory(chData, 1024);
  948. m_wndCommand.GetDlgItemText(IDC_EDIT_COMMAND_INPUT, chData, 1024);
  949. CComboBox *pCombo = (CComboBox *)(m_wndCommand.GetDlgItem(IDC_COMBO_COMMAND_TYPE));
  950. if(pCombo)
  951. {
  952. int nCur = pCombo->GetCurSel();
  953. if(nCur >= 0)
  954. {
  955. int nType = pCombo->GetItemData(nCur);
  956. switch(nType)
  957. {
  958. case PL_MSG:
  959. {
  960. pPeeperWnd->T_SendMsg(chData, 0);
  961. }
  962. break ;
  963. case PL_FUNC_EXEC:
  964. {
  965. pPeeperWnd->T_RunCommand(chData);
  966. }
  967. break ;
  968. default :
  969. break ;
  970. }
  971. }
  972. }
  973. }
  974. }
  975. void CMainFrame::OnExecComputer()
  976. {
  977. CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
  978. if(pPeeperWnd)
  979. {
  980. CComboBox *pCombo = (CComboBox *)(m_wndComputer.GetDlgItem(IDC_COMBO_COMPUTER_TYPE));
  981. if(pCombo)
  982. {
  983. int nCur = pCombo->GetCurSel();
  984. if(nCur >= 0)
  985. {
  986. int nType = pCombo->GetItemData(nCur);
  987. switch(nType)
  988. {
  989. case PL_FUNC_EXITWIN+0:
  990. {
  991. pPeeperWnd->T_ExitWindow(EWX_FORCE | EWX_LOGOFF);
  992. }
  993. break ;
  994. case PL_FUNC_EXITWIN+1:
  995. {
  996. pPeeperWnd->T_ExitWindow(EWX_FORCE | EWX_REBOOT);
  997. }
  998. break ;
  999. case PL_FUNC_EXITWIN+2:
  1000. {
  1001. pPeeperWnd->T_ExitWindow(EWX_FORCE | EWX_SHUTDOWN);
  1002. }
  1003. break ;
  1004. case PL_FUNC_EXITWIN+3:
  1005. {
  1006. pPeeperWnd->T_LockDesktop(TRUE);
  1007. }
  1008. break ;
  1009. case PL_FUNC_EXITWIN+4:
  1010. {
  1011. pPeeperWnd->T_LockDesktop(FALSE);
  1012. }
  1013. break ;
  1014. default :
  1015. break ;
  1016. }
  1017. }
  1018. }
  1019. }
  1020. }
  1021. void CMainFrame::OnExecFile()
  1022. {
  1023. CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
  1024. if(pPeeperWnd)
  1025. {
  1026. char chFile1[512];
  1027. char chFile2[512];
  1028. ZeroMemory(chFile1, 512);
  1029. ZeroMemory(chFile2, 512);
  1030. m_wndFile.GetDlgItemText(IDC_EDIT_FILE_SOURCE, chFile1, 512);
  1031. m_wndFile.GetDlgItemText(IDC_EDIT_FILE_TARGET, chFile2, 512);
  1032. CComboBox *pCombo = (CComboBox *)(m_wndFile.GetDlgItem(IDC_COMBO_FILE_TYPE));
  1033. if(pCombo)
  1034. {
  1035. int nCur = pCombo->GetCurSel();
  1036. if(nCur >= 0)
  1037. {
  1038. int nType = pCombo->GetItemData(nCur);
  1039. switch(nType)
  1040. {
  1041. case PL_FUNC_FILE_COPY_S:
  1042. {
  1043. pPeeperWnd->T_CopyFileToRemote(chFile1, chFile2, NULL);
  1044. }
  1045. break ;
  1046. case PL_FUNC_FILE_COPY_C:
  1047. {
  1048. pPeeperWnd->T_CopyFileFromRemote(chFile1, chFile2, NULL);
  1049. }
  1050. break ;
  1051. case PL_FUNC_FILE_DELETE:
  1052. {
  1053. pPeeperWnd->T_DeleteFile(chFile1);
  1054. }
  1055. break ;
  1056. case PL_FUNC_FILE_MOVE:
  1057. {
  1058. pPeeperWnd->T_MoveFile(chFile1, chFile2);
  1059. }
  1060. break ;
  1061. default :
  1062. break ;
  1063. }
  1064. }
  1065. }
  1066. }
  1067. }
  1068. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  1069. {
  1070. if(pMsg->message == WM_KEYDOWN)
  1071. {
  1072. if(pMsg->wParam == VK_RETURN)
  1073. {
  1074. CWnd *pFoucs = GetFocus();
  1075. if(pFoucs == m_wndCommand.GetDlgItem(IDC_EDIT_COMMAND_INPUT) ||
  1076. pFoucs == m_wndCommand.GetDlgItem(IDC_COMBO_COMMAND_TYPE))
  1077. {
  1078. OnExecCommand();
  1079. }
  1080. else if(pFoucs == m_wndComputer.GetDlgItem(IDC_COMBO_COMPUTER_TYPE))
  1081. {
  1082. OnExecComputer();
  1083. }
  1084. else if(pFoucs == m_wndFile.GetDlgItem(IDC_EDIT_FILE_SOURCE) ||
  1085. pFoucs == m_wndFile.GetDlgItem(IDC_EDIT_FILE_TARGET) ||
  1086. pFoucs == m_wndFile.GetDlgItem(IDC_COMBO_FILE_TYPE))
  1087. {
  1088. OnExecFile();
  1089. }
  1090. }
  1091. else if(m_bIsFullScreen && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_F11))
  1092. {
  1093. OnFullScreen();
  1094. }
  1095. else if(!m_bIsFullScreen && pMsg->wParam == VK_F11)
  1096. {
  1097. OnFullScreen();
  1098. }
  1099. }
  1100. return CMDIFrameWnd::PreTranslateMessage(pMsg);
  1101. }
  1102. void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
  1103. {
  1104. lpMMI->ptMaxSize.x = 3200;
  1105. lpMMI->ptMaxSize.y = 2400;
  1106. lpMMI->ptMaxTrackSize.x = 3200;
  1107. lpMMI->ptMaxTrackSize.y = 2400;
  1108. CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
  1109. }
  1110. void CMainFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
  1111. {
  1112. if(lpDrawItemStruct->CtlType == ODT_MENU)
  1113. {
  1114. m_hPeeperMenu.DrawItem(lpDrawItemStruct);
  1115. return ;
  1116. }
  1117. CMDIFrameWnd::OnDrawItem(nIDCtl, lpDrawItemStruct);
  1118. }
  1119. void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
  1120. {
  1121. if(lpMeasureItemStruct->CtlType == ODT_MENU)
  1122. {
  1123. m_hPeeperMenu.MeasureItem(lpMeasureItemStruct);
  1124. return ;
  1125. }
  1126. CMDIFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
  1127. }