Window桌面应用程序初学(1)--自动生成的主程序框架分析

专业实习的第一天,主要入门了window窗口、消息处理的一些基本内容。本人有一定的编程基础,而且很巧即将结课的面向对象程序设计这门课程期末大作业我们就已经借助MFC进行了一个小而完整的系统的构建与实现。尽管是借助了许多MFC的接口,但是依然接触到了很多底层的知识,相信在这里的window更底层的学习中会更容易上手。

那么在这里基于一个VS2019自动生成的window初始窗口总结一下我今天学的内容:

全局变量以及函数声明含义:

Window桌面应用程序初学(1)--自动生成的主程序框架分析_第1张图片
首先我们要知道什么是“句柄”——它相当于记录装入到了内存的资源的ID,常常在变量命名时以 “h”开头。

hInst就是一个句柄,记录的本模块在内存中的首地址,然后其他资源(菜单资源、字符串资源等)都可以更具结构从此句柄偏移相应位置从内存中读取得到。

szTitle[]和szWindowClass[]不必多说。

函数MyRegisterClass():用来“注册”一个新窗口的,本质是创建了一个WNDCLASSEX的对象,并且指定相关的参数,然后将他返回。(ATOM是unsigned short int 类型,)

函数InitInstance():简单来说是依据内存中的那个窗口实例hInstance创建窗口,并显示给用户看。(也就是说在这个函数运行之前,用户是看不到任何东西的)返回Bool表示成功与否。

函数WndProc():看到CALLBACK里面想到和回调函数有关,借此契机了解了回调函数的内涵。简单来说当一个函数的指针作为另一个函数调用时使用的参数,那么这个函数指针指向的函数就是一个回调函数。最经典的案例就是STL里面的快排,调用sort()的时候,需要自己写一个比较函数comp()来指定比较方法,此时我写的comp()函数的函数指针comp就要作为参数带入sort(),这就是一个回调函数了。 那么回到WndProc()本身,这是一个用来相应消息处理的回调函数,由系统来调用。用参数指定了当某窗口句柄发生了什么事件时应该做什么事情。

函数About():是About对话框的对话框处理函数,相似与上一个函数,但是适用没那么广泛。

用Debug调试进行源码跟踪展示一个窗口的出现:Window桌面应用程序初学(1)--自动生成的主程序框架分析_第2张图片

初始化了一些变量,没有窗口出现
Window桌面应用程序初学(1)--自动生成的主程序框架分析_第3张图片
进入MyRegisterClass()函数 在内存中进行一个窗口的各种属性的设定

Window桌面应用程序初学(1)--自动生成的主程序框架分析_第4张图片
即将进行窗口的呈现

在这里插入图片描述
从这一句起调用了许多WndProc回调函数,并且中途出现了窗口的进程,并且注意

在这里插入图片描述
这句对WndPorc的递归调用处理其他的一些内容。
在这里插入图片描述在这里插入图片描述
出现了进程,但是没有出现图标,应该是还没到加载资源的时候

在这里插入图片描述
进入这个函数,同样是调用了许多WndPorc

Window桌面应用程序初学(1)--自动生成的主程序框架分析_第5张图片
完成后,图标和窗口都显示出来了,但是注意到无法选中与操作窗口,在考虑到调试模式不放行的情况下,我认为应该是包括移动窗口这样的操作也应该要依赖WndPorc函数。

Window桌面应用程序初学(1)--自动生成的主程序框架分析_第6张图片

最后进入主循环,注意到此时WndProc函数在不断调用
Window桌面应用程序初学(1)--自动生成的主程序框架分析_第7张图片
并且message始终未127,判断是在等待用户操作。

至此,一个裸的窗口应用程序就跑起来了。

总结:

从课上所学和在写本文过程中,尤其是跟踪源码过程里,也算是补充了无数知识,认识到WndProc的地位和作用,之后再在实践中继续学习吧!

你可能感兴趣的:(Window桌面应用初学)