• 【MFC】学习与问题整合


    需要源码联系邮件:kangxlchn@163.com

    1.新建一个MFC工程(基于对话框)

    环境:vs2017 

     统统NEXT

     

     新建完成后打开MFCPrj.cpp文件

    打开类试图

     

    每创建一个MFC项目,默认包含3个类,“关于”对话框、主对话框类、初始化项目的App类

    双击.rc文件可以打开资源视图

    然后双击IDD_MFCPRJ_DIALOG就可以打开可视化编辑的窗口

    如果打不开,看这里

     打开工具箱就可以往里拖各种控件了。。。

     -------------截至这里,基本所有的窗口都打开了,现在开始讲一些代码-----------

    2.代码

    项目生成后,都会有一个属于App类的theApp对象,对本应用程序实例化。

    // CMFCTest1App 构造
    
    CMFCTest1App::CMFCTest1App()
    {
        // 支持重新启动管理器
        m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
    
        // TODO:  在此处添加构造代码,
        // 将所有重要的初始化放置在 InitInstance 中
    }
    
    
    // 唯一的一个 CMFCTest1App 对象
    
    CMFCTest1App theApp;

    应用程序创建完成,程序开始运行,进入消息循环,windows程序的事件都是消息驱动的,每产生一个消息就触发一个响应事件,消息和事件通过声明消息映射DECLARE_MESSAGE_MAP()联系在一起。 
    默认包含三个消息:

     BEGIN_MESSAGE_MAP(CMFCTest1Dlg, CDialogEx)
        ON_WM_SYSCOMMAND()   //响应控制指令
        ON_WM_PAINT()         //响应绘图消息,用于刷新窗口
        ON_WM_QUERYDRAGICON() //当用户拖动最小化窗口时取得光标
    END_MESSAGE_MAP()

     当应用程序关闭时,会发送WM_CLOSE消息,程序相应后结束。在类向导(右击工程/ctrl+shift+x)中可以添加消息处理函数。 

     

    void CMFCPrjDlg::OnClose()
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        if (MessageBox(_T("确定退出吗"), _T("提示"), MB_YESNO | MB_ICONWARNING) == IDNO)
        {
            return;
        }
    
        CDialog::OnClose();
    }

    应用程序通过定义,初始化,由winmain开始,注册、创建、显示窗口,消息响应,程序终止,结束运行周期

    3.对话框类

    afx_msg宏 
    afx_msg宏没有任何语法上的实际意义。afx_msg宏表示声明的是一个消息响应函数。
    DoDataExchange函数 用于存放各类控件的变量信息
    OnInitDialog函数 用于初始化对话框
    OnSysCommand系统指令响应函数,默认处理窗口最小化和最大化指令等 OnPaint绘图消息响应函数
    调出类向导 项目
    ->类向导,快捷键Ctrl+shilft+X

    4.添加按钮

     将默认对话框中的静态文本和原有按钮删除,添加新的按钮1  2 ,在属性页中可以查看并设置。一般只需要修改两个属性,“Caption”和“ID”,前者是按钮的文本,后者是其唯一标识。 

     为按钮添加事件处理函数

    实现按钮的功能 
    添加按钮的控件型变量,变量命名一般以“m_”开头,后面部分为按钮功能简要说明。 

    在初始化函数OnInitDialog中修改Exit对话框不可用

    // TODO:  在此添加额外的初始化代码
        m_Exit.EnableWindow(FALSE);

    双击按钮就进入代码:添加处理事件

    void CMFCPrjDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        CString str;
        m_Enable.GetWindowTextW(str);
        if (str == "使能")
        {
            m_Exit.EnableWindow(TRUE);
            m_Enable.SetWindowTextW(_T("使不能"));
        }
        else
        {
            m_Exit.EnableWindow(FALSE);
            m_Enable.SetWindowTextW(_T("使能"));
        }
    }
    
    
    void CMFCPrjDlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
        SendMessage(WM_CLOSE, 0, 0);
    }
  • 相关阅读:
    数据结构之 线性表 逆序简历链表
    数据结构之 线性表--顺序创建链表
    参观——校园招聘大会
    SDUT OJ 之 1571 《人品,有没有?》 字符串的处理问题
    青岛理工交流赛 H题 素数间隙
    青岛理工ACM交流赛 J题 数格子算面积
    STL版 括号匹配(感觉不如之前自己用数组模拟的跑的快)
    1076: [SCOI2008]奖励关( dp )
    BZOJ 1079: [SCOI2008]着色方案( dp )
    BZOJ 1984: 月下“毛景树”( 树链剖分 )
  • 原文地址:https://www.cnblogs.com/-Mr-y/p/8376741.html
Copyright © 2020-2023  润新知