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

📄 mast.cpp

📁 是一本很经典的书
💻 CPP
字号:
///////////////////////////////////////////////////////////////////
// Module   : MAST.CPP
//
// Purpose  : Implementation of an MFC program that uses Menu,  
//            keyboard Accelerator, and String Table resources.
//
// Author   : Rob McGregor, rob_mcgregor@compuserve.com
//        
// Date     : 04-05-96
///////////////////////////////////////////////////////////////////

#include "mast.h"

// Message map for CMainWnd
BEGIN_MESSAGE_MAP(CMainWnd, CMainFrame)
   ON_WM_CREATE()
   ON_WM_RBUTTONDOWN()
   
   // Menu items
   ON_COMMAND(ID_FILEEXIT, OnMenuFileExit)
   ON_COMMAND(ID_FILEOPEN, OnMenuFileOpen)
   ON_COMMAND(ID_FILESAVE, OnMenuFileSave)
   ON_COMMAND(ID_FILESAVEAS, OnMenuFileSaveAs)
   ON_COMMAND(ID_HELPABOUT, OnMenuHelpAbout)
   
   // Context menu stuff
   ON_COMMAND(ID_CONTEXTMENU1, OnMenuContext1)
   ON_COMMAND(ID_CONTEXTMENU2, OnMenuContext2)
   ON_COMMAND(IDR_CONTEXTMENU, OnContextMenu)

   // custom accelerator message
   ON_COMMAND(ID_MESSAGE1, OnAccelMessage)
END_MESSAGE_MAP()

static UINT auIndicators[] =
{
   ID_SEPARATOR,           // status line indicator
   ID_INDICATOR_CAPS,
   ID_INDICATOR_NUM,
   ID_INDICATOR_SCRL,
};

///////////////////////////////////////////////////////////////////
// CMainWnd::CMainWnd() - constructor

CMainWnd::CMainWnd()
{
   m_pwndStatusBar = new CStatusBar; ASSERT_VALID(m_pwndStatusBar);
   m_pmnuContext   = new CMenu;      ASSERT_VALID(m_pmnuContext);
}

///////////////////////////////////////////////////////////////////
// CMainWnd::~CMainWnd() - destructor

CMainWnd::~CMainWnd()
{
   if (m_pwndStatusBar) 
      delete m_pwndStatusBar;

   if (m_pmnuContext) 
      delete m_pmnuContext; // DestroyMenu is called by MFC
}

///////////////////////////////////////////////////////////////////
// CMainWnd::OnCreate()

int CMainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   // Call inherited handler
   if (CMainFrame::OnCreate(lpCreateStruct) == -1)
      return -1;
   
   // Create a status bar
   if (!m_pwndStatusBar->Create(this))
     {
      TRACE0("Failed to create status bar\n");
      return -1;    
   }

   if (!m_pwndStatusBar->SetIndicators(auIndicators,
           sizeof(auIndicators)/sizeof(UINT)))
   {
      TRACE0("Failed to set status bar indicators\n");
      return -1;    
   }

   // Load the context menu
   BOOL bMenuLoaded = m_pmnuContext->LoadMenu(IDR_CONTEXTMENU);
   return bMenuLoaded;
}

///////////////////////////////////////////////////////////////////
// CMainWnd::OnContextMenu()

void CMainWnd::OnContextMenu()
{
   // Show the context menu with upper-left corner at window center
   CPoint pt;
   pt.x = GetClientWidth() / 2;
   pt.y = GetClientHeight() / 2;
   OnRButtonDown(0, pt);
}

///////////////////////////////////////////////////////////////////
// CMainWnd::OnRButtonDown()

void CMainWnd::OnRButtonDown(UINT nFlags, CPoint point) 
{
   // Convert to local coordinates
   ClientToScreen(&point);

   // Can't use a top level menu for a context menu, so we
   //   must get the first sub menu to use as the context menu
   CMenu* pmnuContext =  m_pmnuContext->GetSubMenu(0);
   
   // Draw the popup context menu, and track it 
   if (pmnuContext)
      pmnuContext->TrackPopupMenu(
         TPM_LEFTALIGN | TPM_RIGHTBUTTON,  // Flags
         point.x, point.y,                 // Position
         this,                             // Owner
         NULL);                            // bounds
   
   // Call inherited method
   CFrameWnd::OnRButtonDown(nFlags, point);
}

///////////////////////////////////////////////////////////////////
// CMainWnd::OnMenuFileExit()

void CMainWnd::OnMenuFileExit()
{
   DestroyWindow();  // kill the window (and the app)
}

///////////////////////////////////////////////////////////////////
// CMainWnd::OnMenuHelpAbout()
                                          
void CMainWnd::OnMenuHelpAbout()
{
   // Display a string table message in a message box
   CString str;
   str.LoadString(IDS_HELPABOUT);
   
   ::MessageBeep(MB_ICONASTERISK);
  
   MessageBox(str, _T("About"), MB_ICONINFORMATION | MB_OK);
}

///////////////////////////////////////////////////////////////////
// CMainWnd::ShowOkMessage()

void CMainWnd::ShowOkMessage(DWORD dwStringTableID)
{
   CString str;
   str.LoadString(dwStringTableID);
   
   // display the resource string inside a message box
   ::MessageBeep(MB_ICONASTERISK); 
   AfxMessageBox(_T(str), MB_ICONINFORMATION | MB_OK);
}

///////////////////////////////////////////////////////////////////
// CMastApp::InitInstance - overrides  CWinApp::InitInstance

BOOL CMastApp::InitInstance()
{
   // Allocate a new frame window object
   CMainWnd* pFrame = new CMainWnd;

   // Initialize the frame window
   if (!pFrame->LoadFrame(IDR_MAINFRAME))
      return FALSE;

   // Show the frame window maximized
   pFrame->ShowWindow(m_nCmdShow);
   pFrame->UpdateWindow();

   // Assign the frame window as the app's main frame window
   this->m_pMainWnd = pFrame;

   return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// Declare, create, and run the application

CMastApp MyApp;

/////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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