孙鑫VC视频学习笔记之windows程序内部运行原理

孙鑫视频VC++深入详解学习笔记 <br />VC++深入详解学习笔记<br />Lesson1: Windows程序运行原理及程序编写流程<br />Lesson2: 掌握C++基本语法<br />Lesson3: MFC框架程序剖析<br />Lesson4: 简单绘图<br />Lesson5: 文本编程<br />Lesson6: 菜单编程<br />Lesson7: 对话框编程<br />Lesson9: 定制应用程序的外观<br />Lesson10: 绘图控制<br />Lesson11 图形的保存和重绘<br />Lesso 阅读详情
这两天看了孙鑫VC教学视频的第一集:WinDows程序内部运行原理。将所学内容整理成笔记以备将来之需,其文如下:

1.  关于计算机系统,如图所示:

                                                                            

计算机系统大致分为三层:应用程序,操作系统,硬件设备。应用程序通过调用操作系统提供的API来通知操作系统完成对底层硬件设备的操作;相反,操作系统会将硬件设备的感知封装为消息传递到消息队列,然后由应用程序从消息队列中取走,并做出对消息的具体响应。

2.  新名词解释。

句柄:即资源的标识,操作系统将通过句柄来寻找对应的资源。如图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)

窗口类的一些变量:变量的每一位置1则表示具备对应的那种特性,反之则无。变量中具体位代表的意义难以记忆,所以通过宏来进行代替,如CS_VREDRAW=0x0001,CS_HREDRAW=0x0002。如果想使该变量同时具有几种特性,则可以将这几种特性对应的宏进行OR(|)运算,若要从该变量中去掉每一特性,则将对应的宏取反之后再与该变量进行&运算。举例:style=CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE,表示变量同时设置了以上三种对应的特性。

回调函数:当应用程序收到消息时,需要调用一个函数进行消息处理,函数调用的过程只由操作系统完成,而回调函数的处理方法的代码需要应用程序完成。每一种不同类型的窗口都有自己专用的回调函数,该函数是通过lpfWnsProc成员指定。

3.  第一个WinDows程序。

创建一个完整的窗口程序的四个步骤:

  • 设计一个窗口类:填充WNDCLASS类
  • 注册窗口类:RegisterClass函数
    ATOM RegisterClass(
      CONST WNDCLASS *lpWndClass  // class data
    );
  • 创建窗口:CreateWindow函数
    HWND CreateWindow(
      LPCTSTR lpClassName,  // registered class name
      LPCTSTR lpWindowName, // window name
      DWORD dwStyle,        // window style
      int x,                // horizontal position of window
      int y,                // vertical position of window
      int nWidth,           // window width
      int nHeight,          // window height
      HWND hWndParent,      // handle to parent or owner window
      HMENU hMenu,          // menu handle or child identifier
      HINSTANCE hInstance,  // handle to application instance
      LPVOID lpParam        // window-creation data
    );
  • 显示并更新窗口:ShowWindow和UpWindow函数,具体声明查询MSDN

除此之外,还有两个重要的过程,即通过while循环来获取各种消息以及编写回调函数对不同消息的处理方法。具体编写代码所示:

#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinWanProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);


int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
	//1.设计一个窗口类
	WNDCLASS wndcls;
	wndcls.cbClsExtra = 0;
	wndcls.cbWndExtra = 0;
	wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
	wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);
	wndcls.hInstance = hInstance;
	wndcls.lpfnWndProc = WinWanProc;
	wndcls.lpszClassName = "myfirst";
	wndcls.lpszMenuName = NULL;
	wndcls.style = CS_HREDRAW | CS_VREDRAW;

	//2.注册窗口类
	RegisterClass(&wndcls);
	
	//3.创建窗口类
	HWND hwnd;
	hwnd = CreateWindow("myfirst","windows",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);

	//4.显示和更新窗口
	ShowWindow(hwnd,SW_SHOWNORMAL);
	UpdateWindow(hwnd);

	//获取消息
	MSG msg;
	while (GetMessage(&msg,NULL,0,0))//从消息队列获取消息,若有消息则一直返回TRUE
	{
		TranslateMessage(&msg); //将消息对WM_KEYUP和WM_KEYDOWN转换成WM_CHAR消息
		DispatchMessage(&msg);//将消息路由给操作系统,由操作系统调用窗口回调函数
	}
	return 0;
}

	//5.回调函数,对不同的消息完成不同的响应
