Windows MFC编程入门——应用程序框架

article/2025/11/6 16:56:44

 一、SDK应用程序与MFC应用程序运行过程对比

  程序运行都要有入口函数,在C/C++程序中都是main函数,而windows应用程序的入口函数是WinMain或wWinMain。MFC程序也是从这个入口开始的。Windows SDK开发程序就是不使用MFC类库,直接用Windows API函数进行开发。

  下面就是SDK应用程序示例

#ifndef UNICODE
#define UNICODE
#endif #include <windows.h>LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{// Register the window class.const wchar_t CLASS_NAME[]  = L"Sample Window Class";WNDCLASS wc = { };wc.lpfnWndProc   = WindowProc;wc.hInstance     = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// Create the window.HWND hwnd = CreateWindowEx(0,                              // Optional window styles.CLASS_NAME,                     // Window classL"Learn to Program Windows",    // Window textWS_OVERLAPPEDWINDOW,            // Window style// Size and positionCW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,NULL,       // Parent window    NULL,       // MenuhInstance,  // Instance handleNULL        // Additional application data);if (hwnd == NULL){return 0;}ShowWindow(hwnd, nCmdShow);// Run the message loop.MSG msg = { };while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{switch (uMsg){case WM_DESTROY:PostQuitMessage(0);return 0;case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hwnd, &ps);FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));EndPaint(hwnd, &ps);}return 0;}return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

 上面的程序运行的流程是:进入WinMain函数->初始化WNDCLASS,调用RegisterClass函数注册窗口类->调用CreateWindowEx函数->调用ShowWindow显示窗口->进入消息循环。关于消息循环再简单说下,Windows应用程序是消息驱动的,系统或用户让应用程序进行某项操作或完成某个任务时会发送消息,进入程序的消息队列,然后消息循环会将消息队列中的消息取出,交予相应的窗口过程处理,此程序的窗口过程函数就是myWndProc函数,窗口过程函数处理完消息就完成了某项操作或任务。

  1. 设计窗口
  2. 注册窗口
  3. 创建窗口
  4. 显示和更新
  5. 通过循环取消息
  6. 处理消息(窗口过程)

 

WINAPI在我环境下被定义为__stdcall  ,即参数的传递顺序:参数列表从右到左依次入栈,并在函数返回前清空堆栈

 

MFC应用程序:编写MFC程序需要包含#include<afxwin.h>头文件

自己创建MFC应用程序框架:自定义类继承自CWinApp应用程序类,创建MyApp app应用程序对象(有且只有一个)。程序入口为InitInstance()函数。在程序入口函数中创建自定义框架类(MyFrame继承自CFrameWnd)。在MyFrame类构造函数中创建窗口Create。显示更新窗口并保存框架类对象指针。

使用应用程序向导生成单文档应用程序框架:

 

 

 

 

消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTONDOWN消息的处理程序,然后就调用OnLButtonDown。

将消息映射添加到一个类中所做的全部工作:

1)在所操作类中,声明消息映射宏

2)通过放置标识消息的宏来执行消息映射,相应的类将在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。

3)对应消息处理函数分别在类中声明,类外定义


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

相关文章

MFC编程 -- 读取文件内容

