孙鑫MFC笔记教程(1)--Windows程序的内部运行原理

孙鑫C++视频01:Windows程序内部运行原理 前言 从去年开始学C++后,然后学MFC后,就在纠结一个问题,到底要不要深入学windows和MFC,经常看见有人说MFC不行了,没人用了,大家都用QT,JAVA,C#,但是我想了想,学这些东西要有项目锻炼,而实验室用的还是MFC,所以今天我下定决心每天花一点时间学习MFC。 看优快云论坛里,都说看孙鑫的视频,我绝对还是刷一遍。 本文只是自己的学习记录,无任何参考价值,有兴趣可以B站看视频... 阅读详情

 

Windows程序的内部运行原理

 

操作系统和应用程序之间的关系:

应用程序到操作系统表示应用程序可以通知操作系统执行某个具体的动作

操作系统到应用程序表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。

 

windows程序设计是种事件驱动方式的程序设计,主要基于消息的。当用户需要完成某种功能时,需要调用OS某种支持,然后OS将用户的需要包装成消息,并投入到消息队列中,最后应用程序从消息队列中取走消息并进行响应。

每个应用程序OS都为它建立一个消息队列,消息队列是个先进先出的缓冲区,其中每个元素都是一个消息,OS将生成的每个消息按先后顺序放进消息队列中,应用程序总是取走当前消息队列中的第一条消息,应用程序取走消息后便知道用户的操作和程序的状态,然后对其处理即消息响应,消息响应通过编码实现。

 

创建一个完整的窗口需要经过下面四个操作步骤

设计一个窗口类。如:WNDCLASS wndcls。

注册窗口类。如:RegisterClass(&wndcls)。

创建窗口。如:CreateWindow(),CreateWindowEX();

显示及更新窗口。如:ShowWindow(),UpdateWindow();

 

消息的结构:

typedef struct tagMSG {

HWND hwnd; //接收消息的窗口句柄,和哪个窗口相关联。

UINT message; //消息标识,消息本身是什么,如WM_CHAR

WPARAM wParam; //消息的附加信息,具体取决于消息本身。

LPARAM lParam;

DWORD time; //消息投递时间。

POINT pt; //消息投递时,光标在屏幕上的位置。

} MSG;

 

WinMain函数结构:

int WINAPI WinMain(

HINSTANCE hInstance, // 当前实例句柄。

HINSTANCE hPrevInstance, //上一个该程序的实例句柄,32位系统中此值都为NULL

LPSTR lpCmdLine, // 命令行指针

int nCmdShow // (窗口)显示的状态

);

要带参调用WinMain类似于命令行的功能,在Project->setting->Debug->Program arguments项填写参数

 

窗口类WNDClass:

typedef struct _WNDCLASS {

UINT style; //窗口的类型

WNDPROC lpfnWndProc; //窗口过程函数指针(回调函数)

int cbClsExtra; //窗口类附加字节,为该类窗口所共享。通常0。

int cbWndExtra; //窗口附加字节。通常设为0。

HANDLE hInstance; //当前应用程序事例句柄。

HICON hIcon; //图标句柄 LoadIcon();

HCURSOR hCursor; //光标句柄 LoadCursor();

HBRUSH hbrBackground; //画刷句柄 (HBRUSH)GetStockObject();

LPCTSTR lpszMenuName; //菜单名字

LPCTSTR lpszClassName; //类的名字

} WNDCLASS;

 

 

源码(在VC中建立Win32 Application):

#include<windows.h>

孙鑫C++教程学习指南:从Windows SDK到MFC的实战路径 C++作为一门核心的系统编程语言,其学习难点往往在于如何将语法知识与实际工程应用相结合。理解面向对象编程、内存管理等基础概念是掌握C++的关键。在Windows平台开发中,深入理解消息循环、窗口过程等底层机制,能够为构建图形界面应用程序奠定坚实的原理基础。通过经典的MFC框架学习,开发者可以实践文档-视图架构、消息映射等工程模式,从而掌握桌面应用开发的核心思想。本指南围绕孙鑫C++教程这一经典资源,系统拆解了从C++语法、Windows SDK编程到MFC实战的完整学习路径,并提供了针对编译调试、环境搭建等 阅读详情

相关推荐

孙鑫MFC全套程序,基于vs2015

利用vs2015,对孙鑫mfc进行了代码编写 时间,能力原理,有些部分没有进行优化

孙鑫MFC完整笔记.pdf

