Bootstrap

windows第四章 初识MFC

MFC简介

创建MFC项目

  1. 配置项目属性
    在这里插入图片描述
    2.写代码三步曲
  • 创建CWinApp派生类
  • 重写InitInstance函数
  • 创建窗口对象
#include <afxwin.h>

class CMyApp : public CWinApp
{
public:
	virtual BOOL InitInstance()//这是Mfc的入口函数,为应用程序初始化
	{
		MessageBox(NULL, L"Hello World!", L"FirstMFC", MB_OK);
		//弹出一个对话框

		return TRUE; //返回FALSE,关闭应用程序,返回TRUE,让应用程序继续运行
	}
	virtual int ExitInstance() //执行退出,清理工作
	{
		return  CWinApp::ExitInstance();
	}
};

CMyApp theApp; //应用程序核心对象,一个MFC应用程序有且只有一个应用程序核心对象

这里不要写构造函数,不然会报错

第一个对话框窗口

改成多文件格式
stdafx.h

#include <afxwin.h>
#include "resource.h"

CMyDlg.h

#pragma once
#include "stdafx.h"

class CMyDlg : public CDialog {
public:
	CMyDlg();
	BOOL OnInitDialog();  // 初始化对话框
private:
	HICON m_hIcon;
};

CMyDlg.cpp

#include "CMyDlg.h"
#include "FirstMFC.h"
extern CmyApp theApp;
CMyDlg::CMyDlg()
	: CDialog(IDD_DIALOG_MAIN)
{
	//加载图标
//第一种方式
	m_hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_MAIN
	));//::表示调用全局函数,也就是windowsAPI函数,而不是CWinApp的成员函数
	//第二种方式
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_MAIN);
	//第三种方式
	m_hIcon = ::LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON_MAIN));
	//第四种方式
	m_hIcon = theApp.LoadIcon(IDI_ICON_MAIN);
}

BOOL CMyDlg::OnInitDialog()
{
	SetWindowText(L"Hello World!");//设置窗口标题
	SetIcon(m_hIcon, TRUE);//设置大图标
	SetIcon(m_hIcon, FALSE);//设置小图标
	return TRUE;
}

FirstMFC.h

#pragma once
#include "stdafx.h"
class CmyApp : public CWinApp
{
    public:
        virtual BOOL InitInstance();
        virtual int ExitInstance();
};

FristMFC.cpp

#include "stdafx.h"
#include "FirstMFC.h"
#include "CMyDlg.h"

//三步曲
//1.创建CWinApp派生类
//2.重写InitInstance函数
//3.创建窗口对象

BOOL CmyApp::InitInstance() {
    /*MessageBox(NULL, L"Hello World!", L"FirstMFC", MB_OK);*/
    // 弹出一个对话框
    CMyDlg dlg;
    dlg.DoModal();  // 弹出一个模态对话框
    return TRUE;  // 返回FALSE,关闭应用程序,返回TRUE,让应用程序继续运行
}

int CmyApp::ExitInstance() { 
    return CWinApp::ExitInstance();
}
CmyApp theApp;

MFC常用类介绍

CString

	//定义字符串
	CString str1 = L"Hello World!";
	CString str2(L"你好,世界!");
	CString str3 = str1 + str2;
	CString str4;
	str4.Format(L"Hello World!%d", 123);
	MessageBox(str4);

	//求字符个数,一个中文也是一个,和长度不一样
	int n = str4.GetLength();

	//判断是否为空
	CString str5;
	if (str5.IsEmpty())
	{
		MessageBox(L"str5 is empty");
	}
	str5 = L"123";
	str5.Empty();//清空字符串

	//获取字符
	wchar_t c = str1.GetAt(0);
	str5.Format(L"字符:%c", c);
	MessageBox(str5);
	c = str2.GetAt(2);
	str5.Format(L"字符:%c", c);
	MessageBox(str5);
	c = str2[1];
	str5.Format(L"字符:%c", c);
	MessageBox(str5);

	//设置字符
	str3.SetAt(0, L'W');

	//字符串拼接
	str3 += L'结尾';

	//字符串比较
	if (str1 == str2)
	{
		MessageBox(L"相等");
	}
	str1 = L"Hello World!";
	str2 = L"hello World!";
	if (str1.CompareNoCase(str2) == 0)//忽略大小写比较
	{
		MessageBox(L"相等");
	}

	//字符串截取
	str5 = str3.Left(5);//截取前5个字符
	str5 = str3.Right(5);//截取后5个字符
	str5 = str3.Mid(5, 5);//从第5个字符开始截取5个字符

	//移除后缀
	str1 = L"123.txt";
	str1 = str1.Left(str1.ReverseFind(L'.'));//找到最后一个.,然后截取前面的部分

	//去空格
	str1 = L" 123 456 789 ";
	str1.TrimLeft();//去掉左边的空格
	str1.TrimRight();//去掉右边的空格
	str1.Trim();//去掉两边的空格
	//去掉所有空格
	while (str1.Find(L' ') != -1)
	{
		str1.Delete(str1.Find(L' '), 1);
	}
	str1 = L"XXX 123 456 789 21111";
	str1.TrimRight('1');//去掉所有右边的1
	MessageBox(str1);

