C++ MFC学习 (六)

   由于微软在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);  //激活新建的右侧窗体
原文地址:https://www.cnblogs.com/lg804721251/p/14342410.html