zoukankan      html  css  js  c++  java
  • 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);  //激活新建的右侧窗体
  • 相关阅读:
    自动化测试-18.selenium之bugFree代码注释
    自动化测试-16.selenium数据的分离之Excel的使用
    自动化测试-15.selenium单选框与复选框状态判断
    自动化测试-14.selenium加载FireFox配置
    自动化测试-13.selenium执行JS处理滚动条
    Lucas-Kanade算法总结
    迟来的2013年总结及算法工程师/研究员找工作总结
    Android从文件读取图像显示的效率问题
    Viola Jones Face Detector
    谈谈Android中的SurfaceTexture
  • 原文地址:https://www.cnblogs.com/lg804721251/p/14342410.html
Copyright © 2011-2022 走看看