由于微软在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. Linux安装&卸载mysql5.7

    Linux系统下卸载mysql 停止mysql服务 systemctl stop mysqld.service 查看安装的mysql服务 rpm -qa|grep -i mysql 删除安装的mysq ...

  2. GC耗时高,原因竟是服务流量小?

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 最近,我们系统配置了GC耗时的监控,但配置上之后,系统会偶尔出现GC耗时大于1s的报警,排查花了一些力气,故在这里 ...

  3. SSM框架——SpringMVC

    SpringMVC MVC三层架构 Controller层:取得前端数据.调用相关业务逻辑.转发/重定向到其他页面 Model层:实现业务逻辑.保存数据 View层:显示页面 1.第一个MVC程序 新 ...

  4. 【深入浅出Spring原理及实战】「源码调试分析」结合DataSourceRegister深入分析ImportBeanDefinitionRegistrar的源码运作流程

    每日一句 人的一生中不可能会一帆风顺,总会遇到一些挫折,当你对生活失去了信心的时候,仔细的看一看.好好回想一下你所遇到的最美好的事情吧,那会让你感觉到生活的美好. 注入案例代码 如何通过实现Sprin ...

  5. py之循环,函数

    循环 a=1 while a<10: print(a) a+=1 a=[123,1235,123124,1231] while a: a1=a.pop() print(a1) for a1 in ...

  6. Python基本数据类型,用户交互,格式化输出,运算符,多种赋值方式,多种运算符

    Python基本数据类型,用户交互,格式化输出,运算符,多种赋值方式,多种运算符 一.Python基本数据类型 1.回顾之前学过的基本数据类型 1.整型(整数) 应用场景:年级,班级人数,年份 代码实 ...

  7. 解决Java.awt设计GUI程序时Label标签中文乱码解决(idea)

    未修改时对话框里边无法显示Label的文本内容,显示的都是方框!网上都是Run--Edit Configurations--VM options:填入-Dfile.encoding=gbk 但是我实际 ...

  8. java入门与进阶P-5.5+P-5.6

    投票统计 写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一中数字出现的次数,输入-1表示结束 循环遍历 通常都是使用for循环,让循环变量i从0到<数组的length,这样循环体内最 ...

  9. Java 进阶P-4.8+P-4.9

    Object类 Object类的函数 toString() equals() Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object ...

  10. 让Apache Beam在GCP Cloud Dataflow上跑起来

    简介 在文章<Apache Beam入门及Java SDK开发初体验>中大概讲了Apapche Beam的简单概念和本地运行,本文将讲解如何把代码运行在GCP Cloud Dataflow ...