Windows入门基础(2)(消息回调函数)

本文介绍了Windows应用程序中窗口消息的处理流程,包括用户交互、消息队列、GetMessage、TranslateMessage和DispatchMessage函数的使用。重点讨论了窗口创建(WM_CREATE)、销毁(WM_DESTROY)、菜单(WM_COMMAND)消息以及如何处理定时器和鼠标事件。此外,还提到了控制台消息和利用SetTimer函数设置定时器的方法。
摘要由CSDN通过智能技术生成

书接上回:

          我们在简单的创建一个窗口后,需要对窗口进行交互。然后我们在消息处理函数进行处理。例如,(窗口刚创建时的状态,绘图函数消息,窗口销毁时的消息,窗口的顶层菜单......)。然后,我们进入正文:

目录

1.接受消息

          1.1整体接收消息流程

2.各种消息信息

        2.1 窗口创建消息(WM_CREATE)​编辑

        2.2窗口毁坏消息(WM_DESTROY)​编辑

        2.3窗口菜单消息(WM_COMMAND)​编辑

        2.4控制台消息

        2.5定时器消息

        2.6 鼠标消息

 3.总结


1.接受消息

          1.1整体接收消息流程

                           (1) 用户/系统触发某个交互功能                              //触发事件

                           (2)MSG结构体存储消息信息(MSG msg)           //消息储存 

                    

                            HWND :  窗口句柄                                 

                            message: 在windows中消息常用数值来记录,但由于数值不好记录,所以常记                                                  录为后宏定义

                            wparam 和  lparam     同为对信息的进一步描述

                            time   为消息创建的时间

                            pt  为point 类型 为记录消息创建时鼠标的坐标位置

                           (3)消息进入到消息队列中等待                                //消息队列                   

                              (4)  

                                    

                               GetMessage()用于接收消息

                                TranslateMessage()用于翻译消息

                                 DispatchMessage()用于分发消息,将加工后的消息传给操作系统

                           (5)最后,系统调用窗口信息处理函数

2.各种消息信息

              2.1 窗口创建消息(WM_CREATE)

当窗口创建时,系统发送一个创建消息,弹出窗口,然后创造出窗口。

             2.2窗口毁坏消息(WM_DESTROY)

当系统发送销毁窗口的消息时,系统调用销毁消息来结束窗口。(注:窗口的毁坏不代表进程的结束,我们需要确保其不再接收消息,才能结束进程。PostQuitMessage 函数将WM_QUIT消息发布到线程的消息队列,并立即返回;该函数只是向系统指示线程在将来某个时间请求退出。)

             2.3窗口菜单消息(WM_COMMAND)

此消息的作用是为窗口提供菜单项。例如:此为vs2019的菜单项

            2.4控制台消息

           如何在窗口应用程序中调用工作台呢?

    

handle  变量是为了接受GetStdHandle创建的控制台

在此我在前面设置了鼠标的双击消息,然后双击鼠标会在控制台中输出消息和双击时鼠标的位置

       2.5定时器消息

       在说定时器消息之前,首先对轮询和中断进行了解

                 轮询:CPU通过不断访问各种设备的状态,当设备到达就绪状态时,向该设备发送消息。然后返回,等待一段时间后,进行下一次发访问。

                 中断:程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预先安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为响应的服务程序去处理。

        然后我们来看定时器消息

   

SetTimer()第一个参数为调用窗口的句柄,第二个参数为定时器的标识,第三个参数为定时器调用间隔的秒数,第四个参数为null 就是轮询调用

 wparam 和 lparam 在不同的消息中代表的意义不同 ,在这里 wparam 代表 定时器的标识 ,lparam 代表的是定时器中断函数指针 

WriteConsoleA()函数的意义为将内容写到控制台上

          2.6 鼠标消息

           鼠标消息有很多

  1. WM_LBUTTONDOWN    鼠标左键按下
  2. WM_LBUTTONUP          鼠标左键抬起
  3. WM_RBUTTONDOWN   鼠标右键按下
  4. WM_RBUTTONUP         鼠标右键抬起
  5. WM_MOUSEMOVE        鼠标移动消息 
  6. ......

当然还有鼠标中键消息等等 ,基本原理差不多,所以在这里我就单说一个鼠标移动消息(WM_MOUSEMOVE)其中,wParam:表示鼠标移动时某些键是否被按下;lParam:鼠标实时的位置。LOWORD(lparam)表示X坐标,HIWORD(lparam)表示Y坐标   。

 3.总结

在这里我只列举了常用的一些消息,其中, 菜单消息 和  绘图消息 在后面单开一篇。到此,此篇文章结束,本文记录本人学习的经历,如果那里有问题,欢迎各位指出。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值