LRESULT CALLBACK WinWanProc(
	HWND hwnd,      // handle to window
	UINT uMsg,      // message identifier
	WPARAM wParam,  // first message parameter
	LPARAM lParam   // second message parameter
)
{
	switch(uMsg)
	{
		case WM_CHAR:
			
			char str[20];
			sprintf(str,"the key_char is %d",wParam);
			MessageBox(hwnd,str,"wang",MB_OK);
			break;
			

		case WM_LBUTTONDOWN:
			MessageBox(hwnd,"mouse clicked!","wang",MB_YESNO);
			HDC hdc;  //设备上下文,可以屏蔽设备驱动程序,方便应用程序的调用
			hdc = GetDC(hwnd);
			TextOut(hdc,0,50,"yes i do!", strlen("yes i do!"));
			ReleaseDC(hwnd,hdc);
			break;
			

		case WM_PAINT:
			HDC hDC;
			PAINTSTRUCT ps;
			hDC = BeginPaint(hwnd,&ps);
			TextOut(hDC,0,0,"paint message!",strlen("paint message!"));
			EndPaint(hwnd,&ps);
			break;
			

		case WM_CLOSE:
			if(IDYES==MessageBox(hwnd,"是否要推出程序?","wang",MB_YESNO))
			{
				DestroyWindow(hwnd);
			}
			break;

		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hwnd,uMsg,wParam,lParam);	
	}	
	return 0;
}
孙鑫老师的视频讲的深入浅出,我决定将好好学习VC编程,感谢老师提供这么好的资源,强者自强!
分享孙老师的C++ 教程,孙鑫_VC++深入详解 内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,绝对是目前国内顶级的VC++教学视频。Windows编程知识,VC++面向对象的编程思想,MFC编程,涵盖了软件开发中的绝大部分应用,以及在以后开发中可能出现的问题,由孙鑫老师一一帮你剖析。在一些重难点知识以及属于操作系统内核编程方面的知识,孙鑫老师都将给你剖析其本质,讲解其后台运行的原理,让你从根本上理解、掌握并灵活运用这些知识。编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和MFC编程中的难点、重点,让你轻松掌握。 阅读详情

相关推荐

深入构建加密货币价格预测系统:从数据获取到模型优化的完整指南!

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1276

孙鑫C++视频教程

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整) 孙鑫C++教程(全20讲)PPT讲义.rar 孙鑫C++教程01.rar 孙鑫C++教程02.rar 孙鑫C++教程03.rar 孙鑫C++教程04.rar 孙鑫C++教程05.rar 孙鑫C++教程06.rar 孙鑫C++教程07.rar 孙鑫C++教程08.rar 孙鑫C++教程0

又见炊烟 6280

新硬盘到手,在统信UOS或麒麟系统上怎么认?保姆级教程从识别到挂载一步到位

本文提供新硬盘在统信UOS或麒麟KYLINOS系统上的完整配置指南,从识别物理硬盘到挂载全流程详解。通过终端命令如df和lsblk,帮助用户完成硬盘识别、分区、文件系统创建及挂载配置,确保新硬盘顺利投入使用。

weixin_30698297的博客 442

孙鑫VC视频教程笔记之第一课“Windows程序的内部运行原理”

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

Roger Ge 的专栏 2452

人工智能训练师认证教程(5)使用MONAI进行医学影像分析的完整指南

本文介绍了使用MONAI框架进行医学影像分析的全流程。首先详细说明了环境搭建步骤,包括PyTorch和MONAI的安装配置。然后以肺部CT 3D分割为例,分步骤讲解了数据准备与预处理、3D UNet模型构建、训练配置(DiceLoss损失函数、Adam优化器等)以及训练验证循环的实现。文章还包含推理可视化方法和模型导出为ONNX格式的部署方案,并强调了医学影像分析中的数据格式适配、强度归一化、显存优化等关键注意事项。最后指出MONAI的医学专用组件可大幅简化开发流程,建议后续可探索SwinUNETR等进阶方

华为开发者布道师,天府英才计划,致力于大数据+AI 的应用创新,助力企业与个人AI创新赋能。 1208

