《VC++深入详解》读书笔记 第一章:Windows程序内部运行机制

[VC++深入详解] 1. Windows程序内部运行机制 本系列(VC++深入详解)为《VC++深入详解》(孙鑫 编著)读书笔记,很多例子都是仿照此书,很多概念也是来自此书,在对其做归纳总结的同时,也加入了自己的一些理解。 一、 最简单的Windows程序框架概览 #include #include LRESULT CALLBACK WndProc( _In_ HWND hwnd, _In_ UINT uMsg, _In 阅读详情
1.1API与SDK

API:Application Programming Interface
SDK:Software Development Kit

1.2窗口与句柄

一个Windows应用程序至少要有一个窗口,称为主窗口。
一个应用程序窗口通常都包含标题栏、菜单栏、系统菜单、最大最小化框、可调边框、及滚动条。
窗口分为客户区和非客户区。
在Windows应用程序中,窗口是通过窗口句柄(HWND)来标识的。句柄(HANDLE)。

1.3消息与消息队列

Windows程序设计是一种事件驱动方式的程序设计模式,主要是基于消息的。
在Windows程序中,消息是由MSG结构体来表示的。
    typedf struct tagMSG{
        HWND  hwnd;//成员变量hwnd表示消息所属窗口
        UINT     message;//成员变量message指定了消息的标识符
        WPARAM wParam;//用于指定消息的附加消息
        LPARAM lParam;//用于指定消息的附加消息
        DWORD time;//消息投递到消息队列中的时间
        POINT    pt;//鼠标当前位置
    }MSG;
每一个Windows程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息。
Windows程序中的消息可以分为“进队消息”和“不进队消息”。
进队的消息由系统放入到应用程序的消息队列中,然后由应用程序取出并发送。
不进队消息在系统调用窗口过程时直接发送给窗口。
不论进队与否,消息最终都由系统调用窗口过程函数对消息进行处理。

1.4WinMain函数

WinMain函数是Windows程序的入口函数,当WinMain函数结束或返回时,Windows应用程序结束。
    int  WINAPI WinMain(
        HINSTANCE hInstance,//程序当前运行的实例的句柄,这是一个数值
        HINSTANCE hPrevInstance,//当前实例的前一个实例的句柄
        LPSTR lpCmdLine,//指定传递给应用程序的命令行参数
        int nCmdShow//指定窗口的显示方式
    );
窗口的创建:1.设计窗口;2.注册窗口;3.创建窗口;4.显示窗口
设计窗口,Windows已经为我们定义好一个窗口应该具有的基本属性,我们只需要将要填充的部分填好窗口就设计好了。窗口的特征是通过结构体

WNDCLASS来定义的。
    typedef structure _WNDCLASS{
        UINT          style;//指定这一类型窗口的样式
        WNDPROC     lpfnWndProc;//函数指针,指向窗口过程函数
        int        cbClsExtra;//Windows为系统中的每一个窗口类管理一个WNDCLASS结构
        int        cbWndExtra;//窗口附加内存
        HANDLE        hInstance;//指定包含窗口过程的程序的实例句柄
        HICON        hIcon;//指定窗口类的图标句柄
        HCURSOR        hCursor;//指定窗口类的光标句柄
        HBRUSH        hbrBackground;//指定窗口类的背景画刷句柄
        LPCTSTR        lpszMenuName;//一个以空终止的字符串,指定菜单资源的名字
        LPCTSTR        lpszClassName;//一个以空终止的字符串,指定窗口类的名字
    }WNDCLASS;
注册窗口,窗口类(WNDCLASS)设计完后,需要调用RegisterClass函数进行注册。
    ATOM  RegisterClass(CONST WNDCLASS *lpWndClass);//*lpWndClass即窗口类对象的指针
创建窗口,设计并注册好窗口类之后,就可以用CreateWindow函数产生这种类型窗口。
    HWND  CreateWindow(
        LPCTSTR         lpClassName,//指定窗口类的名称
        LPCTSTR         lpWindowName,//指定窗口的名字
        DWORD         dwStyle,//指定创建的窗口的样式
        int         x,//窗口左上角的x坐标
        int         y,//窗口左上角的y坐标
        int         nWidth,//窗口的宽度
        int         nHeight,//窗口的高度
        HWND         hWndParent,//指定被创建窗口的父窗口句柄
        HMENU         hMenu,//指定窗口菜单的句柄
        HANDLE         hInstance,//指定窗口所属应用程序实例的句柄
        LPVOID         lpParam//作为WM_CREATE消息的附加参数lParam传入的数据指针
    );
