MFC界面编程基础(02):MFC窗口的创建

article/2025/9/5 9:39:26
上一篇:MFC界面编程基础(01):Windows 编程模型下一篇:MFC界面编程基础(03):消息映射、窗口绘制、文档/视图结构体系

MFC是什么?

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC把Windows SDK API函数包装成了几百个类,MFC给Windows操作系统提供了面向对象的接口,支持可重用性、自包含性以及其他OPP原则。MFC通过编写类来封装窗口、对话框以及其他对象,引入某些关键的虚函数(覆盖这些虚函数可以改变派生类的功能)来完成,并且MFC设计者使类库带来的总开销降到了最低。

编写第一个MFC应用程序

两个重要的MFC类:

  • CWinApp 应用程序类
  • CFrameWnd 窗口框架类

CFrameWnd 框架窗口类

MFC的CWnd类以及其派生类为 窗口 或 应用程序创建的窗口 提供了面向对象的接口。CFrameWnd就是从CWnd派生出来的。CFrameWnd模仿框架窗口行为,我们可以把框架窗口作为顶层窗口看待,它是应用程序与外部世界的主要接口
如果想要创建一个窗口,可以在此类中调用Create或CreateEX函数,并且在CWinApp::InitInstance中创建一个框架窗口对象,并通过ShowWindow函数将其显示出来。

CFrameWnd::Create原型如下:
在这里插入图片描述
Create接收的8个参数6个有默认值定义。我们只需要为函数的前两个参数指定值,剩下六个参数接收默认值。第一个参数lpszClassName指定了窗口基于WNDCLASS类的名称,为此将其设定为NULL将创建一个基于已注册的WNDCLASS类的默认框架窗口。lpszWindowName参数指定将在窗口的标题栏出现的文字。

CWinApp应用程序类
MFC应用程序的核心就是基于CWinApp类的应用程序对象。CWinApp提供了消息循环来检索消息并将消息调度给应用程序窗口。它还包括可被覆盖的、用来自定义应用程序行为的主要虚函数。一旦包含Afxwin.h,就可以将CWinApp以及其他MFC类引入应用程序中。一个MFC程序可以有且仅有一个应用程序对象,此对象必须声明为在全局范围内有效,以便它在程序开始时即在内存中被实例化

  1. InitInstance函数
    CWinApp::InitInstance函数是一个虚函数,其默认操作仅有一条语句:
    return TRUE;
    InitInstance的目的是给应用程序提供一个自身初始化的机会,其返回值决定了框架接下来要执行的内容,如果返回FALSE将关闭应用程序,如果初始化正常返回TRUE以便允许程序继续进行。此函数是MFC应用程序的入口。
  2. m_pMainWnd 成员变量
    在 CWinApp 中有一个名为 m_pMainWnd 的成员变量。 该变量是一个 CWnd 类型的指针,它保存了应用程序框架窗口对象的指针。也就是说,是指向 CFramWnd 对象(框架窗口类对象)的指针。
  3. 程序代码实现

在这里插入图片描述
在这里插入图片描述

完整代码
// mfc.h

#pragma once#include <afxwin.h>//1)应用程序类 CWinApp, 派生类(子类)
class MyApp: public CWinApp
{
public://基类的虚函数//派生类只是重写//MFC程序的入口地址virtual BOOL InitInstance();
};//2)框架类	CFrameWnd, 派生类(子类)
class MyFrame: public CFrameWnd
{
public:MyFrame();//声明消息映射宏DECLARE_MESSAGE_MAP()afx_msg void OnLButtonDown(UINT, CPoint);afx_msg void OnPaint();private:
};

// mfc.cpp

#include "mfc.h"//有且只有一个全局的应用程序类对象
MyApp myApp;//程序的入口地址
BOOL MyApp::InitInstance()
{/*1、创建框架类对象2、显示窗口3、更新窗口4、保存框架类对象指针*///1、创建框架类对象MyFrame *frame = new MyFrame; //构造函数//	2、显示窗口frame->ShowWindow(SW_SHOWNORMAL);//	3、更新窗口frame->UpdateWindow();//4、保存框架类对象指针m_pMainWnd = frame;return TRUE;
}//定义消息宏
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)ON_WM_LBUTTONDOWN()ON_WM_PAINT()END_MESSAGE_MAP()MyFrame::MyFrame()
{//CWnd类的成员函数  CWnd::Create//CFrameWnd 继承于 CWndCreate(NULL, TEXT("MFC"));
}void MyFrame::OnLButtonDown(UINT, CPoint)
{//CWnd::MessageBoxMessageBox(TEXT("鼠标左键"));
}void MyFrame::OnPaint()
{
// 	QPainter p(this);
// 	p.drawxxxx();CPaintDC cdc(this);cdc.TextOutW(100, 100, TEXT("你好,mfc"));
}
上一篇:MFC界面编程基础(01):Windows 编程模型下一篇:MFC界面编程基础(03):消息映射、窗口绘制、文档/视图结构体系

