从Win32过渡到MFC第四天

从Win32过渡到MFC

简单介绍

Win32: Win32应用程序的简称,SDK编程,可以开发32位应用程序,也可以开发64位应用程序。
VC6 有2000多个API , VS2013新增许许多多的API

MFC是什么:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了[Windows API](https://baike.baidu.com/item/Windows API/6088382),并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

好处:代码的可重用性,代码和数据更加紧密结合。
缺点:界面太丑,美化太复杂,什么东西的都要重绘,界面与逻辑没分开

界面库:Qt(庞大的帮助文档), duilib(帮助文档不够详细),easyX(实际项目开发当中,没有)

我们为什么还要学习MFC?
1、巩固Win32
2、开阔思路、开阔眼界

创建MFC

建立MFC应用程序三部曲
1、建立CWinApp派生类
2、重写InitInstance虚函数
3、定义CWinApp派生类的全局变量theApp (名字随意建议用theApp)

//1、建立CWinApp派生类
class CHelloApp : public CWinApp
{
public:
	//相当于程序的入口,相当于第一个执行的
	//MFC初始化过程 启动管理
	BOOL InitInstance();

	//退出
	int ExitInstance();
};

//2、重写InitInstance虚函数
    BOOL CHelloApp::InitInstance()
{
	CHelloDlg dlg;
	dlg.DoModal();
	return TRUE;
}
//退出
int CHelloApp::ExitInstance()
{
	//清理操作
	return CWinApp::ExitInstance();
}

//3、定义CWinApp派生类的全局变量theApp (名字随意建议用theApp)
    CHelloApp theApp;  //MFC应用程序的核心对象,一个应用程序有且只有一个应用程序对象。

创建Dialog

class CHelloDlg : public CDialog
{
private:
	HICON m_hIcon;
public:
	CHelloDlg();

	//对话框初始化函数
	BOOL OnInitDialog();
};

CHelloDlg::CHelloDlg() :CDialog(IDD_MAIN_DLG)
{
	//加载图标
	m_hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_LOGO));
}
//对话框初始化函数   WM_INITDIALOG消息的关联函数 , 对话框已经创建好了,还没有显示出来而已
BOOL CHelloDlg::OnInitDialog()
{
	//设置窗口标题
	SetWindowText(L"这是我的MFC应用程序");

	//设置图标
	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

	//LPSTR, LPCTSTR , char*, const char*,
	//CString
	//string

	//CString str;//空字符串
	//CString str(L"Hello World");
	//CString str('a', 10);

	//CString str = L"我爱中国";

	//求字符串的长度
	//int n = str.GetLength(); //获取字符的个数

	//判断一个字符串是否为空
	/*if (str.IsEmpty())
	{
		MessageBox(L"为空");
	}
	else
	{
		MessageBox(L"不为空");
	}*/

	//清空字符串
	//str.Empty();

	//if (str.IsEmpty())
	//{
	//MessageBox(L"为空");
	//}
	//else
	//{
	//MessageBox(L"不为空");
	//}

	//获取字符串的某一个元素
	//wchar_t ch = str.GetAt(0);
	//wchar_t ch = str[0];

	//指定设置某一个元素
	//str.SetAt(0, L'他');

	//+, +=, =
	//CString str1 = L"123456";
	//CString str2;
	//str2 += str;

	//字符串截取
	//Left 、Right 、Mid

	//CString str1 = L"HelloWorld";
	//str = str1.Left(5);
	//str = str1.Right(3);
	//str = str1.Mid(4);
	//str = str1.Mid(4, 3);

	//字符串转化函数
	//CString str = "Hello World";
	//CString str2 = str.MakeUpper();
	//CString str2 = str.MakeLower();
	//CString str2 = str.MakeReverse();

	//字符串替换函数
	//CString str = "Hello World";
	//str.Replace(L"Hello", L"11111");
	//str.Replace(L'o', L'5');

	//移除字符
	//str.Remove(L'o');

	//插入字符
	//str.Insert(2, L'5');

	//删除字符
	//str.Delete(2, 3);

	//格式化字符串
	//CString str;
	//str.Format(L"热心网友小赵有%d个老婆, 每个老婆都是从淘宝上面买来的,每一个单价%f,总共买了%d个,型号为:%c", 5, 99.99f, 10, 'L');

	//去除空格
	//CString str = L"  67Hello  ";
	//str.TrimLeft();
	//str.TrimRight();
	//str.Trim();

	//str = str + L"123";

	//字符串查找函数
	//int pos = str.Find(L'F', 1);
	//int pos = str.Find(L"lo", 1);

	//反向查找
	//CString str = L"Hello World";
	//int n = str.ReverseFind(L'e');

	//CString str = L"C:\\Progame File\\QQ\\Tencent.exe";

	//int n = str.ReverseFind(L'\\');
	//str = str.Mid(n + 1);

	//SetWindowText(str);

	//获取指针
	//CString str = L"HelloWorld";
	//str.GetBuffer();

	//CPoint类 - 点
	//POINT
	//CPoint pt;
	//GetCursorPos(&pt);

	//CString str;
	//str.Format(L"当前鼠标坐标:(%d, %d)", pt.x, pt.y);
	//MessageBox(str);

	//pt.Offset(-1, -1);
	//str.Format(L"当前鼠标坐标:(%d, %d)", pt.x, pt.y);
	//MessageBox(str);

	//==, != , +, +=, -

	//CSize类 - 大小
	//CSize size(800,600);
	//== ,!= , + ,+=, -, -=
	
	//CRect类 ,矩形类
	//CRect
	/*CRect rect;
	GetWindowRect(&rect);

	CString str;
	str.Format(L"(%d, %d, %d, %d)", rect.left, rect.top,rect.right,rect.bottom);
	SetWindowText(str);

	CPoint pt = rect.BottomRight();
	int nWidth = rect.Width();
	int nHeight = rect.Height();
	
	CRect rt;
	rt.SetRect(0, 0, 0, 0);
	if (rt.IsRectNull())
	{
		MessageBox(L"为空");
	}
	else
	{
		MessageBox(L"不为空");
	}*/

	//CTime类
	//CTime
	//获取当前时间
	CTime time = CTime::GetCurrentTime();
	//int nYear = time.GetYear();
	//int nMonth = time.GetMonth();
	//int nDay = time.GetDay();
	//int nHour = time.GetHour();
	//int nMinute = time.GetMinute();
	//int nSecond = time.GetSecond();
	//int nDayOfWeek = time.GetDayOfWeek();

	CString str = time.Format(L"当前时间:%Y-%m-%d %H:%M:%S");

	//CString str;
	//str.Format(L"当前时间: %d-%d-%d %d:%d:%d 星期:%d", nYear, nMonth, nDay, nHour, nMinute, nSecond, nDayOfWeek-1);
	SetWindowText(str);
	
	return TRUE;
}
上一篇:win32 速看代码


下一篇:.lockbit数据库解密恢复 服务器中毒解密.lockbit Restore-My-Files.txt