由于微软在VS2013 及之后不建议再使用 C/C++ 的传统库函数

  scanf,strcpy,sprintf 等,所以直接使用这些库函数会提示 C4996 错误

VS建议采用带 _S的函数,如: scanf_s, strcpy_s , 但这些不是标准 C/C++ 函数。要想继续使用此函数,需要添加  _CRT_SECURE_NO_WARNINGS 这个预定义

添加方法:在项目 -> 属性 -> C/C++ ->预处理器 -> 预处理器定义中添加 _CRT_SECURE_NO_WARNINGS

设置窗体的图标,需要在MainFram文件下的OnCreate 函数添加,响应创建的消息

//设置窗体图标 参数; 窗口句柄 读取ICon文件
SetClassLong(m_hWnd, GCL_HICON, (LONG)AfxGetApp()->LoadIconW(IDI_ICON_WIN));

窗体标题分为两部分, 左侧和右侧

设置左侧,即销售管理系统 时,在对应的Doc文件中的OnNewDocument() 函数中添加

//设置标题 左侧
SetTitle(TEXT("销售管理系统"));

设置右侧,即V 1.0.0 时,在MainFram文件的初始化函数中添加

//设置标题  右侧标题
SetTitle(TEXT("V 1.0.0"));

设置窗口的位置和大小,在MainFram的初始化函数中

//设置窗口的位置和大小  CWnd::MoveWindow 函数
MoveWindow(0, 0, 800, 500);
//设置居中显示
CenterWindow();

文件处理:

对文件进行处理时,可添加 设计文件处理类 CInfoFile

退出当前对话框  可使用  OnClose() 函数    退出整个程序可使用 exit(0)

添加需要继承MFC的类时,在创建时,选择MFC类

拆分窗口时,可通过 CSplitterWnd 类   在MainFram.h 中声明CSplitterWnd  对象

 1 //静态拆分窗口 1行2列 m_spliter.CreateStatic this代表当前窗口
2 m_spliter.CreateStatic(this, 1, 2);
3
4 //创建视图:CSplitterWnd::CreateView
5 /*
6 0,0 :表示放在第0行第0列的位置
7 RUNTIME_CLASS(CSelectView) : 表示使用CSelectView这个类
8 CSize(250,500): 指定视图宽度和高度
9 pContext : 为OnCreateClient的最后一个形参
10 */
11 m_spliter.CreateView(0, 0, RUNTIME_CLASS(CSelectView), CSize(250, 500), pContext);
12
13 /*
14 0,1 :表示放在第0行第1列的位置
15 RUNTIME_CLASS(CDisplayView) : 表示使用CSelectView这个类
16 CSize(250,500): 指定视图宽度和高度
17 pContext : 为OnCreateClient的最后一个形参
18 */
19 m_spliter.CreateView(0, 1, RUNTIME_CLASS(CDispalyView), CSize(600, 500), pContext);

如下图所示:

普通View类 重写OnInitUpdate函数,来初始化一些显示

未放置Tree Ctrl 控件,可使用 GetTreeCtrl 获取一个  用一个TreeCtrl 的指针接收即可

MainFram 分屏 实现界面挂载

  声明自定义消息,需要将自定义消息写到分界宏中,

  1. 使用 PostMessage 发送消息

1     //CWind::PostMessage 将一个信息放入窗口的消息队列
2 //AfxGetMainWnd() 框架窗口对象的指针
3 //AfxGetMainWnd()->GetSafewnd() 获取返回窗口的句柄
4 //NM_A 发送自定义消息
5 //(WPARAM)NM_A 指定了附加的消息信息
6 //(LPARAM)0 指定了附加的消息信息,

  2. 在MainFram 的 OnMyChange 中接收消息

      下面为挂载代码

 1     CCreateContext Context;
2
3 //挂载界面
4 Context.m_pNewViewClass = RUNTIME_CLASS(CUserDlg); //将上下文的变量 设置为需要显示的窗口的类
5 Context.m_pCurrentFrame = this; //获取当前主窗体
6 Context.m_pLastView = (CFormView *)m_spliter.GetPane(0, 1); //获取分割后的右侧窗体
7 m_spliter.DeleteView(0, 1); //删除现在的右侧界面
8 m_spliter.CreateView(0, 1, RUNTIME_CLASS(CUserDlg), CSize(600, 500), &Context); //创建一个新的右侧界面
9
10 CUserDlg *pNewView = (CUserDlg *)m_spliter.GetPane(0, 1); //获取新分割后的右侧窗体
11 m_spliter.RecalcLayout(); // 重新布局
12 pNewView->OnInitialUpdate(); // 将CUserDlg的窗体初始化
13 m_spliter.SetActivePane(0, 1); //激活新建的右侧窗体

