在上一篇中,咱们给最基本的窗体添加了一个按钮,有了按钮后,固然就须要发挥按钮的做用,你们都知道按钮最基本的功能就是经过用户的点击事件与计算机产生交互。若是你作过.net 的winform,wpf或者java的gui等开发,相信这样的操做你作过无数遍了,并且这样的操做也是很是方便的,借助vs这样强大的ide,很容易建立窗体,添加按钮,并给按钮添加点击事件,最后监听该事件,当该事件触发时候,回调事件处理函数,执行相应的操做。在现代的窗体应用程序开发中,你常常能看到event(事件)这样的东西,而看不到消息的处理,由于面向对象的语言对消息处理进行了封装,使得更方便的开发。那么go语言是否也能这样呢?答案是确定的。可是,今天咱们不作这样的事情,咱们仍是使用传统的处理消息的方式,来进行点击消息的处理,至于封装成相似c#中winform这样的,这个之后再玩。扯了那么一堆,无非就是想说,其实虽然各类新技术,新语言的不断出现,其实归根到底其本质仍是没什么大的变化,至少目前是这样,无非就是对不方便的操做进行封装或者经过各种算法和数据机构获得更优的解决方案。那么就开始今天的按钮点击消息处理吧。java
当你给一个窗体添加了一个按钮后,按钮也就成了窗体的一个子窗体,当咱们点击按钮的时候,按钮就产生了相应的消息,可是,咱们以前就知道,父窗体取出消息队列中的各类消息,而后把消息传到消息处理函数中处理,那么子窗体的消息是否也能拿到呢?事实上是能够的。当按钮被点击后,子窗体就向父窗体发送了一个WM_COMMAND消息,因此咱们须要在消息处理函数中添加WM_COMMAND类型消息的分支,最终的消息处理函数以下:算法
注意看,WM_COMMAND分支中,有一个if条件,它比较的是消息处理函数中参数wParam的低位与指定子窗体的id号是否相等。其实,wParam的低位就是产生消息的子窗体的id号,因此经过它即可以知道具体是那个子窗体产生的消息了。这里,产生消息后,弹出一个第一篇中就讲过的弹出消息窗口。c#
1.LOWORD(wParam) ==> 子窗体IDide
2.HIWORD(wParam) ==> 通知码函数
3.lParam ==> 子窗体句柄ui
那么这个子窗体id为何和1比较?请看WM_CREATE中,addButton函数的最后一个参数就是1,由于咱们建立了一个id为1的button。除了经过子窗体id来判断是哪一个子窗体产生的消息外,咱们也能够经过窗口句柄进行判断,如WM_COMMAND中注释所示。addButton函数以下:spa
上一篇已经讲过如何建立子窗体,因此这里就不讲了,关键是最后一个id参数,是本篇新加的子窗体id参数。.net
今天就到此,下次再继续~orm