MFC入门

一,MFC简介:

MFC是Microsoft Foundation Classes的简称,是微软公司提供的一个类库(class libraries)。这个类库以C++类的形式封装了Windows的API,并且包含一个应用程序框架,用于辅助开发Windows图形界面程序。使用MFC可以减少应用程序开发人员的工作量,它包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

在学习MFC之前,我们有必要学习一下Windows的消息机制和编程模型,了解这些底层逻辑有利于学习MFC框架。

二,Windows的消息机制

Windows消息机制是Windows程序设计的基础,它基于事件驱动模式,使应用程序能够响应各种事件,如用户点击鼠标或键盘输入等。

消息机制主要由以下三个部分组成:

  1. 消息队列:Windows为每个应用程序维护一个消息队列。当系统发生某个事件时,Windows会将该事件翻译为消息,并放入应用程序的消息队列中。应用程序必须从消息队列中取出消息,然后根据消息的类型和内容进行相应的处理。
  2. 消息循环:这是一个无限循环,负责从消息队列中读取消息,并将消息分发给相应的处理函数。这样,应用程序就能持续监听和处理各种事件。
  3. 窗口过程:每个窗口都有一个窗口过程,用于接收并处理Windows发送给窗口的消息。窗口过程是一个回调函数,它在处理完一个消息后,通常会给Windows返回一个值,以表示消息的处理结果。

在Windows应用程序中,消息的类型多种多样,包括命令消息和控件通知消息等。命令消息通常用于处理从一个窗口发送到另一个窗口的用户请求,如点击按钮。控件通知消息则用于子控件通知其父窗口某些事件的发生,如列表框中的选项被选中。

总的来说,Windows消息机制为应用程序提供了一种高效、灵活的方式来处理各种事件和响应用户操作。通过理解和运用消息机制,开发者可以创建出功能丰富、响应迅速的Windows应用程序。

三,Windows编程模型

Windows编程模型是一种基于事件驱动的编程架构,其执行流程主要依赖于外部事件的发生。这种模型主要用于构建桌面应用程序和其他类型的应用,这些应用运行在Microsoft Windows操作系统之上。它强调了窗口、消息处理和系统API的使用,通过这些机制,开发者能够构建出功能丰富、响应用户交互的桌面应用程序。

在Windows编程模型中,应用程序通过处理操作系统发送来的消息来响应事件。这些事件可能包括一次击键、鼠标单击或是要求窗口更新的命令等。应用程序的进入点是函数WinMain,但大部分操作实际上是在一个称为窗口过程的函数中进行的。窗口过程函数处理发送给窗口的消息。WinMain函数会创建窗口并进入消息循环,即从消息队列中检索并调度消息给窗口过程。

Windows消息循环机制是Windows操作系统中GUI编程的核心部分,也是事件驱动编程模型的基础。消息由MSG结构体对象表示,其中包含了接收消息的窗口的句柄。消息循环不断地从消息队列中取出消息,并进行响应。应用程序调用DispatchMessage函数,将消息回传给操作系统。

Windows编程模型的主要特点是其事件驱动程序设计方式,这使得应用程序能够与用户进行交互。这种消息驱动机制是Windows编程的最大特点,它不同于传统的顺序、关联、过程驱动的程序设计方法。

为了进行Windows编程,开发者需要了解并使用SDK(软件开发工具包),其中包含用于建立应用软件的开发工具集合。同时,Windows操作系统提供了API函数(应用程序编程接口),这些函数在Windows.h文件中进行声明,并被用于应用程序编程。

总的来说,Windows编程模型为开发者提供了一种灵活且强大的方式来构建响应迅速、功能丰富的Windows应用程序。通过理解和运用这个模型,开发者能够创建出符合用户需求和期望的高质量软件。

我们开始进入MFC的学习

四,如何利用MFC创建窗口

利用MFC(Microsoft Foundation Classes)创建窗口涉及一系列步骤,这些步骤通常包括创建一个MFC应用程序项目,设计窗口界面,添加控件,以及编写窗口处理代码。以下是一个基本的指南,帮助你开始使用MFC创建窗口:

1. 创建MFC应用程序项目

  1. 打开Visual Studio。
  2. 选择“创建新项目”。
  3. 在项目模板中,选择“MFC AppWizard (exe)”或类似的选项(取决于你的Visual Studio版本)。
  4. 为项目命名并选择保存位置。
  5. 在向导中,根据你的需要选择适当的设置(如单文档、多文档、对话框等)。

2. 设计窗口界面

  1. 在资源视图中,找到并打开你的主窗口或对话框资源。
  2. 使用资源编辑器添加和布局控件,如按钮、文本框、列表框等。
  3. 设置控件的属性和ID。