C++ MFC学习 (六)的更多相关文章

  1. MFC 学习笔记

    MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...

  2. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  3. TweenMax动画库学习(六)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  4. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

    1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量:           CToolBar m_toolbar;CImageList ...

  5. SVG 学习<六> SVG的transform

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  6. C#多线程学习(六) 互斥对象

    如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类. 我们可以把Mutex看作一个出租车,乘客看作线程.乘客首先 ...

  7. Unity学习(六)5.x依赖打包

    http://blog.sina.com.cn/s/blog_89d90b7c0102w2ox.html unity5已经封装好了接口,所以依赖打包并没有那么神秘和复杂了. 打包: 1.定义好资源的a ...

  8. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  9. cesium 学习(六) 坐标转换

    cesium 学习(六) 坐标转换 一.前言 在场景中,不管是二维还好还是三维也罢,只要涉及到空间概念都会提到坐标,坐标是让我们理解位置的一个非常有效的东西.有了坐标,我们能很快的确定位置相关关系,但 ...

  10. MFC学习笔记1---准备工作

    什么是MFC MFC,全称Microsoft Foundation Classes,微软基础类库,顾名思义,是微软的攻城狮们将一些常用的基础的Windows API 函数用C++的形式封装成类,简化程 ...

随机推荐

  1. Python函数用法和底层分析

    目录 Python函数用法和底层分析 函数的基本概念 Python 函数的分类 核心要点 形参和实参 文档字符串(函数的注释) 返回值 函数也是对象,内存底层分析 变量的作用域(全局变量和局部变量) ...

  2. CH32V307以太网(芯片内部10M)-针对新固件的Lib库

    沁恒的CH32V307网络库在前段时间做了一个更新,相对于以前的Lib,主要的功能没有什么特别大的变化,但是底层的一些操作仔细看的话,还是不少的区别的. 首先,官方提供的例程,工程结构以及头文件优一些 ...

  3. Hadoop详解(10) - Hadoop HA高可用

    Hadoop详解(10) - Hadoop HA高可用 HA概述 HA(High Availablity),即高可用(7*24小时不中断服务). 实现高可用最关键的策略是消除单点故障.HA严格来说应该 ...

  4. GitHub + Hexo 搭建个人博客网站

    一.准备工作 1. GitHub + Hexo 的优势 Hexo 提供现成的模板和模块:github 的 pages 功能提供免费的服务器,零成本搭建属于自己的博客. 2. 需要了解的网站 githu ...

  5. 网络流棋盘模型 | P3355 骑士共存问题 P4304 [TJOI2013]攻击装置

    题面(骑士共存问题) 在一个 \(n \times n\) 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的 \(n \times n ...

  6. 用Java写一个分布式缓存——缓存淘汰算法

    前言 之前也用过一些缓存中间件,框架,也想着自己是不是也能用Java写一个出来,于是就有了这个想法,打算在写的过程中同步进行总结. 源码:weloe/Java-Distributed-Cache (g ...

  7. 【力扣】787. K 站中转内最便宜的航班加权——有向图最短路径

    前言 我感觉这题比较有代表性,所以记录一下,这题是加权有向图中求最短路径的问题. 题目 787. K 站中转内最便宜的航班 动态规划 假设有一条路径是[src, i, ..., j, dst],解法一 ...

  8. 你知道这个提高 Java 单元测试效率的 IDEA 插件吗

    前言 2023年我们公司主抓代码质量,所以单元测试必不可少,而且都写到了年底的绩效目标中了.在考虑如何达成这个目标的过程中,我发现了一个关于单元测试的IDEA插件--SquareTest,它可以帮助我 ...

  9. Swagger的基本使用

    Swagger简介和使用 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等. ...

  10. 字符输入流读取字符数据-writer类

    字符输入流读取字符数据 读取字符:read方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1,循环读取,代码使用演示∶ writer类 java.io.Filelwriter ...