显示窗口,调用函数ShowWindow来显示窗口
    BOOL ShowWindow(
        HWND hWnd,//成功创建窗口后返回的窗口句柄
        int nCmdShow//窗口的显示状态
    );
更新窗口,调用ShowWindow函数后,我们调用UpdateWindow来刷新窗口
    BOOL UpdateWindow(
        HWND hWnd//创建成功后的窗口句柄
    )
消息循环,在创建窗口、显示窗口、更新窗口后,我们需要编写一个消息循环,不断的从消息队列中取出消息并响应。
从消息队列中取出消息,我们调用GetMessage()函数
    BOOL GetMessage(
        LPMSG lpMsg,//指向一个消息(MSG)结构体,GetMessage从线程的消息队列中取出的消息信息将保存在该结构体对象中
        HWND hWnd,//指定接受属于哪一个窗口的消息
        UINT wMsgFilterMin,//指定要获取的消息的最小值
        UINTwMsgFiletermax//指定要获取的消息的最大值,若min和max都设置为0,则接收所有消息
    );
GetMessage函数接收到除WM_QUIT外的消息均返回非零值。
对于WM_QUIT消息,该函数返回零。
如果出现了错误,返回-1

Windows应用程序消息处理机制:(1)操作系统接受到应用程序的窗口消息,将消息投递到该应用程序的消息队列中。(2)应用程序在消息循环中调用

GetMessage函数从消息队列中取出一条一条的消息。取出消息后,应用程序可以对消息进行一些预处理,例如放弃对某些消息的响应,或者调用

TranslateMessage产生新的消息。(3)应用程序调用DispatchMessage,将消息回传给操作系统。(4)系统利用WNDCLASS结构体的lpfnWndProc成员

保存的窗口过程函数的指针调用窗口过程,对消息进行处理。

窗口过程函数,用于处理发送给窗口的消息。一个Windows应用程序的主要代码部分就集中在窗口过程函数中。
    LRESULT CALLBACK WindowProc(
        HWND  hwnd,//消息的窗口句柄
        UINT  uMsg,//消息代码
        WPARAM  wParam,//消息代码的附加参数
        LPARAM      lParam//消息代码的附加参数
    );
Windows Sockets网络编程读书笔记(及简单C/S实现) 文章目录简单介绍Socket1 WindowsSockets 简介2 套接字的两种主要形式3 在 VC 下开发套接字程序3. 1 在 VC 下开发套接字程序的基本步骤3. 2 回调函数的使用3. 3 利用多线程技术来开发网络通信3. 4 使用多线程进行套接字编程时应注意同步问题代码实现客户端服务端 简单介绍Socket 1 WindowsSockets 简介 Windows sockets(简称 ... 阅读详情

相关推荐

Ubuntu 解决WPS缺少宋体,微软雅黑等中文字体

这篇博客解决Ubuntu 18.04 无法使用中文字体的问题 问题描述

分享日常的学习,开展的项目,编写的软件,解决的问题等~ 1万+

第一章 Windows程序内部运行机制(2)窗口和句柄

  窗口是Windows应用程序中非常重要的元素。一个Windows应用程序至少有一个主窗口。窗口是Windows应用程序和用户进行交互的接口。   窗口通常包含标题栏、菜单栏、系统菜单、最小化框、最大化框、可调边框和滚动条。   窗口分为客户区和非客户区。应用程序通常在客户区中显示文字或绘制图形。标题栏、菜单栏、系统菜单、最小最大化框、可调边框统称为非客户区。非客户区主要由Wind...

weixin_30852367的博客 188

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)

在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。

darcsdn 2128

第一章,Windows程序内部运行机制

一个应用程序窗口通常都包含标题栏、菜单栏、系统菜单、最小化框、最大化框、可调边框,还有滚动条。

Marcelxx的专栏 1093

实战避坑:示波器测量非隔离开关电源的炸机风险与隔离方案

