【MFC】学习与问题整合

须要源码联系邮件:kangxlchn@163.comhtml

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

环境:vs2017 windows

 

 通通NEXT函数

 

 

 

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

 

打开类试图spa

 

 

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

 

双击.rc文件能够打开资源视图code

 

而后双击IDD_MFCPRJ_DIALOG就能够打开可视化编辑的窗口htm

若是打不开,看这里对象

 

 打开工具箱就能够往里拖各类控件了。。。blog

 

 

 -------------截至这里,基本全部的窗口都打开了,如今开始讲一些代码-----------

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);
}
相关文章
相关标签/搜索