MFC入门(二)

新建的查看32bit寄存器的工程

使用的控件:命令按钮、文本框、静态文本

在这里插入图片描述

在这里插入图片描述

pch.h和pch.cpp的作用

预编译头,把一个基本不改变的头文件,编译成类似库的一个中间件,然后其他编译单元编译时就不需要去解析编译那个头文件了,而是直接把这个中间件加进去,从而显著提高编译速度。

在这里插入图片描述
framework.h的作用

"framework.h"通常是指Windows平台上的一个预编译头文件(Precompiled Header file),它包含了一些常用的系统头文件和宏定义,以及一些需要预编译的代码和声明,用于加速程序的编译和构建。
在Windows平台上,编译器会将包含"framework.h"头文件的源文件预编译,并将生成的预编译头文件存储在硬盘中。当编译其他源文件时,编译器会使用预编译头文件来避免重复编译相同的头文件和代码,从而提高编译效率。
通常情况下,"framework.h"是由Microsoft Visual Studio自动生成的,并且包含了大量的Windows API和MFC(Microsoft Foundation Classes)的头文件和定义。因此,在Windows平台上开发Windows应用程序时,使用"framework.h"可以减少重复的代码,简化程序开发,提高开发效率。

Register32Bit.h中CWinApp派生的类CRegister32BitApp中的虚函数

virtual BOOL InitInstance();

InitInstance()是MFC应用初始化函数,MFC对WindowsAPI进行了封装。在用向导编译成的二进时代码,MFC编译器链接器把源文件编译成PE文件格式存储在磁盘上。程序执行的时候,从PE文件头开始执行,在进入Winmain函数之前,进行一系列的必备的初始化。 MFC对这一系列的过程进行了封装。提供给编程人员的第一个裸露程序入口就是CWinApp的InitInstance(),其实程序的入口依然是WinMain()函数。大家都知道,每个程序都有拥有一个进程,每个进程至少有一个线程就是主线程。CWinThread类是MFC用来封装线程的,这个主线程就是在WinMain函数中创建的,包括UI线程和工作者线程。因此每个MFC程序至少使用一个CWinThread派生类。被MFC程序员熟知的CWinApp应用类就从这里派生。InitInstance是CWinThread的一个虚函数,InitInstance就是“初始化实例”的意思,可见,它是在实例创建时首先被调用的。应用程序总要重载这个虚函数,进行系统设置,创建运行环境。例如,主窗口一定要在InitInstance()中创建,因为该函数退出后就进入该线程的消息循环。
MFC执行流程: _tWinMain(WinMain的别名,用define替换的)->AfxWinMain->初始化线程,调用InitInstance初始化窗口,调用Run函数进入消息循环。

MFC使用消息映射之前,必须先声明DECLARE_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CRegister32BitDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON0, &CRegister32BitDlg::OnBnClickedButton0)
	ON_BN_CLICKED(IDC_BUTTON1, &CRegister32BitDlg::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON2, &CRegister32BitDlg::OnBnClickedButton2)
	ON_BN_CLICKED(IDC_BUTTON3, &CRegister32BitDlg::OnBnClickedButton3)
	ON_BN_CLICKED(IDC_BUTTON4, &CRegister32BitDlg::OnBnClickedButton4)
	ON_BN_CLICKED(IDC_BUTTON5, &CRegister32BitDlg::OnBnClickedButton5)
	ON_BN_CLICKED(IDC_BUTTON6, &CRegister32BitDlg::OnBnClickedButton6)
	ON_BN_CLICKED(IDC_BUTTON7, &CRegister32BitDlg::OnBnClickedButton7)
	ON_BN_CLICKED(IDC_BUTTON8, &CRegister32BitDlg::OnBnClickedButton8)
	ON_BN_CLICKED(IDC_BUTTON9, &CRegister32BitDlg::OnBnClickedButton9)
	ON_BN_CLICKED(IDC_BUTTON10, &CRegister32BitDlg::OnBnClickedButton10)
	ON_BN_CLICKED(IDC_BUTTON11, &CRegister32BitDlg::OnBnClickedButton11)
	ON_BN_CLICKED(IDC_BUTTON12, &CRegister32BitDlg::OnBnClickedButton12)
	ON_BN_CLICKED(IDC_BUTTON13, &CRegister32BitDlg::OnBnClickedButton13)
	ON_BN_CLICKED(IDC_BUTTON14, &CRegister32BitDlg::OnBnClickedButton14)
	ON_BN_CLICKED(IDC_BUTTON15, &CRegister32BitDlg::OnBnClickedButton15)
	ON_BN_CLICKED(IDC_BUTTON16, &CRegister32BitDlg::OnBnClickedButton16)
	ON_BN_CLICKED(IDC_BUTTON17, &CRegister32BitDlg::OnBnClickedButton17)
	ON_BN_CLICKED(IDC_BUTTON18, &CRegister32BitDlg::OnBnClickedButton18)
	ON_BN_CLICKED(IDC_BUTTON19, &CRegister32BitDlg::OnBnClickedButton19)
	ON_BN_CLICKED(IDC_BUTTON20, &CRegister32BitDlg::OnBnClickedButton20)
	ON_BN_CLICKED(IDC_BUTTON21, &CRegister32BitDlg::OnBnClickedButton21)
	ON_BN_CLICKED(IDC_BUTTON22, &CRegister32BitDlg::OnBnClickedButton22)
	ON_BN_CLICKED(IDC_BUTTON23, &CRegister32BitDlg::OnBnClickedButton23)
	ON_BN_CLICKED(IDC_BUTTON24, &CRegister32BitDlg::OnBnClickedButton24)
	ON_BN_CLICKED(IDC_BUTTON25, &CRegister32BitDlg::OnBnClickedButton25)
	ON_BN_CLICKED(IDC_BUTTON26, &CRegister32BitDlg::OnBnClickedButton26)
	ON_BN_CLICKED(IDC_BUTTON27, &CRegister32BitDlg::OnBnClickedButton27)
	ON_BN_CLICKED(IDC_BUTTON28, &CRegister32BitDlg::OnBnClickedButton28)
	ON_BN_CLICKED(IDC_BUTTON29, &CRegister32BitDlg::OnBnClickedButton29)
	ON_BN_CLICKED(IDC_BUTTON30, &CRegister32BitDlg::OnBnClickedButton30)
	ON_WM_NCHITTEST()
	ON_BN_CLICKED(IDC_BUTTON31, &CRegister32BitDlg::OnBnClickedButton31)
END_MESSAGE_MAP()

实现消息处理函数

void CRegister32BitDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

程序实现效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值