本文详细分析了使用示波器测量非隔离开关电源时的炸机风险,揭示了地线环路导致的短路问题,并对比了四种防炸机解决方案,包括示波器隔离供电、拔掉电源地线、使用差分探头和被测板隔离供电。重点推荐使用隔离变压器方案,确保测量安全与精度,同时提供了实操建议与经验分享,帮助工程师避免常见测量事故。

weixin_29224309的博客 556

【CSP-J/S】复赛注意事项 上机文件组织形式

每年/S 复赛都有很多同学因为一些小失误导致一年的努力付之东流。Tony老师整理了一些复赛容易踩坑的点,或许对你有帮助!

星卯教育-信奥教练tony 1万+

windows编程基础

说明:只供学习交流,转载请注明出处 windows编程基础 (1):API与SDK 我们在编写标准C程序的时候,经常会调用各种库函数来辅助完成某些功能:初学者使用得最多的库函数就是printf了,这些库函数是由你所使用的编译器厂商所提供的。在Windows平台下,也有类似的函数可供调用。不同的是,这些函数是由Windows操作系统本身提供的。Windows操作系统提供了各种各样的函数...

nayao-net 174

基于FMU的Star CCM+与Amesim复杂控制联合分析

基于FMU的Star CCM+与Amesim复杂控制联合分析

2201_75375391的博客 2017

『VC++技术内幕』(第四版)读书笔记

『VC++技术内幕』(第四版)读书笔记 关键字:VC++原作者姓名:loose_went文章原出处:vczx.com --http://www.vczx.com/minute.php 写在前面:   站长所看的『VC++技术内幕』版本为--潘爱民和王国印译清华大学出版的第四版,因有时工作忙碌,不能及时更新,请大家见谅! 第一天 Windows的编程模式 第二天 MFC应用程序框架 第三天 消息映

回家念经(kv300)--编程之禅 3228

Uncaught ReferenceError: process is not defined

这个错误 Uncaught ReferenceError: process is not defined 通常出现在浏览器环境中,因为 process 是 Node.js 环境的内置对象,并不是浏览器原生支持的。因此,浏览器无法识别 process,导致该错误。在App.vue中加上以下代码就能够有效解决。

猿小白的博客 1740

大数据学习指南从入门到精通

利用框架的力量,看懂游戏规则,才是入行的前提大多数人不懂,不会,不做,才是你的机会,你得行动,不能畏首畏尾选择才是拉差距关键,风向,比你流的汗水重要一万倍,逆风划船要累死人的为什么选择学习大数据开发,不选择Java开发?借棋弈做比喻,智商高的不要选择五子琪,要选择围棋,它能长久地吸引你。不都是在棋盘上一颗黑子一颗白子地下吗?因为围棋更复杂,能够掌握如此复杂的技艺、产生稳定输出的棋手、让我们更佩服。选择学习大数据开发也如此,能让你的职业生涯走得更远,少走弯路。

Lansonli(蓝深李)的博客 2万+

读书笔记(一)_VC++深入详解

