ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:47.50KB ,
资源ID:3172939      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3172939.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(windows消息浅析.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

windows消息浅析.doc

1、在 PB 中使用 Windows 消息(一)Wm_syscommand 参数使用消息,就是指 Windows 发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使 Windows 发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做 TMsg。它在 Windows 单元中是这样声明的: hwnd: HWND; / /窗口句柄message: UINT; / /消息常量标识符wParam: WPARAM ; / 3

2、2 位消息的特定附加信息lParam: LPARAM ; / 32 位消息的特定附加信息time: DWORD; / /消息创建时的时间pt: TPoint; / /消息创建时的鼠标位置hwnd 32 位的窗口句柄。窗口可以是任何类型的屏幕对象,因为 Win32 能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是 Windows 单元中预定义的常量,也可以是自定义的常量。wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。lParam 通常是一个指向内存中数据的指针。由于 W P a r a m、l P a

3、r a m 和 P o i n t e r 都是 3 2 位的,因此,它们之间可以相互转换。对于我们使用来说,在众多的消息当中,WM_SYSCOMMAND,使用率是最高的,对於WM_SYSCOMMAND,功能表 ID 指示系统功能表中的哪一项被选中,所参数对应值如下:MF_BYCOMMAND = &H0&MF_BYPOSITION = &H400&SC_ARRANGE = &HF110SC_CLOSE = &HF060SC_HOTKEY = &HF150SC_HSCROLL = &HF080SC_KEYMENU = &HF100SC_MAXIMIZE = &HF030SC_MINIMIZE =

4、 &HF020SC_MOVE = &HF012 或 F010SC_NEXTWINDOW = &HF040SC_PREVWINDOW = &HF050SC_RESTORE = &HF120SC_SIZE = &HF000SC_VSCROLL = &HF070SC_TASKLIST = &HF130SC_SCREENSAVE = &HF140下面,介绍一下SC_COLSE、SC_MAXIMIZE、SC_MINIMIZE、SC_MOVE、SC_RESTORE、SC_SIZE、SC_HOTKEY这几个常用参数在 PB 中的应用:1、SC_CLOSE:61536 执行关闭功能。常用点:屏蔽掉关闭功能,使

5、窗口系统的“X”变成灰色,并且不可用。实现方法:FUNCTION ulong GetSystemMenu(ulong hwnd,ulong bRevert) LIBRARY “user32.dll“ FUNCTION ulong DeleteMenu(ulong hMenu,ulong nPosition,ulong wFlags) LIBRARY “user32.dll“ FUNCTION ulong GetMenuItemCount(ulong hMenu) LIBRARY “user32.dll“ 窗体 Open 中/ 按命令Long MF_BYCOMMAND = 0Long ll_hw

6、ndMenu ll_hwndMenu = GetSystemMenu(handle(this), 0) /得到系统菜单句柄DeleteMenu(ll_hwndMenu, SC_CLOSE, MF_BYCOMMAND) /屏蔽掉关闭功能/也可使用按位置屏蔽,即单击窗口左上脚弹出系统菜单上的位置long MF_BYPOSITION =1024 Long ll_hwndMenu Long value Integer ill_hwndMenu = GetSystemMenu(handle(this), 0) i = GetMenuItemCount(ll_hwndMenu) DeleteMenu (l

7、l_hwndMenu, c - 1, MF_BYPOSITION)有时候,屏蔽掉关闭功能一段时间后,还需要把此功能找回来,那么可以这样实现:Function Ulong AppendMenu(Ulong hMenu ,Ulong wFlags ,Ulong wIDNewItem ,Ref String lpNewItem ) Library “User32“ Alias For “AppendMenuA“Function Ulong GetMenuString(Ulong hMenu ,Ulong wIDItem , Ref String lpString,Ulong nMaxCount,Ul

8、ong wFlag ) Library “User32“ Alias For “GetMenuStringA“按钮 Cb_back click 事件中:Long ll_hwndMenuLong WM_NCLBUTTONDOWN = 161Long HTCAPTION = 2 String ls_closeLl_hwndMenu = GetSystemMenu(handle(Parent), 0) ls_str = “我要关闭“AppendMenu(hwndMenu, 0, 61536, ls_close) /添加关闭功能/* 此处需注意,上步操作虽然成功的添加了关闭功能,但加回去之後“X“仍是

9、暗灰色,要等到我们做了某些固定的动作之後如单击下状态栏,它才会再度变 Enable 的颜色,所以,模拟一个单击状态栏的操作,使得“X“出现 Enable 的颜色。 Ps:此时,单击窗口左上脚弹出系统菜单,你会发现,原来的“关闭”字样变成了“我要关闭”*/Send(handle(Parent), WM_NCLBUTTONDOWN, HTCAPTION,0)引申:SC_MAXIMIZE、SC_MINIMIZE、SC_MOVE、SC_RESTORE、SC_SIZE 这个功能参数也可同样适用。如:下面的语句能实现屏蔽掉拖拽窗口移动功能DeleteMenu(ll_hwndMenu, SC_MOVE, M

10、F_BYCOMMAND)下面的语句屏蔽掉 size 窗口大小的功能,此时拉动窗口边框不能改变大小,但仍支持Max 和 MinDeleteMenu(ll_hwndMenu, SC_SIZE, MF_BYCOMMAND)2、SC_MOVE 61456、61458(分为客户区和非客户区,非客户区= 客户区 + HTCAPTION HTCAPTION = 2)窗口移动常用点:屏蔽窗口拖动和拖动非状态栏移动窗口实现方法:屏蔽窗口拖动 / 可使用上面禁止关闭功能的办法禁止拖动,也可使用下面的办法:窗口 other 事件中:/* 注意,要把客户区和非客户区的两种移动方法全部屏蔽才能彻底屏蔽,如果单屏蔽掉非客

11、户区 61458,那在窗口系统菜单中仍可移动窗口 */If wparam = 61456 or wparam = 61458 Then Message.Processed = TrueMessage.ReturnValue=0End If引申:也可以使用同样的办法来屏蔽掉带有 titlebar 的 dw 的拖动拖动非状态栏移动窗口比如拖动一图片拖动所在窗口,图片控件上自定义事件,ue_drag,ID:pbm_lbuttondownLong WM_SYSCOMMAND = 274 Long SC_MOVE = 61458 / or = 61456Send ( Handle( parent ),

12、WM_SYSCOMMAND, SC_MOVE, 0 )引申:通过更换 sc_move 可实现其他系统功能相关的操作。如下面语句实现指定数据窗口的最大化:Send(Handle(dw_1), WM_SYSCOMMAND, SC_MAXIMIZE, 0)下面语句实现指定数据窗口的最小化:Send(Handle(dw_1), WM_SYSCOMMAND, SC_MINIMIZE, 0)下面语句恢复指定数据窗口的默认大小 Send(Handle(dw_1), WM_SYSCOMMAND, SC_RESTORE, 0)3、SC_HOTKEY 61776 系统热键常用点:为系统注册些热键值,方便操作下例中

13、为窗口注册热键 Ctrl + Alt + X,实现窗口在最小化时,还原窗口大小实现方法:function long SendMessageA(long lhWnd,uint uiMsg,long lwMsg,long lwParam) library user32.dllPublic:Constant Long WM_SETHOTKEY = 50 Constant Long HK_MYHOTKEY = 1624 /热键参数值 Ctrl + Alt + XConstant Long SC_HOTKEY = 61776Constant Long WM_SYSCOMMAND = 274 Consta

14、nt Long SC_RESTORE = 61728/ Open 事件中long ll_rtnll_rtn = SendMessageA(Handle(this), WM_SETHOTKEY, HK_MYHOTKEY, 0)If ll_rtn 1 Thenmessagebox(“注册失败“,“注册热键失败,无法使用热键服务“)End If/ Other 事件中IF wparam = SC-HOTKEY THENSend(Handle(This), WM_SYSCOMMAND, SC_RESTORE, 0)END IF备注:想注册热键键值的获得办法:高 8 位字节与低 8 位字节组成 16 位字节,然后将它换算成十进制数,即得到所需的HK-MYHOTKEY 值。高 8 位字节值为一些辅助键(Control、Alt、Shift 等),低 8 位字节为使用键的 ASCII 码。如果我们要使用 CtrlAltA 作为热键,则 A=65,转换成十六进制为 41,CtrlAlt=24=6,转换成十六进制仍然是 6,两则组合即为 641,再重新转换回十进制得到 1601。至此本文结束后记:我也是最近才对 windows 系统消息产生的兴趣,正在一点一点的学习,随后把使用后的心得写出来与大家分享,之后,将继续与大家探讨学习。

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。