http://chatgpt.dhexx.cn/article/e3RKaRun.shtml

相关文章

MFC界面编程基础(01):Windows 编程模型

上一篇&#xff1a;MFC界面编程基础&#xff08;00&#xff09;&#xff1a;基本概念下一篇&#xff1a;MFC界面编程基础&#xff08;02&#xff09;&#xff1a;MFC窗口的创建 WinMain函数 当 Windows 操作系统启动一个程序时&#xff0c;它调用的就是该程序的 WinMain 函数…

简单聊天室的设计 C++ MFC

b站有更高级教学视频 https://www.bilibili.com/video/av38700336/ 一、要求 要求&#xff1a;分别设计基于对话框的客户端和服务器端的程序&#xff0c;实现两端的通信&#xff0c;服务器端能接受客户端的消息&#xff0c;并且显示客户端的连接信息&#xff0c;把客户端信息…

MFC 中使用QT开发界面

首先创建一个基于对话框的MFC工程&#xff0c;当然其他的像是多文档、单文档工程也是可以的&#xff0c;只是为了简单起见我这里用的是对话框 然后通过鼠标右键点击项目&#xff0c;然后依次点击属性 --> C/C -->常规在工程的附加头文件中添加上QCore、QGui、QWidget和QT…

第六篇--MFC美化界面

1.MFC如何设置背景颜色 首先,为对话框添加WM_CTLCOLOR消息,方法为:右击Dialog窗口 --> Class Wizard --> Messages --> WM_CTLCOLOR --> Add Handler --> Edit Code 然后,在Dlg.h文件中添加成员变量CBrush m_brush; 接着,在之前Edit Code的位置,写上 HB…

MFC界面类库Xtreme Toolkit Pro 下载及使用教程介绍

Xtreme Toolkit Pro 是针对Windows程序员的一套先进的用户界面套包&#xff0c;强大的功能可使您的应用程序具有专业的、现代感的外观。 Xtreme Toolkit Pro 由8个专业级的构件组成&#xff0c;Xtreme CommandBars, Xtreme Docking Pane, Xtreme Property Grid, Xtreme Report …

wxWidgets界面设计工具DialogBlocks

工欲善其事&#xff0c;必先利其器。在MFC上开发&#xff0c;有VS系列强大的可视化工具&#xff0c;基于wx的开发工具虽然没有VS、QT的界面设计器强大&#xff0c;但在灵活度上VS的界面设计器是没法比的&#xff08;QT的没有用过&#xff0c;不做评论&#xff09;。 如…

Visual Studio开发MFC如何打开可视化窗口编辑界面

在使用Visual Studio 2019开发工具开发MFC工程项目时&#xff0c;如果把可视化界面窗口编辑界面关闭后如何打开&#xff1f; 1、项目关闭后重新打开时的界面&#xff0c;没有可视化窗口界面显示。 2、在右侧的解决方案资源管理器中&#xff0c;选择资源文件下的 MFCApplicati…

VisualStudio2022 MFC对话框窗体托盘图标设计

目录 效果展示头文件1.1 头文件声明 CPP文件2.1 初始化2.2 功能实现 环境&#xff1a;VisualStudio2022 框架: MFC 对话框窗体 功能&#xff1a;托盘 对话框类&#xff1a;CBLToolsDlg 作者&#xff1a;CDamogu 时间&#xff1a;20220308 效果展示 头文件 1.1 头文件声明 头文…

MFC界面美化---自绘标题栏

做MFC项目的时候&#xff0c;会经常遇到需要美化界面的时候。mfc的原始界面比较丑&#xff0c;今天主要记录一下对MFC标题栏重绘的过程&#xff0c;最终效果是这样的。 1.因为要对标题栏进行重绘&#xff0c;我们要把MFC的原生标题栏给去掉&#xff0c;在MFC对话框的属性那里&a…