从 30 天试用到企业级落地,2026 年学习和试用 SAP AI 的完整路线图

摘要:SAP AI产品体系存在试用版本与商业版本的边界模糊问题,需区分业务嵌入AI(如Joule)、开发者工具(SAP Build Code)和AI基础平台(Generative AI Hub)三个层级。建议学习路径:1)通过SAP Learning专区掌握理论框架;2)优先使用30天Generative AI Hub基础试用体验模型编排;3)结合90天BTP试用账户开发完整应用。特别注意免费计划已陆续停止,需以最新官方文档为准。开发者应重点关注AI如何与SAP技术栈(CAP、Fiori等)集成,而非单纯功

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 114

孙鑫VC++LESSON1:Windows程序内部运行原理

孙鑫VC++LESSON1:Windows程序内部运行原理

p975468132的博客 544

200、从零搭建具身智能实验平台:硬件选型软件栈与调试

我一开始图便宜,3D打印了一个平行夹爪,结果抓取力不够,稍微重点的物体就滑落,而且开合控制延迟大,VLA模型输出的动作指令根本跟不上。如果你非要自己做,记住两个原则:一是用谐波减速器而不是直驱,二是加力传感器,哪怕是一个简单的电阻应变片也行——没有力反馈,你的夹爪就是个瞎子。我的建议是,如果你用的是UR5老款,ROS1的ur_modern_driver包更成熟,但如果你要跑最新的VLA框架,很多库已经不支持ROS1了。所以,保持耐心,多备份代码,多记录日志,少熬夜。毕竟,这条路上,我们都是摸着石头过河。

sundong_81的博客 38

孙鑫VC讲座笔记--WINDOWS程序内部运行原理

声明:        本人最近也在看孙老师的视频,为了加强理解,所以想一些读书笔记。但是在优快云上一搜索,发现已经有朋友做了相关笔记。根据面向对象的“继承”观点,为了解决劳动力,所以我打算在他们的基础上添加、修改。应该不涉及著作权什么的东东吧?!        我在BLOG.youkuaiyun.com/LEWISLAU上搜索了下 ,有两位朋写了相关笔记(而且都是一样的)。不知道谁才是原作者,所以列

程序的江湖?! 勿在浮砂筑高台! 3557

OTG原理讲解

摘要:USB OTG(On-The-Go)是USB 2.0的重要功能,允许设备在主机和从机间动态切换,实现设备间的直接通信。其核心机制是通过ID引脚电平判断角色:Micro-USB中接地为Host,悬空为Device;USB-C则通过CC引脚协商。电路设计需处理ID引脚连接和VBUS电源控制,MCU根据ID状态配置USB控制器模式。典型应用包括手机连接U盘、键盘等外设,极大扩展了移动设备的连接能力。

m0_49476241的博客 3219

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

孙鑫视频VC++深入详解学习笔记(全)

Lesson1: Windows程序运行原理及程序编写流程 窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与Lessonecl调用规范的比较,初学者常犯错误及注意事项。 1.       Windows API与Win32 SDK 操作系统提供了各种方便开发Windows应用程序的编程接口,所的函数都在Win

NickWei的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

孙鑫C++教程(全20讲)

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整)孙鑫C++教程(全20讲)PPT讲义.rar孙鑫C++教程01.rar孙鑫C++教程02.rar孙鑫C++教程03.rar孙鑫C++教程04.rar孙鑫C++教程05.rar孙鑫C++教程06.rar

http://www.softwareace.cn 王牌软件 2510

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

资源分享-孙鑫VC++视频教程 rmvb格式 全20CD完整版

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整)

牧西凉的博客 7519

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

孙鑫VC++ 20节课的反思

Windows程序设计__孙鑫C++课程学习的反思   第一次看完孙鑫老师的视频,跟着他写代码能运行很多程序,但是过了几个月发现好多都忘记了,于是又重新学习了一遍,这次把20节课程的学习全都以博客日志的形式记录了下来,感觉学到了很多东西。观察孙老师的视频,千万不要跳着看,因为他是前后连续的,而且很多原理性的东西一跳而过,只抓程序,不重理论分析,在以后的程序设计时还会遇到同样的困惑,犯下同样的错

王定桥的专栏 7852

