由于微软在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. 数值分析——插值(一)、Runge现象

    在数值分析中,插值方法是基础且重要的.本文将介绍Lagrange插值公式与Newton插值公式.此外,针对Runge现象,本文给出了稍稍详细的讨论. 一.Lagrange插值公式 假设函数 \(y=f ...

  2. Spark详解(05) - Spark核心编程SparkCore

    Spark详解(05) - Spark核心编程SparkCore RDD概述 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基 ...

  3. 学习.NET MAUI Blazor(五)、修改Window窗口标题

    由于Blazor属于SPA(single-page application),所以页面标题需要使用PageTitle组件来实现.但是在MAUI Blazor中,Blazor所在的位置是WebView, ...

  4. 从开发属于你自己的第一个 Python 库,做一名真正的程序员「双语版」

    你好,我是悦创.之前我在 CSDN 编写了一篇开发 Python 库的教程,有人加我提问到的一些问题,我来更新一下这篇文章:https://blog.csdn.net/qq_33254766/arti ...

  5. Python 内置界面开发框架 Tkinter入门篇

    本文大概 4158 个字,阅读需花 10 分钟 内容不多,但也花了一些精力 如要交流,欢迎关注我然后评论区留言 谢谢你的点赞收藏分享 首先,今天先给大家拜个好年!新年快乐,恭喜发财!为了感谢大家对我的 ...

  6. DML_添加数据-DML_删除数据

    DML_添加数据 添加数据 语法 : insert into 表名(列名1,列名2,...列名n) values (值1,值2,... 值n); 注意: 1.列名和值要一一对应. 2.如果表名后,不定 ...

  7. 快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)

    1. 快速入门python,python基本语法 Python使用缩进(tab或者空格)来组织代码,而不是像其 他语言比如R.C++.Java和Perl那样用大括号.考虑使用for循 环来实现排序算法 ...

  8. Gitee + Sourcetree 配置公钥 SSH

    设置前提 安装Git Git下载 安装sourceTree sourceTree下载 gitee账号 gitee官网 Git设置公钥 1.在安装好 sourcetree 后 点击操作选择在终端中打开 ...

  9. P32_全局配置 - tabBar

    什么是 tabBar tabBar 是移动端应用常见的页面效果,用于实现多页面的快速切换.小程序中通常将其分为: 底部 tabBar 顶部 tabBar 注意:tabBar中只能配置最少 2 个.最多 ...

  10. 我做的百度飞桨PaddleOCR .NET调用库

    我做的百度飞桨PaddleOCR .NET调用库 .NET Conf 2021中国我做了一次<.NET玩转计算机视觉OpenCV>的分享,其中提到了一个效果特别好的OCR识别引擎--百度飞 ...