3. 编写窗口处理代码

  1. 在你的主窗口或对话框类中,重写必要的消息处理函数。例如,你可能需要重写OnInitDialog来初始化对话框,或重写OnOKOnCancel来处理用户点击“确定”或“取消”按钮的事件。
  2. 对于其他控件,你可以通过它们的ID来访问它们,并添加事件处理函数。例如,你可以为按钮添加一个点击事件处理函数。
  3. 在消息处理函数中,编写处理用户输入和更新窗口状态的代码。

4. 编译和运行你的应用程序

  1. 点击“生成”或“构建”来编译你的项目。
  2. 确保没有编译错误。
  3. 运行你的应用程序,并测试窗口的功能。

5. 调试和优化

  1. 如果在测试过程中发现问题,使用Visual Studio的调试工具来查找和修复错误。
  2. 优化你的代码和界面,以提高性能和用户体验。

注意事项:

  • 确保你熟悉C++和Windows编程的基本概念。
  • MFC是一个复杂的框架,有很多功能和细节需要学习。建议查阅MFC的官方文档和教程,以获取更详细的信息和示例代码。
  • 在设计界面和编写代码时,考虑用户体验和可维护性。

通过遵循这些步骤,你应该能够使用MFC创建一个基本的窗口应用程序。随着你对MFC的深入了解,你可以添加更多的功能和复杂性来满足你的需求。

五,用MFC创建空白窗口

创建一个简单的空白窗口使用MFC涉及几个关键步骤。以下是一个简化的示例,展示如何使用MFC创建一个基本的空白窗口:

首先,你需要使用Visual Studio创建一个MFC应用程序项目。在Visual Studio中,选择“文件” -> “新建” -> “项目”,然后在项目模板中选择“MFC AppWizard (exe)”或类似的选项。按照向导的指示设置项目选项。

一旦你创建了MFC项目,Visual Studio会自动为你生成一些基础代码。下面是一个简化的示例,展示了如何在MainFrm.cpp文件中重写OnCreate函数来创建一个空白窗口:

// MainFrm.cpp: 实现主窗口  
  
#include "stdafx.h"  
#include "YourApp.h"  
#include "MainFrm.h"  
  
#ifdef _DEBUG  
#define new DEBUG_NEW  
#endif  
  
// CMainFrame 构造函数  
CMainFrame::CMainFrame()  
{  
}  
  
CMainFrame::~CMainFrame()  
{  
}  
  
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)  
    ON_WM_CREATE()  
END_MESSAGE_MAP()  
  
// CMainFrame 消息处理程序  
  
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{  
    if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)  
        return -1;  
  
    // TODO: 在此添加您自己的创建代码  
    // 例如,你可以在这里创建和添加控件到窗口  
  
    // 创建一个空白的窗口客户端区域  
    CRect rectClient;  
    GetClientRect(&rectClient);  
    ::SetWindowPos(m_hWndMDIClient, NULL, rectClient.left, rectClient.top,  
        rectClient.Width(), rectClient.Height(),  
        SWP_NOACTIVATE | SWP_NOZORDER);  
  
    return 0;  
}  
  
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)  
{  
    if( !CMDIFrameWndEx::PreCreateWindow(cs) )  
        return FALSE;  
    // TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式  
  
    return TRUE;  
}

在这个例子中,OnCreate 函数是MFC框架调用以创建窗口的地方。在OnCreate函数中,我们首先调用基类CMDIFrameWndEx::OnCreate来执行标准的窗口创建过程。然后,我们获取客户端区域的矩形,并使用SetWindowPos函数调整多文档界面(MDI)客户端窗口的大小以填充整个主窗口。这将创建一个空白的窗口客户端区域。

请注意,这个示例假设你使用的是MDI(多文档界面)应用程序类型。如果你使用的是SDI(单文档界面)或对话框类型的应用程序,你需要调整代码以适应不同的基类(如CFrameWndCDialogEx)。

此外,还需要确保你的MainFrm.h头文件和其他相关文件(如应用程序类)已正确设置,并且你的项目配置正确以支持MFC。

最后,编译并运行你的应用程序。如果一切配置正确,你应该会看到一个没有任何控件的空白窗口。你可以根据需要在这个基础上添加控件和其他功能。

六,详细教学

小伙伴们可以跟着B站视频教程学习,也可以参考下面这篇文章

MFC 最详细入门教程-CSDN博客

基础的图形化编程是程序员必须掌握的,除了MFC之外,还有QT等等。用这些框架编程远比你想象得简单,一起学起来吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值