CPoint

	//定义点
	CPoint pt1;
	pt1.x = 100;
	pt1.y = 200;
	CPoint pt2(300, 400);
	CPoint pt3;
	pt3 = pt1 + pt2;//加法
	pt3 = pt1 - pt2;//减法
	pt3.Offset(100, 200);//偏移
	pt3 += pt2;//加法
	pt3 -= pt2;//减法

	//比较
	if (pt1 == pt2)
	{
		MessageBox(L"相等");
	}
	CPoint pt4;
	GetCursorPos(&pt4);//获取鼠标位置

CSzie

	//定义CSzie
	CSize sz1;
	CSize sz2(100, 200);
	CSize sz3;
	sz3.cx = 300;
	sz3.cy = 400;
	sz3 = sz1 + sz2;//加法
	sz3 = sz1 - sz2;//减法

CRect

	//定义矩形
	CRect rect1;
	rect1.SetRect(100, 200, 300, 400);
	CRect rect2(500, 600, 700, 800);
	CRect rect3;
	rect3 = rect1 + rect2;//左上角相减,右下角相加 {-400,-400,1000,1200}
	rect3 = rect1 - CPoint(100, 200);//两个点减去(100,200) {0,0,200,200}

	//判断是否为空
	if (rect3.IsRectEmpty())//{0,0,0,0}或者{0,0,100,0}或者{100,0,0,0}都为空
	{
		MessageBox(L"rect3 is empty");
	}
	if (rect3.IsRectNull())//{0,0,0,0}
	{
		MessageBox(L"rect3 is null");
	}

	//偏移
	rect3.OffsetRect(100, 200);//{100,200,300,400}

	//缩放
	rect3.InflateRect(10, 10);//向外扩展{90,190,310,410} 左上角-(10,10),右下角+(10,10)
	rect3.DeflateRect(10, 10);//向内缩小{100,200,300,400} 左上角+(10,10),右下角-(10,10)

	//正常化
	rect3.SetRect(300, 200, 10, 20);
	rect3.NormalizeRect();//{10,200,300,20} 左上角和右下角交换位置

	//判断点是否在矩形内
	if (rect3.PtInRect(pt1))
	{
		MessageBox(L"pt1在rect3内");
	}

	//判断矩形是否相交
	if (rect3.IntersectRect(rect1, rect2))//判断rect1和rect2是否相交,如果相交,则将相交部分赋值给rect3
	{
		MessageBox(L"rect1和rect2相交,相交部分为rect3");
	}


	//获取屏幕坐标系
	CRect rect4, rect5;
	GetWindowRect(&rect4);//获取窗口在屏幕坐标系中的位置 
	GetClientRect(&rect5);//获取窗口在客户区坐标系中的位置

CTime

	//定义时间
	CTime t1;
	CTime t2(2019, 10, 1, 12, 30, 0);
	t1 = CTime::GetCurrentTime();//获取当前时间
	CString str1 = t1.Format(L"当前时间:%Y-%m-%d %H:%M:%S");
	SetWindowText(str1);
	//获取星期
	int n = t1.GetDayOfWeek();//1-7,1代表星期天,2代表星期一,以此类推
;