⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.h

📁 这是一本学习 window编程的很好的参考教材
💻 H
字号:
// MainFrm.h : interface of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_MAINFRM_H__8D2936ED_9E84_4EEE_92DA_4DDE7CC73914__INCLUDED_)
#define AFX_MAINFRM_H__8D2936ED_9E84_4EEE_92DA_4DDE7CC73914__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "util.h"
#include "view.h"
#include "taskbaricon.h"



#include "dlgtabctrl.h"
#define HAVE_REMOTE

BOOL g_bStart=FALSE;




class CMainFrame : 
   public CMDIFrameWindowImpl<CMainFrame>, 
   public CMDICommands<CMainFrame>,
   public CCustomizableToolBarCommands<CMainFrame>,
   public CUpdateUI<CMainFrame>,
   public CMessageFilter, 
   public CIdleHandler
{
public:
   DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)



   CMDICommandBarXPCtrl m_CmdBar;
   CMultiPaneStatusBarXPCtrl m_StatusBar;
   CMDIContainer m_MDIContainer;
 
   CImageListCtrl m_Images;
   CDotNetDockingWindow m_dock;
   CDialogTabCtrl m_ctrlTab;
  
   CAccelerator m_accel;





 
   CVerView m_view;

 CTaskBarIcon m_ti;

   virtual BOOL PreTranslateMessage(MSG* pMsg)
   {
      if( CMDIFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg) )
         return TRUE;

      if( !m_accel.IsNull() && m_accel.TranslateAccelerator(m_hWnd, pMsg) ) 
         return TRUE;

      HWND hWnd = MDIGetActive();
      if( hWnd != NULL )
         return (BOOL)::SendMessage(hWnd, WM_FORWARDMSG, 0, (LPARAM) pMsg);

       return FALSE;
   }
 
   virtual BOOL OnIdle()
   {
      HWND hWnd = MDIGetActive();
	  UIUpdateToolBar();
	  UISetCheck(ID_SWITCH_WINDOW, ::IsWindowVisible(m_view));

    
 
      m_dock.OnIdle();
	  SetWindowText("以太帧的发送和接收");
	  	
	
      return FALSE;
   }

