1、框架窗口类实现文件
MainFrm.cpp为窗口类实现文件,包含了窗口框架类CMainFrame的成员函数实现代码。


// MainFrm.cpp: CMainFrame 类的实现
//#include "pch.h"
#include "framework.h"
#include "MFCApplication1.h"#include "MainFrm.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)const int  iMaxUserToolbars = 10;
const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)ON_WM_CREATE()ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
END_MESSAGE_MAP()static UINT indicators[] =
{ID_SEPARATOR,           // 状态行指示器ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,
};// CMainFrame 构造/析构CMainFrame::CMainFrame() noexcept
{// TODO: 在此添加成员初始化代码theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2008);
}CMainFrame::~CMainFrame()
{}
//OnCreate创建工具栏m_wndToolBar
//创建菜单栏m_wndMenuBar
//创建状态栏m_wndStatusBar
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)return -1;BOOL bNameValid;if (!m_wndMenuBar.Create(this)){TRACE0("未能创建菜单栏\n");return -1;      // 未能创建}m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);// 防止菜单栏在激活时获得焦点CMFCPopupMenu::SetForceMenuFocus(FALSE);if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)){TRACE0("未能创建工具栏\n");return -1;      // 未能创建}CString strToolBarName;bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD);ASSERT(bNameValid);m_wndToolBar.SetWindowText(strToolBarName);CString strCustomize;bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);ASSERT(bNameValid);m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);// 允许用户定义的工具栏操作: InitUserToolbars(nullptr, uiFirstUserToolBarId, uiLastUserToolBarId);if (!m_wndStatusBar.Create(this)){TRACE0("未能创建状态栏\n");return -1;      // 未能创建}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));// TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);// 启用 Visual Studio 2005 样式停靠窗口行为CDockingManager::SetDockingMode(DT_SMART);// 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为EnableAutoHidePanes(CBRS_ALIGN_ANY);// 基于持久值设置视觉管理器和样式OnApplicationLook(theApp.m_nAppLook);// 启用工具栏和停靠窗口菜单替换EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);// 启用快速(按住 Alt 拖动)工具栏自定义CMFCToolBar::EnableQuickCustomization();if (CMFCToolBar::GetUserImages() == nullptr){// 加载用户定义的工具栏图像if (m_UserImages.Load(_T(".\\UserImages.bmp"))){CMFCToolBar::SetUserImages(&m_UserImages);}}// 启用菜单个性化(最近使用的命令)// TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。CList<UINT, UINT> lstBasicCommands;lstBasicCommands.AddTail(ID_FILE_NEW);lstBasicCommands.AddTail(ID_FILE_OPEN);lstBasicCommands.AddTail(ID_FILE_SAVE);lstBasicCommands.AddTail(ID_APP_EXIT);lstBasicCommands.AddTail(ID_EDIT_CUT);lstBasicCommands.AddTail(ID_EDIT_PASTE);lstBasicCommands.AddTail(ID_EDIT_UNDO);lstBasicCommands.AddTail(ID_APP_ABOUT);lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR);lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003);lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005);lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE);lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER);lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK);lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA);lstBasicCommands.AddTail(ID_VIEW_APPLOOK_WINDOWS_7);CMFCToolBar::SetBasicCommands(lstBasicCommands);return 0;
}
//PreCreateWindow虚函数,创建一个非默认风格的窗口,可重载该函数
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{if( !CFrameWndEx::PreCreateWindow(cs) )return FALSE;// TODO: 在此处通过修改//  CREATESTRUCT cs 来修改窗口类或样式return TRUE;
}// CMainFrame 诊断
//用于调试
//AssertValid()诊断CMainFrame是否有效。
//Dump输出CMainFrame状态信息
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{CFrameWndEx::AssertValid();
}void CMainFrame::Dump(CDumpContext& dc) const
{CFrameWndEx::Dump(dc)M
void CMainFrame::OnViewCustomize()
{CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog(this, TRUE /* 扫描菜单*/);pDlgCust->EnableUserDefinedToolbars();pDlgCust->Create();
}LRESULT CMainFrame::OnToolbarCreateNew(WPARAM wp,LPARAM lp)
{LRESULT lres = CFrameWndEx::OnToolbarCreateNew(wp,lp);if (lres == 0){return 0;}CMFCToolBar* pUserToolbar = (CMFCToolBar*)lres;ASSERT_VALID(pUserToolbar);BOOL bNameValid;CString strCustomize;bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);ASSERT(bNameValid);pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);return lres;
}void CMainFrame::OnApplicationLook(UINT id)
{CWaitCursor wait;theApp.m_nAppLook = id;switch (theApp.m_nAppLook){case ID_VIEW_APPLOOK_WIN_2000:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));break;case ID_VIEW_APPLOOK_OFF_XP:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));break;case ID_VIEW_APPLOOK_WIN_XP:CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));break;case ID_VIEW_APPLOOK_OFF_2003:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));CDockingManager::SetDockingMode(DT_SMART);break;case ID_VIEW_APPLOOK_VS_2005:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));CDockingManager::SetDockingMode(DT_SMART);break;case ID_VIEW_APPLOOK_VS_2008:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008));CDockingManager::SetDockingMode(DT_SMART);break;case ID_VIEW_APPLOOK_WINDOWS_7:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));CDockingManager::SetDockingMode(DT_SMART);break;default:switch (theApp.m_nAppLook){case ID_VIEW_APPLOOK_OFF_2007_BLUE:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);break;case ID_VIEW_APPLOOK_OFF_2007_BLACK:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);break;case ID_VIEW_APPLOOK_OFF_2007_SILVER:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);break;case ID_VIEW_APPLOOK_OFF_2007_AQUA:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);break;}CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));CDockingManager::SetDockingMode(DT_SMART);}RedrawWindow(nullptr, nullptr, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
}void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
{pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
}BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
{// 基类将执行真正的工作if (!CFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext)){return FALSE;}// 为所有用户工具栏启用自定义按钮BOOL bNameValid;CString strCustomize;bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);ASSERT(bNameValid);for (int i = 0; i < iMaxUserToolbars; i ++){CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i);if (pUserToolbar != nullptr){pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);}}return TRUE;
}