Windows界面编程:MFC

前言 大家之前在学C/C语言时&#xff0c;基本都是通过控制台实现“人机交流”的。但大家每次在写控制台程序时&#xff0c;看到黑框框应该都会有些许不爽吧&#xff1a;“输入输出为什么不能基于图形用户界面而非要使用文本用户界面呢&#xff1f;”事实上&#xff0c;在各个环…

MFC-登录界面(可修改密码)

登录界面的博客有很多&#xff0c;参考了这一篇文章&#xff0c;下面给出链接。 MFC做一个登录界面&#xff08;用户名&#xff0c;密码以及密码的明文密文切换&#xff09;_umarutyan的博客-CSDN博客 但这里无法修改密码&#xff0c;下面做出一些补充。 由于用不到数据库&a…

MFC界面工具BCGControlBar入门:如何使用工具栏编辑器

BCGControlBar ("Business Components Gallery ControlBar")是MFC扩展库&#xff0c;使您可以创建具有完全自定义选项&#xff08;功能区、可自定义工具栏、菜单等&#xff09;以及一组专业设计的丰富Microsoft Office和Microsoft Visual Studio的应用程序 GUI控件&a…

MFC程序中使用QT开发界面

如果你有一个现成的MFC项目在做维护&#xff0c;但是你厌倦了使用MFC繁琐的操作来做界面美化&#xff0c;或者你需要在这个项目中用到QT里面好用的某些功能&#xff1b;亦或者是你需要使用某些只能在MFC中使用的组件&#xff0c;但是界面这部分已经用QT做好了。那么这篇文章可能…

一、MFC登陆界面

一、新建项目 打开VS2022——>创建新项目——>选择MFC应用&#xff0c;点击下一步——>修改项目名称和位置&#xff0c;点击创建——>修改应用程序类型、项目样式经典菜单选项 二、添加预处理指令 VS建议采用带_s的函数&#xff0c;如scanf_s、strcpy_s&#xff0…

MFC基础知识与课程设计思路

引言 本文致力于提供MFC的相关知识&#xff0c;以方便大家更好地认识MFC的使用方法。介绍将会分为以下几个部分&#xff1a;MFC初始文件的理解、MFC我们所使用的框架理解、MFC的进阶用法、MFC我在使用过程中遇到的问题及解决方法。 MFC初始文件的理解 MFC的初始文件中有两项文…

MFC添加程序关闭时时的提示界面

文章目录 MFC一.简介二.方法 MFC 一.简介 在应用程序退出的时候&#xff0c;不能点击叉直接退出&#xff0c;我们想添加一个退出提示。在点击叉后&#xff0c;弹出是否确定退出的界面&#xff0c;如下面的界面&#xff0c;具体操作往下看 二.方法 找到我们需要操作的主界面…

【MFC】模拟采集系统——界面设计(17)

功能介绍 启动界面 开始采集&#xff1a; PS&#xff1a;不涉及 数据保存&#xff0c;重现等功能 界面设计 界面分为三块&#xff1a;顶部黑条带关闭按钮、左边对话框&#xff0c;右边的主界面 资源&#xff1a; 顶部黑条 top.bmp 2* 29 &#xff08;宽 * 高 像素点&…

MFC界面设计入门篇

点击C里的MFC再点击MFCApplication&#xff0c;到下面改名字和路径&#xff0c;然后OK 然后点击Next&#xff0c; 选择single document&#xff0c;MFCstandard&#xff0c;简体中文&#xff0c;然后Finish 这时候可以先直接运行&#xff0c;看看工程的样子&#x…

最最简单的几个Mac终端命令

几个简单的Mac终端命令 目录切换相关 cd空格/ 回到根目录cd空格… &#xff08;或者 cd空格…/&#xff09; 回到上一级目录cd空格. 回到当前目录pwd 显示从根目录到当前目录的完整目录 vi操作相关 注意&#xff1a;vi操作的文件如果不存在&#xff0c;则先自动创建一个该名字…

Mac 终端基本命令

基本命令 1、列出文件 ls 参数 目录名 例: 看看驱动目录下有什么:ls /System/Library/Extensions 参数 -w 显示中文&#xff0c;-l 详细信息&#xff0c; -a 包括隐藏文件 2、转换目录 cd 例&#xff1a;想到驱动目录下溜达一圈 cd /System/Library/Extension…