📄 mainfrm.cpp
字号:
// mainfrm.cpp : implementation of the DMainFrame class
//
#include "stdafx.h"
#include "BaseMenu.h"
#include "mainfrm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DMainFrame
IMPLEMENT_DYNCREATE(DMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(DMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(DMainFrame)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_CONTEXT_MENU, OnContextMenu)
ON_COMMAND(ID_FRAME_MINIMIZE, OnFrameMinimize)
ON_COMMAND(ID_FRAME_TOP, OnFrameTop)
ON_COMMAND(ID_MENU_APPEND, OnMenuAppend)
ON_COMMAND(ID_MENU_CHECK, OnMenuCheck)
ON_COMMAND(ID_MENU_ENABLE, OnMenuEnable)
ON_COMMAND(ID_MENU_THIS, OnMenuThis)
ON_UPDATE_COMMAND_UI(ID_MENU_THIS, OnUpdateMenuThis)
ON_COMMAND(ID_TITLE_BYE, OnTitleBye)
ON_COMMAND(ID_TITLE_HELLO, OnTitleHello)
ON_COMMAND(ID_TITLE_QUERY, OnTitleQuery)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////
// arrays of IDs used to initialize control bars
static UINT BASED_CODE indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// DMainFrame construction/destruction
DMainFrame::DMainFrame()
{
d_bCheckState = FALSE; // Start menu item unchecked.
d_bEnableState = TRUE; // Start menu item enabled.
}
DMainFrame::~DMainFrame()
{
// Delete CMenu context menu object.
if (d_pmenuContext)
delete d_pmenuContext;
}
/////////////////////////////////////////////////////////////////////////////
// DMainFrame diagnostics
#ifdef _DEBUG
void DMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void DMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////
// DMainFrame helper functions
//-------------------------------------------------------------------
// Display context menu at indicated client area location.
void DMainFrame::ShowContextMenu(CPoint& point)
{
// Convert client coordinate to screen coordinates.
ClientToScreen(&point);
// Display context menu at mouse location.
CMenu * psubmenu = d_pmenuContext->GetSubMenu(0);
psubmenu->TrackPopupMenu(TPM_LEFTALIGN | // Flags.
TPM_RIGHTBUTTON,
point.x, // x-coord.
point.y, // y-coord.
this); // "this" window.
}
/////////////////////////////////////////////////////////////////////////////
// DMainFrame message handlers
//-------------------------------------------------------------------
// WM_CREATE handler.
int DMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// Allocate CMenu for context menu.
d_pmenuContext = new CMenu();
if (!d_pmenuContext) return -1;
// Initialize CMenu (connect WinAPI menu to CMenu).
BOOL bSuccess = d_pmenuContext->LoadMenu(IDR_TITLE);
if (!bSuccess) return -1;
return 0;
}
//-------------------------------------------------------------------
// WM_PAINT handler.
void DMainFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// Calculate client area center point.
int x, y;
RECT rClient;
GetClientRect(&rClient);
x = rClient.right / 2;
y = rClient.bottom / 2;
// Calculate offset for centering text.
CString cs = _T("<Right Mouse> or Shift+F10 for Context Menu");
CSize cb = dc.GetTextExtent(cs, cs.GetLength());
x -= cb.cx / 2;
y -= cb.cy / 2;
// Draw text.
dc.TextOut(x, y, cs);
// Do not call CFrameWnd::OnPaint() for painting messages
}
//-------------------------------------------------------------------
// WM_RBUTTONDOWN handler.
void DMainFrame::OnRButtonDown(UINT nFlags, CPoint point)
{
ShowContextMenu(point);
CFrameWnd::OnRButtonDown(nFlags, point);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Shift+F10 --or-- Applications key.
void DMainFrame::OnContextMenu()
{
// Display context menu at top right corner of window.
CPoint point(10,10);
ShowContextMenu(point);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Frame|Minimize.
void DMainFrame::OnFrameMinimize()
{
// Send ourselves a system message to minimize.
PostMessage(WM_SYSCOMMAND, SC_MINIMIZE);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Frame|Top Half Move.
void DMainFrame::OnFrameTop()
{
// Ask system for dimensions of screen.
UINT cxWidth = GetSystemMetrics(SM_CXSCREEN);
UINT cyHeight = GetSystemMetrics(SM_CYSCREEN);
// Calculate top half of screen.
cyHeight /= 2;
// Move window.
MoveWindow(0, 0, cxWidth, cyHeight, TRUE);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Menu Item|Append Item.
void DMainFrame::OnMenuAppend()
{
// Fetch menu bar object.
CMenu * pmMain = GetMenu();
// Fetch submenu object using relative menu position.
// 0 1 2 3
// [Frame][Title][Menu Item][Help]
CMenu * pmSub = pmMain->GetSubMenu(2);
// Append new menu item.
pmSub->AppendMenu (MF_STRING, ID_MENU_THIS, _T("&This Item"));
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Menu Item|Check/Uncheck.
void DMainFrame::OnMenuCheck()
{
// Toggle menu check state.
d_bCheckState = (!d_bCheckState);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Menu Item|Enable/Disable.
void DMainFrame::OnMenuEnable()
{
// Toggle menu enable state.
d_bEnableState = (!d_bEnableState);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Menu Item|This Item.
void DMainFrame::OnMenuThis()
{
AfxMessageBox (_T("This menu item merely waits for other\n"
"menu items to change its check state\n"
"and its enable state."));
}
//-------------------------------------------------------------------
// CN_UPDATE_COMMAND_UI handler for Menu Item|This Item.
void DMainFrame::OnUpdateMenuThis(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(d_bCheckState);
pCmdUI->Enable(d_bEnableState);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Title|Say Goodbye.
void DMainFrame::OnTitleBye()
{
SetWindowText(_T("BaseMenu - Goodbye from BaseMenu"));
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Title|Say Hello.
void DMainFrame::OnTitleHello()
{
SetWindowText(_T("BaseMenu - Hello from BaseMenu"));
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Title|Query Text.
void DMainFrame::OnTitleQuery()
{
TCHAR achTitle[100];
GetWindowText (achTitle, 100);
AfxMessageBox(achTitle);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -