windows程序设计知识点

本文介绍了Windows程序设计中的关键概念,包括调用约定如WINAPI和CALLBACK,窗口分类与消息处理机制,消息循环的工作原理,以及绘图、滚动条、按键、鼠标、菜单和对话框的消息处理。此外,还讲解了设备描述表句柄的获取和GDI函数的使用,以及句柄管理和文本操作等。
摘要由CSDN通过智能技术生成

 

.WINAPI解析

           #define WINAPI   __stdcall

    该语句指定了一个调用约定,包括如何生成机器代码以在堆栈中放置函数调用的参数,许多windows函数调用声明为WINAPI

 

          注意:#define CALLBACK  __stdcall

               CALLBACK也定义成__stdcall,但CALLBACK常用于回调函数,比如说窗口过程

 

例如:

     LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lParam)

      {

                           ........................

                          ..........................

                    }

 

具体用WINAPI还是CALLBACK更加具体情况,方便记忆原则,比如说callback,看名次就知道是回调函数,使用WINAPI就没那么明显了

 

二.消息与窗口

          1.窗口分类:

               桌面上最明显的窗口就是应用程序窗口。这些窗口含有显示程序名称的标题列、菜单甚至可能还有工具列和滚动条。

               另一类窗口是对话框,它可以有标题列也可以没有标题列。

              装饰对话框表面的还有各式各样的按键、单选按钮、复选框、清单方块、滚动条和文字输入区域。其中每一个小的视觉对象都是一个窗口。更确切地说,这些都称为「子窗口」或「控件窗口」或「子窗口控件」。

 

           2.windows给程序发送消息

                当窗口发生改变时,比如调整了窗口的大小,窗口文本改变等,windows感应这一消息,把这个消息发送给到程序的消息队列中(该消息对列用来存放该程序可能创建的各种不同窗口的消息),应用程序从消息队列中取出这条消息,然后经过转换,重新发给windows系统,系统调用相应的一个窗口过程(父窗口调用父窗口窗口过程,子窗口调用子窗口处理过程),对消息进行处理。

                窗口通常是在窗口类的基础上建立的。窗口类标识了处理窗口消息的窗口过程。使用窗口类使多个窗口能够属于同一个窗口类,并使用同一个窗口过程。例如,所有Windows程序中的所有按钮均依据同一个窗口类。这个窗口类与一个处理所有按钮消息的窗口过程(位于Windows的动态链接库中)联结。在创建这些按钮的时候,都需要指定他们的父窗口(createwindow函数中有一个父窗口句柄参数,需要设置)

 

               注意:

                     有些消息是不会进入对列的

                     例如:

                          sendmessage()函数直接调用相应的窗口过程(windows不会感应)

                          updatewindow()函数会产生WM_PAINT消息,windows进行感应这消息后,也不进入队

                                        直接调用相应的窗口过程,对wm_paint消息进行处理,其它产生wm_

                                                                                                                        paint消息,则需要入队

                                                                                iddialogmessage()函数仍然会进入队列,但程序取出消息后,进行判断,若是指定的消息,则立即调用窗口过程,对消息进行

                                        处理,不需要经过转换和分发阶段

                           translateaccelerator()函数仍然会进入队列,但程序取出消息后,进行判断,若是WM_KEYDOWN货WM_SYSDEYDOWN消息,则把这消息转换为WM_COMMAND消息,然后立即调用窗口过程,对消息进行处理,不需要经过转换和分发阶段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值