#ifndef BTNS_SHOWTEXT
#define BTNS_SHOWTEXT           0x0040
#endif  // BTNS_SHOWTEXT

   void AddButtonText(CToolBarCtrl tb, UINT nID, UINT nRes)
   {
      TBBUTTONINFO tbi = { 0 };
      tbi.cbSize = sizeof(TBBUTTONINFO),
      tbi.dwMask  = TBIF_STYLE;
      tb.GetButtonInfo(nID, &tbi);
      tbi.dwMask = TBIF_STYLE | TBIF_TEXT;
      tbi.fsStyle |= TBSTYLE_AUTOSIZE | BTNS_SHOWTEXT;
	  WTL::CString s(MAKEINTRESOURCE(nRes));
      tbi.pszText = (LPTSTR) (LPCTSTR) s;
      tb.SetButtonInfo(nID, &tbi);
   }
   void AddDropDownButton(CToolBarCtrl tb, UINT nID)
   {
      tb.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); 

      TBBUTTONINFO tbi = { 0 };
      tbi.cbSize  = sizeof(TBBUTTONINFO);
      tbi.dwMask  = TBIF_STYLE;
      tb.GetButtonInfo(nID, &tbi);
      tbi.fsStyle |= TBSTYLE_DROPDOWN;
      //tbi.fsStyle |= BTNS_WHOLEDROPDOWN ;      
      tb.SetButtonInfo(nID, &tbi);
   }
   void AddControlToToolbar(CToolBarCtrl tb, HWND hWnd, USHORT cx, UINT nCmdPos, bool bIsCommandId, bool bInsertBefore = true)
   {
      ATLASSERT(::IsWindow(hWnd));
      static UINT s_nCmd = 45000; // Unique number for new toolbar separator
      int iIndex = nCmdPos;
      if( bIsCommandId ) iIndex = tb.CommandToIndex(nCmdPos);
      if( !bInsertBefore ) iIndex++;
      
      // Create a separator toolbar button
      TBBUTTON but = { 0 };
      but.fsStyle = TBSTYLE_SEP;
      but.fsState = TBSTATE_ENABLED;
      but.idCommand = s_nCmd;
      BOOL bRes = tb.InsertButton(iIndex, &but);
      ATLASSERT(bRes);
      bRes;
      TBBUTTONINFO info;
      info.cbSize = sizeof(info);
      info.dwMask = TBIF_SIZE;
      info.cx = cx;
      tb.SetButtonInfo(s_nCmd++, &info);

      // Chain the control to its new parent
      ::SetParent(hWnd, tb);
      // Position the new control on top of the separator
      RECT rc;
      tb.GetItemRect(iIndex, &rc);
      ::SetWindowPos(hWnd, NULL, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, SWP_NOACTIVATE);
   }

   BEGIN_UPDATE_UI_MAP(CMainFrame)
    /*  UPDATE_ELEMENT(ID_FILE_PRINT, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
      UPDATE_ELEMENT(ID_FILE_SAVE, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
      UPDATE_ELEMENT(ID_EDIT_COPY, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)*/
      UPDATE_ELEMENT(ID_EDIT_CLEAR, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
  /*    UPDATE_ELEMENT(ID_EDIT_PASTE, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)*/
	  
 /*     UPDATE_ELEMENT(ID_VIEW_VIEW1, UPDUI_MENUPOPUP)
      UPDATE_ELEMENT(ID_VIEW_VIEW2, UPDUI_MENUPOPUP)*/
	  UPDATE_ELEMENT(ID_SWITCH_WINDOW, UPDUI_MENUPOPUP)
      UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
      UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
   END_UPDATE_UI_MAP()

   BEGIN_MSG_MAP(CMainFrame)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
	  MESSAGE_HANDLER(WM_SIZE, OnSize)
      MESSAGE_HANDLER(WM_CLOSE, OnClose)
	  MESSAGE_HANDLER(WM_NCLBUTTONDOWN, OnNCLButtonDown)
      COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
      COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
	   COMMAND_ID_HANDLER(ID_FILE_CLOSE, OnFileClose)
     COMMAND_ID_HANDLER(ID_SWITCH_WINDOW, OnViewBar)
  
     
	
  /*    COMMAND_ID_HANDLER(ID_TOOLS_CUSTOMIZE, OnToolCustomize)*/
      COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
      COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
   
      COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
	  TASKBAR_MESSAGE_HANDLER(m_ti, WM_LBUTTONDOWN, OnTaskIconClick)
	  CHAIN_MSG_MAP_MEMBER(m_ti)
      //NOTIFY_CODE_HANDLER(TBN_DROPDOWN, OnToolbarDropDown)
      CHAIN_MDI_CHILD_COMMANDS()
      CHAIN_MSG_MAP(CMDICommands<CMainFrame>)
	
	  CHAIN_DOCK_CHILD_COMMANDS(m_view)

      CHAIN_MSG_MAP(CCustomizableToolBarCommands<CMainFrame>)
      CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
      CHAIN_MSG_MAP(CMDIFrameWindowImpl<CMainFrame>)
      // This is actually for the XP combobox
      if( uMsg == WM_COMMAND && LOWORD(wParam) == IDC_COMBO ) REFLECT_NOTIFICATIONS()
   END_MSG_MAP()
   LRESULT OnViewBar(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	  {
		  HWND hWnd;
		  switch( wID ) {
			case ID_SWITCH_WINDOW:
				
				if (!::IsWindow(m_view)) {
					m_view.Create(m_dock, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
					m_view.SetWindowText("窗口切换");
					m_dock.AddWindow(m_view);
					m_dock.DockWindow(m_view, DOCK_LASTKNOWN);
					return 0;
					
				}
				hWnd = m_view;
				break;
			 
			default: return 0;
		  }
		  if( ::IsWindowVisible(hWnd) )
			  m_dock.HideWindow(hWnd); 
		  else 
			  m_dock.DockWindow(hWnd, DOCK_LASTKNOWN);
		  return 0;
	  }
   LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
   {
	  
      // Create command bar window
      HWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);
      // Attach menu
      m_CmdBar.AttachMenu(GetMenu());
      // Load command bar images
      m_CmdBar.LoadImages(IDR_MAINFRAME);
      // Remove old menu
      SetMenu(NULL);

      HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd, IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE | TBSTYLE_LIST | CCS_ADJUSTABLE);
      InitToolBar(hWndToolBar, IDR_MAINFRAME);
      CToolBarCtrl tb = hWndToolBar;
      // Load previously saved button layout
      tb.RestoreState(HKEY_CURRENT_USER, _T("SOFTWARE\\NetChina\\RawPacket"), _T("Toolbar"));
      // Manipulate some toolbar buttons
      // Notice how the TBSTYLE_LIST style was added to place text on the
      // right of the buttons...
   //   AddDropDownButton(tb, ID_FILE_OPEN);
      AddButtonText(tb, ID_FILE_OPEN, IDS_OPEN);
     // AddButtonText(tb, ID_TOOLS_RUN, IDS_RUN);
      tb.AutoSize();
   
      // Create rebar
      CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);
      AddSimpleReBarBand(hWndCmdBar);
      AddSimpleReBarBand(hWndToolBar, NULL, TRUE);

      // Create StatusBar
      m_hWndStatusBar = m_StatusBar.Create(m_hWnd);
      int aPanes[] = { ID_DEFAULT_PANE, IDS_SB_PANE1, IDS_SB_PANE2 };
	 
      m_StatusBar.SetPanes(aPanes, 3);
	  m_StatusBar.SetPaneWidth(IDS_SB_PANE1,280);
	  m_StatusBar.SetPaneWidth(IDS_SB_PANE2,60);
      // Create XP ComboBox in ToolBar
 
      // Create MDI Client
      CreateMDIClient();
      m_CmdBar.SetMDIClient(m_hWndMDIClient);
     
      // Docking Windows
      m_dock.Create(m_hWnd, rcDefault);
      m_dock.SetExtendedDockStyle(DCK_EX_DESTROYONCLOSE);

      // Attach MDI Container (manages the MDI Client and tabbed frame)
      m_MDIContainer.Create(m_dock, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
      m_MDIContainer.SetMDIClient(m_hWndMDIClient);

      // Create docked views
      m_dock.SetClient(m_MDIContainer);
	  m_view.Create(m_dock, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
	  m_view.SetWindowText("窗口切换");
	  m_dock.AddWindow(m_view);
	  m_dock.DockWindow(m_view, DOCK_LEFT);
	 m_dock.SetPaneSize(DOCK_LEFT, 200);
	  m_dock.SetPaneSize(DOCK_RIGHT, 160);




	  m_ti.Install(m_hWnd, 1, IDR_MAINFRAME);


    


      m_hWndClient =m_dock/* m_AutoHide*/;
      m_CmdBar.AddToolbar(hWndToolBar);
      m_CmdBar.Prepare();

      UIAddToolBar(hWndToolBar);
     
	
      UISetCheck(ID_VIEW_TOOLBAR, 1);
      UISetCheck(ID_VIEW_STATUS_BAR, 1);

      // Register object for message filtering and idle updates
      CMessageLoop* pLoop = _Module.GetMessageLoop();
      ATLASSERT(pLoop != NULL);
      pLoop->AddMessageFilter(this);
      pLoop->AddIdleHandler(this);
     PostMessage(WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
      return 0;
   }

  
 
   LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
   {
      // Get the toolbar HWND.
      // Ok, I could have stored it in a member variable,
      // but this is much more fun 8-(
      CReBarCtrl rebar = m_hWndToolBar;
      UINT iBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST + 1); // toolbar is 2nd added band
      REBARBANDINFO rbi = { 0 };
      rbi.cbSize = sizeof(REBARBANDINFO);
      rbi.fMask = RBBIM_CHILD;
      rebar.GetBandInfo(iBandIndex, &rbi);
      CToolBarCtrl tb = rbi.hwndChild;
      tb.SaveState(HKEY_CURRENT_USER, _T("SOFTWARE\\Netchina\\RawPacket"), _T("Toolbar"));

      bHandled = FALSE;
      return 0;
   }
 LRESULT OnNCLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      // Get the toolbar HWND.
      // Ok, I could have stored it in a member variable,
      // but this is much more fun 8-(
	   if(wParam==HTCLOSE||wParam==HTMINBUTTON){
		   PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
		   bHandled=TRUE;
		   return 0;
	   }
	   
		   bHandled=FALSE;
      return 0;
   }
   LRESULT OnFileNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
	   if (CChildFrame::m_nCount==0) {
		   CChildFrame* pChild = new CChildFrame;
		   pChild->CreateEx(m_hWndMDIClient);
      }
     
 
	 
	  return 0;

	 

	 
	  
   }
 
   LRESULT OnFileClose(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
      HWND hWnd = MDIGetActive();
      if( hWnd ) ::PostMessage(hWnd, WM_CLOSE, 0, 0);
      return 0;
   }
   LRESULT OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
      PostMessage(WM_CLOSE);
	
	

	  Sleep(300);
	 






      return 0;
   }

  
   LRESULT OnSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
   {
	   
	   if( wParam==SIZE_MINIMIZED) ShowWindow(SW_HIDE);
	   bHandled = FALSE;
	   return 0;
   }
   LRESULT OnTaskIconClick(LPARAM /*uMsg*/, BOOL& /*bHandled*/)
   {
	   ShowWindow(SW_SHOWNORMAL);
	   ::SetForegroundWindow(m_hWnd);
	   return 0;
   }
 

   LRESULT OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
      static BOOL bVisible = TRUE;   // initially visible
      bVisible = !bVisible;
      CReBarCtrl rebar = m_hWndToolBar;
      int nBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST + 1);   // toolbar is 2nd added band
      rebar.ShowBand(nBandIndex, bVisible);
      UISetCheck(ID_VIEW_TOOLBAR, bVisible);
      UpdateLayout();
      return 0;
   }
   LRESULT OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
      BOOL bVisible = !::IsWindowVisible(m_hWndStatusBar);
      ::ShowWindow(m_hWndStatusBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
      UISetCheck(ID_VIEW_STATUS_BAR, bVisible);
      UpdateLayout();
      return 0;
   }

 
   LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
      CAboutDlg dlg;
      dlg.DoModal();
      return 0;
   }
};


#endif // !defined(AFX_MAINFRM_H__8D2936ED_9E84_4EEE_92DA_4DDE7CC73914__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -