大佬教程收集整理的这篇文章主要介绍了windows消息处理机制,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。
消息内容包括:
hwnd
32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。
message
用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。
wParam
通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam
通常是一个指向内存中数据的指针。
由于WParam、lParam和Pointer都是32位的,即等同于DWORD。因此,它们之间可以相互转换。
对于WinForm和WPF应用,以检测U盘插拔为例,记录windows消息接收处理:
public const int WM_DEVICECHANGE = @H_301_29@0x219; //U盘插入后,OS的底层会自动检测到,然后向应用程序发送“硬件设备状态改变“的消息 public const int DBT_DEVICEARRIVAL = @H_301_29@0x8000; //U盘插入 public const int DBT_DEVICEREMOVECOMPLETE = @H_301_29@0x8004; //U盘卸载
Winform:
protected override void WndProc(ref message m) { if (m.Msg == WM_DEVICECHANGE) { switch (m.WParam.ToInt32()) { case DBT_DEVICEARRIVAL://U盘插入 // break; case DBT_DEVICEREMOVECOMPLETE: //U盘卸载 // break; default: break; } } base.WndProc(ref m); }
WPF窗体中未实现WndProc函数,需要Hwnd@R_944_9016@e对象添加消息处理回调函数。
private void MainWindow_Loaded(object sender,RoutedEventArgs E) { Hwnd@R_944_9016@e hwnd@R_944_9016@e = Presentation@R_944_9016@e.FromVisual(this) as Hwnd@R_944_9016@e; if (hwnd@R_944_9016@e != null) { hwnd@R_944_9016@e.AddHook(new Hwnd@R_944_9016@eHook(WndProC)); } } private IntPtr WndProc(IntPtr hwnd,int msg,IntPtr wParam,IntPtr lParam,ref bool handled) { if (msg == WM_DEVICECHANGE) { switch (wParam.ToInt32()) { case DBT_DEVICEARRIVAL://U盘插入 // break; case DBT_DEVICEREMOVECOMPLETE: //U盘卸载 // break; default: break; } } return IntPtr.Zero; }
通过类似写法,使用WPF或WinForm处理其他消息。
消息机制参考:http://www.cppblog.com/suiaiguo/archive/2009/07/18/90412.html
消息大全参考:https://blog.csdn.net/nupt123456789/article/details/7370562
以上是大佬教程为你收集整理的windows消息处理机制全部内容,希望文章能够帮你解决windows消息处理机制所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。