惧留孙网

juliusun.com

惧留孙网 > 在线教程 > WIN32 SDK教程

窗口基础

  每个窗口都其对应的窗口句柄,窗口句柄类型是HWND。窗口的很多操作都是基于消息的,比如键盘消息、鼠标消息、窗口销毁消息等。事实上很多API函数内部也是通过消息来达到目的的。

  创建窗口的过程并不是非要像上一页那样固定,调用的API也并非必须是上述几个API,有些是可以代替的。比如RegisterClass和RegisterClassEx是可以互相替代的,但上一页的例子我用的是RegisterClassEx。还有GetMessage,必要时可以用PeekMessage来代替GetMessage,达到更好的效果。初学,为了防止大家弄混,只拿其中一个为例。以后的教程中,将会对窗口等更加深入。

  对话框和窗口:教程中在创建窗口前,通过MessageBox创建了对话框。对话框和窗口看起来很像。但是他们是有区别的。严格来说,对话框也是一种窗口,也有窗口句柄,这是内部问题。从开发者的角度,对话框和窗口还是有区别的。但是对话框是一种资源,需要在资源编译器里编辑。而窗口通过代码实现。通过MessageBox我们没有编辑资源,因为MessageBox是系统API,资源已经封装在里面了。对话框一般是完成整个程序的部分功能,如打开文件对话框、选择字体对话框等。关于对话框及资源的使用。我们以后介绍。

  在Windows中,控件也是一种窗口,注意,菜单不是控件。比如按钮、编辑框等就是控件,控件又称为子窗口,显示在父窗口之上。控件和父窗口的通信多数也是通过消息来完成的。比如按钮、编辑框、静态框等系统已经预定义好了,我们不需要再注册窗口类了,直接创建按钮等子窗口就可以了。

  在Windows编程中,控件的使用非常重要。多数情况下,子窗口控件和父窗口,交互过程是相互发送消息。一般情况下,子窗口控件发给父窗口的消息称为通知消息,简称通知。

  我们以后的教程中,操作子窗口控件的通常形式是。在我们创建的顶层窗口消息处理过程中,对控件的通知消息做出响应,如按钮被点击之后会向父窗口发送通知,我们在父窗口中,对这些消息做出响应,如提示用户退出等。同时我们也需要主动向控件发送消息,如设置编辑框的内容。

  关于窗口消息处理函数:
  LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

  函数返回值是LRESULT类型,通过查看VC的代码发现,LRESULT就是long类型。CALLBACK是调用约定,和WinMain前面的APIENTRY是一样的,这是系统规定,窗口消息处理函数必须采用CALLBACK这种约定。自己定义的函数,如果不写调用约定,是默认的调用约定,初学者不必在意,写代码时如非必要,不必加上调用约定。

  窗口消息处理函数四个参数第一个参数hWnd是产生消息的窗口句柄,详细解释,重点看下uMsg、wParam、lParam三个参数。窗口光有消息是不够的,还要有附加参数,这两个附加参数就是wParam和lParam,这两个参数对于不同的消息,意义不同,也并不是所有的消息都会用到这两个参数,有的消息只用到一个,有的一个都不会用到。wParam是WPARAM类型,就是unsigned int类型,lParam是LPARAM类型,就是long类型。发送消息时,不光要有消息,还要传递这两个参数,部分函数发送消息,不需要这两个参数,因为那些函数内部给填充了。两个参数的意义,具体情况,以后具体分析,用过一两次,大家就熟悉了。

  强调一下窗口座标,窗口座标单位是像素,屏幕(如果是子窗口,则是相对于父窗口)左上角像素点为0,0,Y座标随着屏幕向右移而增加,X座标随着屏幕向下而增加。

视频教程

作者QQ:3304576112  交流QQ群:316930386 C语言窗口程序学习群 本教程内容由 juliusun.com 保留版权,请匆复制传播。

上一页  目录  下一页
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的