这本书第一章就是讲Windows程序内部运行机制,初看的话比较吃力,不过理解了之后对后面还是有一定的帮助。对窗口的设计, 注册,创建,显示及更新讲的很详细具体。    私觉得句柄这个概念一定要好好理解,在之后会经常用到。    记录一下最基本的得到某窗口的句柄。虽说主窗口和子窗口有不同的方法,不过更喜欢这个简单,通用。 CWnd* pWnd=FindWindow(NULL,_T("标题

Mr_PrinCR的博客 763

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《VC++深入详解》读书笔记——1.Windows程序内部运行机制

API与SDK API:Windows操作系统提供给应用程序编程的接口(Application Programing Interface); SDK:软件开发包(Software Development Kit)。 消息与消息队列 Windows 是事件驱动方式的程序设计模式,主要是基于消息的,消息由MSG结构体表示。 typedef struct tagMSG{ HWND hwnd;

The Code of King 498

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IEM模型,地表粗糙度模拟

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

《vc++深入详解》读书笔记

第一章:windows程序内部运行机制07-05-16    wednesday一。API&SDK1.如c语言的库函数printf等,由编译器的厂商提供。而windows系统也提供了许多函数,以方便windows应用程序的开发,他们是windows系统提供给用户编写应用程序的接口(Application Programming Interface应用程序接口)。其主要的函数在windows

zheng80037的专栏 667

VC++读书笔记转载

VC++读书笔记转载第一天 Windows的编程模式 第二天 MFC应用程序框架 第三天 消息映射和视图类 第四天 资源和编译 第五天 基本事件处理 第六天 映射模式 第七天 滚动视窗 第八天 社备环境类 第九天 GDI对象 第十天 windows颜色映射 第一天 Windows的编程模式Windows程序中必须要有WinMain函数,因为该函数最重

zwq040438的专栏 1009

《vc++深入详解》读书笔记之一

第一章:windows程序内部运行机制07-05-16    wednesday一。API&SDK1.如c语言的库函数printf等,由编译器的厂商提供。而windows系统也提供了许多函数,以方便windows应用程序的开发,他们是windows系统提供给用户编写应用程序的接口(Application Programming Interface应用程序接口)。其主要的函数在windows

snowwolf_2006的专栏 499

[读书笔记]Windows程序内部运行机制【一】

API:应用程序编程接口。 SDK:软件开发包,开发包中包含API函数,帮助文档,使用手册,辅助工具等资源。 窗口都是通过窗口句柄(HWND)来标识的。例如图标,光标,画刷。   1.MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函数的声明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等许多类及其方法的声明。   2.在VC++开发环

xiaoding133的专栏【Stay hungry,Stay foolish】 975

vc++ 读书笔记(摘抄)

『VC++技术内幕』(第四版)读书笔记关键字:VC++原作者姓名:loose_went文章原出处:vczx.com 写在前面:  站长所看的『VC++技术内幕』版本为--潘爱民和王国印译清华大学出版的第四版,因有时工作忙碌,不能及时更新,请大家见谅! 第一天 Windows的编程模式 第二天 MFC应用程序框...

weixin_30338461的博客 143

Windows程序设计读书笔记-开始

开始学习Windows程序设计,为的在兵荒马乱的金融危机中沉淀些东西,很功利的心理,无他 三个先决条件:(1)熟悉Windows98,还行,最起码从界面上,不陌生(2)有C语言简单的基础,这个挺汗,学的少,要补齐,学习的过程中补齐,要熟悉C语言,特别是结构和指针(3)安装了VC++6.0,装好了,不过MSDN不能用,重新装了个MSDN,从VC++调用不起来,应该没大影响吧 

oliver_ace的专栏 316

《Windows程序设计》读书笔记------------->>第一个应用程序<<

看来我已经顺利安装好了VC++了,现在终于可以写我的一个简单的Windows应用程序了。打开《Windows 程序设计》的目录,进入[编写第一个WINDOWS程序],因为我之前还是学过一些编程语言的,对"HELLO XXXX"就对熟悉,我的第一个命令行程序就是为了实现这一功能。不过看了那个示范程序真是感到头大吧,不过幸运的是VC++帮我完成了大部分的代码,只要自己写很少的内容就可以了。运行VC

足兆叉虫的BLOG 963

《windows 程序调试》读书笔记之跟踪篇

--------------------+++++------------------------- @note:跟踪语句 windows:void OutputDebugString(LPCTSTR traceText); #ifdef _DEBUG #define OutputTraceString(text) OutputDebugString(text) #esle #defi

yiranshixin的专栏 666

《VC++深入详解》读书笔记-HOOK

1.进程内钩子 LRESULT CALLBACK KeyboardProc( int code,WPARAM wParam, LPARAM lParam ) {        if(VK_SPACE== wParam )            return 1;    else               returnCallNextHookEx( g_hKeyboard,cod

bitowen的专栏 304

创建Win32应用程序步骤——《VC++深入详解》读书笔记

Win32应用程序创建步骤:编写WinMain函数设计窗口类(WNDCLASS)注册窗口类创建窗口显示并更新窗口编写消息循环编写窗口过程函数1,编写WinMain函数 WinMain函数式Windows应用程序的入口点。函数原型如下:int WINAPI WinMain( HINSTANCE hInstance, //handle to curr...

weixin_34375054的博客 202
上一篇: 利用CStdioFile创建文件并写入文件
下一篇: DTU 设计开发前期准备(一)!
bbsview
博客等级 码龄15年 9粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值