windows程序设计基础(第四章)——431发送消息函数

网络游戏
kkatlas.com

鼠标与键盘消息已经学过,但之前学到的消息是如何捕获,接下来讲解的内容是如何去产生一个消息。自行传递消息的方法有两种:SendMessage与PostMessage。

SendMessage函数功能是,将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用过程处理程序,直到过程处理函数处理完消息再返回。其函数原型如下:

这场针对退役军人的招聘会规格不低。其中,国企及事业单位占到35%,优质民营企业占到65%。比如说北京大学首钢医院、北京汽车国际发展有限公司、北京城建置业有限公司等,都是平时很受求职者追捧的单位。

程序中使用GetParent函数,实现获得窗口父句柄。这个函数有一个参数,即为当前子窗口的句柄,如果当前窗口已经为顶层窗口,则返回值为NULL。

2019年北京市退役军人专场招聘会现场。 本报记者 阎彤摄

其次,在弹出的Spy++工具界面中,在工具栏点击【】按钮,则弹出“Window Search”窗口,如图4.6所示;

千余年前,长沙瓷器扬帆远航,成为古代丝绸之路上见证东西方文化交流的文化使者。现今,享有“东亚文化之都”美誉的长沙正以文化“软实力”吸引着世界各地的外国友人。

加拿大维多利亚人马丁系陈氏太极拳十三代传人和湖南省武术协会国际形象代言人。受访者供图

“长沙不仅文化底蕴深厚,还有世界各国的文化在这里互通互融。我对这个城市产生了浓厚兴趣,也因此爱上了中国。”露丝告诉记者,长沙雨花非遗馆内还有一个“走进非洲”文化馆,集非洲文化知识普及、非洲特色物件和技艺展示等于一体,两国艺术家、手工匠人经常会同场“晒艺”。

长沙雨花非遗馆是中国聚集非遗项目数量最多、非遗传人最集中的场馆之一,汇聚了344个各级非遗项目、1000余种工艺品和200余位非遗传承人。每个星期日,外教露丝都要来这里拜师学艺。

来自加拿大维多利亚的马丁2007年就定居长沙,见证了上述文化盛事。现是湖南中医药大学在读研究生的他,也是陈氏太极拳十三代传人和湖南省武术协会国际形象代言人。

参数Msg,指定被发送的消息,鼠标及键盘消息均可;

6年前,孟加拉国人易蓝来到长沙,从湖南大学工商管理专业毕业后,成为湖南—非洲企业合作中心的一名招商经理。中文流利的易蓝称自己是长沙“老口子”,在长沙城出行从不用导航,梅溪湖国际艺术中心、长沙非遗馆、李自健美术馆等文化场所都有他的足迹。

本报讯(记者 代丽丽)昨天和今天,本市举办“2019年北京市退役军人专场招聘会”,230家招聘单位为退役军人提供了3500余个就业岗位。

PostMessage函数功能是,将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。其函数原型如下:

参数wParam,根据消息的不同,指定附加不同的消息信息,如果为鼠标消息存放标志,如果为键盘消息,则存放虚拟键值;

参数lParam,根据消息的不同,指定附加不同的消息信息,如果为鼠标消息存放当前光标的X、Y值,如果为键盘消息,则存放键盘扫描码等信息;

“长沙不仅重视传统文化传承,也很有创新精神,比如酒吧里保留了老长沙的歌厅文化还融合国外的文化,有很多种消费选择。”贾思德说,长沙的文化已熔铸在城市发展历程中,在这里生活充满幸福感。

孟加拉国人易蓝(左)是湖南-非洲企业合作中心的一名招商经理。唐小晴 摄

参数hWnd,其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,其中包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口;

湖南中医药大学的伊拉克留学生贾思德。受访者供图

在图中不难看出,实现这个功能,需要有一个记事本做为控制对象。程序中定义了两个句柄类型的变量hChildWnd与hWinWnd,分别用于存放记事本子窗口与父窗口的句柄。应该记得前面提到的句柄的概念,句柄是一个4个字节的整数,用于存放唯一标识窗口的ID。

首先,在点击VC6.0的【Tools】目录中的【Spy++】选项,如图4.2所示;

就读于湖南中医药大学的伊拉克留学生贾思德是长沙的“拥趸”。这位有24万粉丝的“网红”喜欢读中国古诗词,痴迷品茶,经常拍摄短视频和通过直播介绍长沙民俗和文化。在长沙求学两年,他不仅常去岳麓书院、简牍博物馆和湖南省博物馆等文化地标,还热衷长沙酒吧文化。

