10

win32开发(窗口类和窗口)

 3 years ago
source link: https://feixiaoxing.blog.csdn.net/article/details/103221735
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

win32开发(窗口类和窗口)

original.png
费晓行 2019-11-24 10:20:14 articleReadEyes.png 522
分类专栏: mfc和win32开发

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    之前虽然也编写win32代码,比如使用visual studio自动生成的win32框架。但是对于代码中一直存在的MyRegisterClass和CreateWindowW之间的关系不是很清楚,不清楚为什么要这么做。昨天晚上,自己重新阅读了《windows程序设计》这本书,并且利用了visual studio 2015做了一些实验之后,一下子明白了很多,也知道了窗口和消息之间的关系。

1、一切控件都是窗口

    和我们自己理解的窗口不同,其实在widnows平台上面,你能看到的控件都是窗口。菜单是窗口、状态栏是窗口、按钮是窗口、static也是窗口。所以,窗口不应该是狭义上的概念,该应该是一个通用的、广义上的概念。

2、窗口与窗口之间的关系

    窗口和窗口可以是独立开来的,也可以是依赖的关系。比如一个应用的大窗口和菜单之间就是依赖的关系,窗口动、菜单也懂。而MDI、或者是多界面程序,那么窗口之间就是独立的关系,一个窗口的生命周期和另外一个窗口没有多大关系。不管是独立开来,还是合并在一起,他们的消息处理可以使同一个c函数,也可以是不同的c函数。不过,对于大多数相互依赖的窗口来说,使用同一个c函数来处理所有的消息还是比较方便的。在CreateWindowW函数中,会有两个参数提示我们窗口之间是什么关系,一个是dwStyle、一个是hWndParent,前者是判断窗口之间怎么布局,后者说明窗口与窗口之间是什么关系。

3、窗口类和窗口

    windows平台上大部分的窗口类型都是定义好的,如果需要自定义一个自己需要的窗口,那么可以使用RegisterClassExW来完成。这个函数中最重要的参数就是两个,一个是lpszClassName,另外一个就是WndProc,前者说明了窗口类的名字,后者说明了消息处理的入口。

4、窗口创建

     有了注册好的窗口类,那么后面的创建窗口就很容易了。直接调用CreateWindowW函数,注意第一个参数lpClassName和之前注册的窗口类对应上就可以了。只要注册一个窗口类,那么注册无限多的窗口,并且这些窗口的入口函数都是WndProc。

5、消息处理

    可以利用一个窗口类生成很多类,但是消息的处理是一样的。WndProc有四个参数,分别是窗口句柄、消息类型、消息参数1、消息参数2。有了窗口句柄,其实我们就知道是哪个窗口发过来的消息了。当然,如果还设有菜单、工具栏、状态栏什么的,也是可以在这个地方拿到消息处理的。大部分消息都是系统定义好的消息,比如创建、鼠标、键盘、定时器、绘图消息等。自己也可以自定义消息,不过用的不多。

6、实践为先

    从最初的win32消息学习到现在,相关代码虽然看到了很多遍,但是如果不能反复实践和练习,理解上面还是会有很大的差距。不管是win32,还是其他的软件架构,还是真正实践了才会有更多的收获。单凭记忆获取的知识往往是浅显的、不深刻的、经不住实践考验的,只有经过自己理解、实践消化的知识才能为自己真正所用。

    虽然开发的时候用MFC居多,但是学习win32可以让自己开发MFC更加的得心应手。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK