由于微软在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. HMS Core 3D流体仿真技术,打造移动端PC级流体动效

    移动设备硬件的高速发展,让游戏行业发生翻天覆地的变化,许多酷炫的游戏效果不再局限于电脑端,玩家在移动端就能享受到场景更逼真.画质更清晰.体验更流畅的游戏服务.但由于移动设备算力不足,为了实现真实感的水 ...

  2. 【Markdown编辑器】语法规则

    一.Markdown介绍及工具推荐 1.介绍 Markdown是一种轻量级标记语言,它以纯文本形式(易读.易写.易更改)编写文档,并最终以HTML格式发布.Markdown也可以理解为将以MARKDO ...

  3. 宝塔SSL

    1:开启面板SSL访问教程 开启完之后,要以 https 方式访问面板 一定要先 下载证书 和 复制证书密码 再点"开启ssl",不然得重置再走一遍流程. [教程贴]如何开启面板S ...

  4. TensorRT基础笔记

    一,概述 TensorRT 是 NVIDIA 官方推出的基于 CUDA 和 cudnn 的高性能深度学习推理加速引擎,能够使深度学习模型在 GPU 上进行低延迟.高吞吐量的部署.采用 C++ 开发,并 ...

  5. [硬核] Bootstrap Blazor Table 综合演示例子

    知识点: 1.导入导出 2.分页功能 3.增删改查 4.批量删除 5.批量编辑(审核) 6.列排序与列搜索 7.顶部搜索实现所有列搜索 8.高级搜索实现多条件搜索 9.顶部与刷新与视图列 10.实现文 ...

  6. do-while循环-练习_用循环求出1-100之间的耦合数

    do-while循环 do..while循环格式 初始化表达式① do{ 循环体③ 步进表达式④ }while(布尔表达式②); 执行流程 执行顺序:①③④>②③④>②③④-②不满足为止. ...

  7. vulnhub靶场之MOMENTUM: 2

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Momentum: 2,下载地址:https://download.vulnhub.com/momentum/Momentum2.ova,下载后 ...

  8. 12月19日内容总结——Q查询进阶、ORM查询优化、ORM事务、ORM常用字段类型和字段参数、Ajax介绍、数据编码格式、Ajax携带文件数据

    目录 一.Q查询进阶操作 二.ORM查询优化 三.ORM事务操作 四.ORM常用字段类型 五.ORM常用字段参数 六.Ajax AJAX简介 应用场景 AJAX的优点 语法实现 七.数据编码格式(Co ...

  9. 【已解决】rust 报错 no_std can't find crate for `test` || vscode 工作区多文件夹

    遇到下面的问题,请修改vscode的设置文件 如下 { "rust-analyzer.checkOnSave.allTargets": false, "rust-anal ...

  10. Linux10-rpm和yum

    1.rpm包的管理 一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中.它生成具有.RPM扩展名的文件.RPM是RedHat Package Manager(RedHat软件包管理工 ...