孙鑫pdf文档,入门C++的好帮手,MFC类库,vc6.0,虽然版本比较老,但是在很多地方使用得仍然比较多。参考性大

经典资料:孙鑫vc++视频讲义配套的源代码20集全第1-10。

经典资料:孙鑫vc++视频讲义配套的源代码20集全第1-10。

孙鑫C++教程(全20讲)PPT讲义源码及电子书

最近正在学习C++,费了很多心思,分亨一下我的学习资源,孙鑫C++教程(全20讲)PPT讲义源码及电子书资源包括三部分 1.孙鑫C++教程PPT 2.孙鑫C++教程源码 3.孙鑫C++教程电子书 VC++深入详解的全部课程目录 第一课:Windows程序运行原理 第二课:掌握C++ 第三课:讲述MFC AppWizard的原理与MFC程序框架的剖析 第四课:MFC消息映射机制的剖析,讲述如何运用ClassWizard 第五课:文本编程 第六课:菜单的工作原理及编写应用 第七课:对话框用户界面程序的编写 第八课:对话框第二部分 第九课:如何修改MFC AppWizard向导生成的框架程序的外观和大小 第十课:图形的绘制,如何使用自定义画笔(颜色,线宽,线形 第十一课:图形的 保存和重绘 第十二课:文件操作 第十三课:文档与串行化 第十四课:网络相关知识 第十五课:多线程与聊天室程序的创建 第十六课:线程同步与异步套接字编程 第十七课:进程间通信 第十八课:ActiveX控件 第十九课:动态链接库 第二十课:HOOK和数据库访问 希望对大家的学习有帮助,如果不错,请帮点个赞,谢谢

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2289

手把手教你用Ollama & AnythingLLM搭建AI知识库,无需编程,跟着做就行!

本地运行大模型耗资源,需要选择较小的模型作为基础模型。在终端中运行时可能会出现 CUDA 错误,表示显存不足,导致提供的端口失效。中文支持不够完善。\3. 文中提到的技术软件工具有:Ollama、Chatbox、Open WebUI、向量数据库、嵌入模型、本地模型 Gemma、AnythingLLM。

2401_86435672的博客 1万+

逆变器并联--下垂控制引入虚拟阻抗

说明传统下垂控制的缺点、分析虚拟阻抗的原理和实现方法

weixin_58670090的博客 1万+

2019年高教社杯全国大学生数学建模竞赛 C 题:《机场的出租车问题》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 3453

数据库常见面试题(附答案)

1.事务四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前,其它会话不能看到过程 一致性,事务前后,数据总额一致 持久性,一旦事务提交,对数据的改变就是永久的 2.数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别 脏读:事务B读取事务A还没有提交的数据 不可重复读:两次事务读的数据不一致 幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看...

csdn问鼎 46万+

全新RT-DETR 有效涨点改进目录 | 包含各种卷积、主干改进、各种注意力机制、Neck特征融合改进、损失函数、AIFI创新改进、独家创新、小目标检测、特殊场景检测等最全大论文及小论文必备创新改进点

《全新最全RT-DETR涨点改进专栏》提供500+种创新改进方案,涵盖卷积、注意力机制、主干网络等模块优化,适用于PCB检测、工业缺陷检测等场景。专栏包含顶会论文改进点、数据集增强方法、热力图可视化等实用功能,帮助科研人员快速提升模型性能。提供完整环境配置指南(Python3.10+Pytorch2.5.1)和训练教程,支持不同版本RT-DETR模型。定期更新涨点策略,配套QQ答疑群免费指导,适合从入门到发论文全流程需求,特别推荐给目标检测领域的研究生和工程师。

Ai缝合怪、助力小伙伴高效发论文 3422

光学防抖OIS介绍与标定

前言:先看一下有无ois系统的效果。 1. OIS系统的作用就是消除镜头的抖动。 Gyro感受方向,Hall感受位移,Actuator驱动马达来矫正抖动方向和位移。 2.ois系统的结构构成 从上面来看ois系统主要有Hall,...

camerall 1万+

零基础学习CANoe Panel(17)—— Panel CAPL Function

CANoe内置了几个CAPLFunction,允许我们在CAPL运行时动态的更改Panel控件的属性,比如打开某个panel,禁用某个控件,更改控件颜色等。

蚂蚁小兵 3518

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: windows消息中文注释和用法
下一篇: 孙鑫MFC笔记教程(2)--C++经典语法与应用
liufei_learning
博客等级 码龄17年 821粉丝 145原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值