孙鑫C++视频教程 rmvb格式 全20CD完整版 精品分享

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整) 孙鑫C++教程(全20讲)PPT讲义.rar 孙鑫C++教程01.rar 孙鑫C++教程02.rar 孙鑫C++教程03.rar 孙鑫C++教程04.rar 孙鑫C++教程05.rar 孙鑫C++教程06.rar 孙鑫C++教程07.rar 孙鑫C++教程08.rar 孙鑫C++教程0

梅馨嫣栀 1万+

\t\t孙鑫VC视频笔记(全本)---转载 感谢作者(原文地址以及作者联系方式见文章顶部)

VC++深入详解学习笔记Lesson1: Windows程序运行原理及程序编写流程 原文地址:http://www.cnblogs.com/gaojun/archive/2010/08/15/1800099.html#_Toc269652888  QQ:346470752 Email:gaojunle@yahoo.com.cn由于文章内容太多超过百度文章的长度,请大家去看原文,链接如上,作者总结的

cuihao0532的博客 368

孙鑫 VC++从入门到精通 视频教程flash 下载

在线资源: http://www.pconline.com.cn/pcedu/specialtopic/vcpp/11 http://www.pconline.com.cn/pcedu/empolder/gj/vc/0607/820674.html我找这个vc++视频资源浪费了不少时间,把方法共享一下,希望能对您有点帮助。第一课 Windows程序运行原理及程序编写流程·第1节 ·第2

Guixue 1万+

孙鑫VC++深入详解全书总结

孙鑫VC++视频笔记列表(全) 简 介 第一课Windows程序内部运行机制 第二课MFC 程序框架的剖析 第三课MFC 消息映射机制和DC的获取 第四课简单字处理软件 第五课菜单编程 第六课对话框编程1 第七课对话框编程2 第八课MFC 中各类指针的获取 第九课应用程序外观修改 第十课图形绘制与通用对话框 第十一课图形保存和重绘 第十二课文件操作 第十三课文档和串行化

xiao__C的专栏 1244

孙鑫VC视频教程笔记之第十七课“进程间的通信”

  进程间通信的四种方式:Ø 剪贴板Ø 匿名管道Ø 命名管道Ø 邮槽 1.     剪贴板:剪贴板其实是系统管理的一个内存区域,当一个程序发生拷贝的时候,将是该内存区域得到填充,使用粘贴的时候是重该区域取出数据,然后显示的对应窗口上。 将指定内容赋值到剪贴板上:a.        打开剪贴板:OpenClipboard,注意:一旦打开了剪贴版,其它运用程

Roger Ge 的专栏 2168

孙鑫vc++ 第一课 笔记

今天开始决定好好复习了,为了能更深入更扎实掌握这一门编程技术,下了孙鑫的视频教程,感觉确实不错,说得很明白,让我有想做笔记的冲动,和大家一起分享了,但我只记我感兴趣的部分,呵呵(20080509 经过第一次修改)1、操作系统会为每个应用程序建立一个消息队列。      我以前以为windows只有一个消息队列,尽管我知道那样的话会很庞大。      所有主要的api函数都在windows.h头文件

happyhhb的专栏 992

看了孙鑫老师的vc视频,今天又在大侠的blog里,即http://blog.youkuaiyun.com/hbyufan/ 中发现有相关笔记,转贴学习

看了孙鑫老师的vc视频,今天又在大侠的blog里,即http://blog.youkuaiyun.com/hbyufan/ 中发现有相关笔记,感觉对自己很有帮助,特转贴学习。1,windows程序设计是种事件驱动方式的程序设计,主要基于消息的。当用户需要完成某种功能时,需要调用OS某种支持,然后OS将用户的需要包装成消息,并投入到消息队列中,最后应用程序从消息队列中取走消息并进行响应。2,消息结构:typ

junhua的专栏 1090

孙鑫VC学习笔记:第十七讲 (一) 用剪贴板实现进程间的通信

孙鑫教学视频笔记(17)进程间通信---------------------------------------------------------------------------------进程间通信的四种方式剪贴板匿名管道命名管道邮槽 --------------------------------------------------------------

梦想---软件设计师 814
下一篇: 虚拟机上ubuntu10.04上网设置
奋斗的蜗牛
博客等级 码龄16年 6粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值