一、源代码 1、读文件 BOOL 读文件(HWND hDlg,LPCTSTR sfile) {auto 文件指针 _tfopen(sfile,_T("rb"));//获取操作文件的指针int 文件大小 获取文件大小(文件指针);char* 读取的内容 new char[文件大小 2];//unicode是两个0结尾int n fread(读取的内容,1,文件…

网络聊天室(MFC编程)

本应用是一款简单的模拟qq聊天应用.主要分为服务器端与客户端 服务器select端&#xff1a; 客户端client: 服务器端代码如下: select.cpp: // select.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "dataHandle.h"#include#pragma c…

《MFC编程》:钩子函数

《MFC编程》&#xff1a;钩子函数 《MFC编程》&#xff1a;钩子函数钩子函数简介作用类型 MFC窗口如何创建代码书写 《MFC编程》&#xff1a;钩子函数 钩子函数简介 钩子函数是Windows消息处理机制的一部分&#xff0c;通过设置“钩子”&#xff0c;应用程序可以在系统级对所…

《MFC编程》:MFC程序执行流程

《MFC编程》&#xff1a;MFC程序执行流程 《MFC编程》&#xff1a;MFC程序执行流程入口函数执行流程CWinApp的成员视频链接 《MFC编程》&#xff1a;MFC程序执行流程 入口函数 MFC程序的入口函数与win32程序一样&#xff0c;都是从WinMain入口。 但是MFC库已经实现了WinMain…

MFC基础入门

1 MFC入门 1.1 为什么学习MFC 在Windows平台上做GUI开发&#xff0c;MFC是一个不错的选择。 学习MFC不仅可以学习到MFC本身&#xff0c;而且可以学习MFC框架的设计思想。 1.2 Windows消息机制 基本概念解释 SDK&#xff1a;软件开发工具包(Software Development Kit)&…

MFC编程入门精讲

MFC&#xff08;Microsoft Foundation Classes,Microsoft基本类&#xff09;是一组预定义的类&#xff0c;封装了Windows API&#xff0c;对Windows编程来说是一种面向对象的方法。 所有使用MFC类的名称都已C开始&#xff0c;如CView。 1、简单的MFC程序 1.1 添加包括afxwin…

第三课——MFC编程

一、MFC概述 1. MFC简述 MFC不仅仅是一套基础类库&#xff0c;更是一种编程方式。 2. MFC由来 1987年微软公司推出了第一代Windows产品&#xff0c;并为应用程序设计者提供了Win16&#xff08;16位Windows操作系统&#xff09;API&#xff0c;在此基础上推出了Windows GUI&…

MFC编程入门

一、 什么是MFC&#xff1f; 如果你要建立一个Windows应用程序&#xff0c;应该如何下手&#xff1f; 好的开端是从设计用户界面开始。 首先&#xff0c;你要决定什么样的用户能使用该程序并根据需要来设置相应的用户界面对象。Windows用户界面有一些标准的控件&#xff0c;如按…

MFC最详细入门教程[转载]

本人在学习MFC的过程中&#xff0c;发现下面这个比较好的教程&#xff0c;这边转载记录一下 原文地址&#xff1a;MFC 最详细入门教程 From&#xff1a;https://blog.csdn.net/wang18323834864/article/details/78621633/ Visual Studio 2019&#xff1a;https://visualstudio.…

XAMPP详细安装教程

XAMPP安装教程 打开XAMPP安装包 等待安装完成 打开安装好的XAMPP 出现这种问题之后&#xff0c;我直接采用修改Apache端口号的方法 修改完Apache之后点击start运行MySQL&#xff0c;结果一直没开启成功&#xff0c;一直显示框框中的语句。百度几篇文章的结果就是找到regedit.e…

xampp使用教程方法免费分享

XAMPP是一个把Apache网页服务器与PHP、Perl及MySQL集合在一起的安装包&#xff0c;允许用户可以在自己的电脑上轻易的建立网页服务器。使用XAMPP您可以轻松的在本机调试您的PHP程序、CMS以及wordpress博客程序。本文主要分享一下XAMPP的使用教程。 XAMPP使用方法 1.下载XAMPP …

怎样在xampp中使用mysql以及配置xampp

怎样在xampp中使用mysql 以及配置xampp &#xff08;这里是在xampp中安装mysql的&#xff09; 第一步&#xff1a;安装xampp 找到xampp的安装包&#xff0c;双击下载&#xff1a; 我是安装在C盘的 安装好后&#xff0c;就会有下面页面 点 第二步&#xff1a;配置xampp&…

XAMPP汉化教程指南

xampp是一款新手学习PHP必备的软件&#xff0c;但是这款软件对于国人来说不太友好&#xff0c;因为他的控制面板界面只有英文和德文。 怎么汉化xampp xampp虽然好用&#xff0c;功能也比较简单&#xff0c;按钮功能好记&#xff0c;但是整个控制面板都是英文或者德文&#xf…

PHP 开发-XAMPP 安装

开发环境&#xff1a;Windows10&#xff0c;XAMPP&#xff08;x64-7.4.33&#xff09;&#xff0c;Netbeans。 XAMPP 安装 官网下载XAMPP安装包&#xff0c;我下载的版本 x64-7.4.33。安装包中相关软件版本&#xff08;官网上可查询&#xff09;&#xff1a; Apache 2.4.54M…

XAMPP安装和使用教程

最近由于某些情况&#xff0c;转入对PHP进行探讨&#xff0c;比较晚啦&#xff0c;呵呵&#xff01; 由于php在windows下配置虽不是很烦&#xff0c;但也难免出现误差&#xff0c;觉得集成工具也不错。下面把XAMPP的安装和使用教程转帖过来&#xff0c;以备我以后查阅。 XAMPP…

在xampp 中使用mysql的方法

法一、打开xampp 控制面板&#xff0c;启动mysql&#xff0c;然后打开shell,输入 mysql 即可 这里说一下最近碰到的问题&#xff1a;当我输入 mysql 的时候出错&#xff1a; Error Code: 1044. Access denied for user localhost to database mydb 原因&#xff1a;存在一个用…

xampp安装

XAMPP&#xff08;ApacheMySQLPHPPERL&#xff09;是一个功能强大的建站集成软件包&#xff0c; 是一个易于安装且包含 MySQL、PHP 和 Perl 的 Apache 发行版。小编在安装MySQL的路上不断碰壁&#xff0c;虽然是越挫越勇&#xff0c;但是&#xff0c;一旦挫太多次了也就没有那份…

XAMPP 使用教程

XAMPP 使用教程 文章目录 XAMPP 使用教程1.启动XAMPP。2.在Apache上点击start。3.访问http://localhonst&#xff0c;出现页面。 1.启动XAMPP。 2.在Apache上点击start。 3.访问http://localhonst&#xff0c;出现页面。 这说明你已经成功开启了本地服务器。&#xff08;在使用…

mac安装xampp及使用攻略

前言&#xff1a;最近接了一个商城的项目&#xff0c;后端要用到thinkphp6&#xff0c;听老板说很简单的框架&#xff0c;果断上手&#xff0c;不过在配置环境上&#xff0c;mac和windows差距很大&#xff0c;有很多坑&#xff0c;不过我已经一路踩过来了&#xff0c;建议喜欢的…

最详细的XAMPP的安装及使用教程(图文)

XAMPP的安装及使用教程 1、简介 XAMPP&#xff08;ApacheMySQLPHPPERL&#xff09;是一个功能强大的建站集成软件包。这个软件包原来的名字是 LAMPP&#xff0c;但是为了避免误解&#xff0c;最新的几个版本就改名为 XAMPP 了。它可以在Windows、Linux、Solaris、Mac OS X 等多…