VC++拾遗(1)-框架类相关推荐

  1. 孙鑫VC++LESSON3:MFC框架程序剖析

      MFC是微软提供给我们的基础类库,是一套面向对象的函数库,以类的方式提供给我们使用,利用这些类可以有效地完成基于Windows的应用程序开发.   对于在main函数之前定义的全局变量,他在进入入 ...

  2. c mysql封装 jdbc_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  3. MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法

    1.获取应用程序指针  CMyApp* pApp=(CMyApp*)AfxGetApp(); 2.获取主框架指针  CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针  CMai ...

  4. 文档类CDocument、子框架类CFrameWnd及视图类CView的关系及如何相互调用

    文档类.子框架类及视图类的关系及如何相互调用 收藏 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间的关系封装了起来,初学的朋友往往不得要领,因此写程序往 ...

  5. 黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

    ------- android培训.java培训.期待与您交流! ---------- 黑马程序员-----集合框架类(四) 高级for循环.方法的可变参数及静态导入 1.1 高级for循环(示例1) ...

  6. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)...

    最近看老罗的视频,跟着完成了利用Java操作MySQL数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  7. mysql封装 javabean,利用Java针对MySql封装的jdbc框架类JdbcUtils完整实现(包含增删改查、JavaBean反射原理,附源码)...

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  8. java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...

    近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...

  9. 【java】创建一个顶层框架类的对象

    创建一个顶层框架类的对象 package p1; import javax.swing.*; import java.awt.*; public class Java_3{static final i ...

最新文章

  1. 1小时学会:最简单的iOS直播推流(一)介绍
  2. Debian 9 安装ASP .NET CORE
  3. 我的人工智能机器人的游戏
  4. .NET托管内存类应用的内存泄漏分析和诊断
  5. 2022-03-17
  6. 产品经理挑战赛,你敢来吗?
  7. 网络运维装linux,网络安装linux系统
  8. 14个超有料的优质公众号,关注了就舍不得删
  9. NOIP模拟测试38「金·斯诺·赤」
  10. Luogu 1019 单词接龙
  11. android byte[] 转string 好多问号_Android 仿抖音实现动态壁纸
  12. 【数据库系统】关系模型、关系、元组、属性、关系实例
  13. 拼多多上买车,累计上线70个小时,成交订单9463笔!
  14. 自顶向下红黑树java,【CPP】各种各样的树(9)——自顶向下的红黑树
  15. 代码高亮与美化的工具
  16. 停车场系统管理数据库设计说明书
  17. hadoop put命令的格式_Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)...
  18. WebSocket协议数据格式解析
  19. Linux环境下ARM开发工具TrueSTUDIO初体验
  20. Apache Velocity 模板语言 特殊字符${ $!{ 原样输出问题 转义符 # ! 无效

热门文章

  1. Android Input子系统 - PhoneWindowManager
  2. 【c语言写计算器】利用函数写一个计算器 包括菜单功能和加减乘除四个功能
  3. 匹配滤波(脉冲压缩)
  4. 细说varchar与char有哪些区别?
  5. Java 线程间通信
  6. 《重构-改善既有代码的设计》第二章
  7. 嵌入式技术学习分享如何系统提升技能
  8. Scientific Understand软件使用教程
  9. Jiathis 使用
  10. 新下载的go项目如何下载依赖包