捕获键盘的按下消息(WM_KEYDOWN)、抬起消息(WM_KEYUP)。虽然只捕获按下消息此功能也能实现,但这不符合规则,键盘的一次按键会产生按下与抬起两个消息。在发送键盘内容时,只能使用PostMessage函数才能实现(SendMessage函数不好用)。这里使用句柄是记事本的子窗口,即输入的客户区部分的句柄。不得不再介绍一下SendMessage与PostMessage函数。它们都是发送消息的函数,当鼠标右键按下之后,PostMessage函数将窗口销毁消息发送到记事本消息队列中,当记事本使用GetMessage函数获得到WM_DESTROY时,记事本将执行销毁操作;SendMessage函数将窗口销毁消息发送到记事本的回调函数中,记事本直接执行销毁操作。在键盘按下与抬起消息中,之所以不能使用SendMessage函数,是因为要发送的内容是记事本的客户区域窗口,而不是整个窗口。同样可以判断出,记事本的客户区域窗口,本身没有过程处理函数单独为它服务,而它的控制是使用记事本本身的过程处理函数进行的处理。

最后,在“Window Search”窗口中的“Handle”处,拷贝句柄(当前句柄为003B05A4)到程序中。此处的句柄为十六进程,所以在程序赋值时,需要在前面加入“0x”。十六进制值直接赋值给HWND类型,是不允许的,所以需要进行强制类型转换(强制类型转换代码:(HWND)0x003B05A4)。

近年来,随着对外开放的提速,长沙在文化创意领域表现亮眼:“电视湘军”“出版湘军”“动漫湘军”“娱乐湘军”异军突起;举办中国(长沙)国际雕塑文化艺术节、梅溪湖国际文化艺术周和长沙媒体艺术节暨“一带一路”青年创意与遗产论坛等活动。

记者在现场看到,前来应聘的军转干部大多数在40岁以上,有着丰富的工作经验和人生阅历。很多人在部队里从事的党建、行政、安全保密、军民融合、后勤管理类专业技术岗位,具有丰富的工作经验。这些经验可以和社会上的工作岗位完美衔接。还有一些军转干部已经转业多年,或在单位担任重要岗位,或自主创业,已经做得风生水起,这次来招聘会,是想谋求更加广阔的发展平台。

招聘单位对军转干部有很高的热情。几家企业的招聘代表都表示,军转干部都经受过长期的部队生活的锤炼,具有优良的作风和严明的纪律,思想素质高,部分军转干部具有中、高级专业技术职称,且有多年部队管理经验,是宝贵的人才资源,因此他们对这类人才非常欢迎。

爱上辣椒炒肉、习惯吃带骨鸡肉,入乡随俗的马丁还与一位长沙姑娘组建了幸福家庭,育有两个可爱女儿。“每周看一场演出或听一次音乐会,再到文化经典逛逛,配上香辣的长沙美食,在这里生活非常放松、开心。”马丁正在申请中国绿卡。

函数返回值,指定消息处理的结果,依赖于所发送的消息。SendMessage函数实际上调用了过程处理函数,所以返回值就是过程处理函数的返回结果。

程序中子窗口句柄,直接进行的赋值操作,那“0x003B05A4”从何而来呢?如果VC6.0安装较为完整,那么,就可以使用VC6.0提供的Spy++工具来获得应用程序(记事本)的句柄,具体操作过程如下所示:

凭借打造自身文化符号,长沙这个活力迸发的内陆城市2017年成为中国首个获评世界“媒体艺术之都”称号的城市。2018年,长沙文化产业增加值逼近千亿元人民币,文化产业位居中国中部省会城市第一。

“长沙这几年出现了很多新型文化业态,这些都是外国人非常感兴趣的,让我们真实感受到中国文化的传承和创新。”易蓝说,越来越多的艺术机构、场所落户长沙,长沙正用文化和艺术魅力吸引世界目光。(完)

SendMessage和PostMessage函数非常有意思,通过这两个函数,可以对任务程序做任何控制。【例4-3】实现两个很有意思的功能:(1) 点击鼠标右键时,记事本窗口自动关闭;(2) 在“MyWin”窗口输入内容时,会在记事本中显示。

再次,鼠标移动到“Finder Tool”后面的处,按下鼠标左键(要记住是按住不放),移动光标到记事本的客户区,当记事本客户区周围出现黑色边框,说明捕获成功,此时放开鼠标左键,如图4.3所示;

程序执行效果,如图4.1所示。

需要注意的是,句柄是唯一标识窗口的,所以你所获得的句柄值不可能与实例相同。即使是同样是记事本,关闭后再次打开,句柄也将发生变化。

PostMessage函数的参数与SendMessage函数的参数含义相同,唯一不同的是函数返回值,PostMessage函数如果调用成功,返回非零值;如果函数调用失败,返回值为零。PostMessage函数只是将一个消息,不经过任何处理,放入到窗口的消息队列中。

虽然在界面中体现不出具体的操作过程,但可以通过代码进行详细地分析。这个程序一定要自己动手做一遍,它会激发无限的想像空间,代码如下所示:

Related Post