在Winform中 处理Windows消息通过重写WndProc方法

在WPF中 使用的是System.Windows. Sytem.Windows.Controls等名字空间,没有WndProc函数

WPF中处理消息首先要获取窗口句柄,创建HwndSource对象 通过HwndSource对象添加消息处理回调函数。

此外 WPF中没有Handle属性,不能直接获得窗口的句柄

可以在构造函数中指定消息进行消息处理的回调函数,也可以在资源初始化后指定,在很多地方都可以指定。

以下是在资源初始化后指定

protected override void OnSourceInitialized(EventArgs e)
        {
            base.OnSourceInitialized(e);
            HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
            if (hwndSource != null)
                hwndSource.AddHook(new HwndSourceHook(this.WndProc));
        }

注意要使用System.Windows.Interop名字空间,以上增加了一个回调委托

protected virtual IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    switch (msg)
    {
        case Win32.WM_NCHITTEST:
            {
                Point MouseScreenPoint = new Point(lParam.ToInt32() & 0xFFFF, lParam.ToInt32() >> 16);
                Point MouseWindowPoint = this.PointFromScreen(MouseScreenPoint);
                if (MouseWindowPoint.X < 10 && MouseWindowPoint.Y < 10)
                {
                    handled = true;
                    return (IntPtr)Win32.HTTOPLEFT;
                }
                
                break;
            }
    }
    return IntPtr.Zero;
}

这里有一个引用传递的参数handled ,处理消息后设置为true 告诉系统这个消息已经处理过了。

转载于:https://www.cnblogs.com/mschen/p/4312707.html

在WPF中处理Windows消息相关推荐

  1. 关于WPF 中 “System.Windows.Markup.XamlParseException”类型的未经处理的异常在 PresentationFramework.dll 中发生 异常的处理。

    关于WPF 中 "System.Windows.Markup.XamlParseException"类型的未经处理的异常在 PresentationFramework.dll 中发 ...

  2. c# WPF中System.Windows.Interactivity的使用

    背景 在我们进行WPF开发应用程序的时候不可避免的要使用到事件,很多时候没有严格按照MVVM模式进行开发的时候习惯直接在xaml中定义事件,然后再在对应的.cs文件中直接写事件的处理过程,这种处理方式 ...

  3. WPF中System.Windows.Interactivity的使用

    背景 在我们进行WPF开发应用程序的时候不可避免的要使用到事件,很多时候没有严格按照MVVM模式进行开发的时候习惯直接在xaml中定义事件,然后再在对应的.cs文件中直接写事件的处理过程,这种处理方式 ...

  4. 正确在WPF中对Windows窗体背景进行设置

    初次接触WPF,就被对窗体的背景图进行设置难住了.跟Winform区别很大, 如果没有正确设置的,会报错. 直接输入添加背景图片代码会弹出异常. <Window.Background> & ...

  5. WPF中使用Windows.Controls.Ribbon创建一个简单画板

    Windows系统自带的画图工具很完善的,如下代码只是演示创建一个简易的画板,可以做教学使用. 整体效果如下: 1. 添加组件System.Windows.Controls.Ribbon 2. 界面设 ...

  6. wince 中Windows消息的十六进制表述

    windows mobile编程,无论使用eVC还是.net CF,都脱不开windows消息机制这个框架.在日常的程序编写过程中,windows消息也是很常用的,windows消息常用的api函数也 ...

  7. 计算机十六进制4BH表示多大,【转】windows消息16进制对应表

    windows mobile编程,无论使用eVC还是.net CF,都脱不开windows消息机制这个框架.在日常的程序编写过程中,windows消息也是很常用的,windows消息常用的api函数也 ...

  8. 理解Windows窗体和WPF中的跨线程调用

    你曾开发过Windows窗体程序,可能会注意到有时事件处理程序将抛出InvalidOperationException异常,信息为" 跨线程调用非法:在非创建控件的线程上访问该控件" ...

  9. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

    原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...

最新文章

  1. 数据结构——线性表:顺序表、单向链表、循环链表、双向链表
  2. C语言运行界面字体,C语言实现图形界面登陆窗口.docx
  3. C语言怎么确定用什么整形,【求助各位大虾!】 怎样用 if 语句验证一个整形数字。...
  4. php 5.6.29,源码编译安装PHP 5.6.29
  5. 【在线研讨】《敏捷开发用户故事分类与组织结构(三期-1)》
  6. 51单片机4位数乘法C语言,51单片机实现4位数以内的加减法
  7. python函数和模块有什么关键特性_【Python函数与模块】(2)函数的特点
  8. npm login 登录失败,报E500 Internal Server Error - PUT https://registry.npm.taobao.org/-/user/org.couchdb
  9. C#对称加密(3des)和非对称加密(rsa)算法
  10. ubuntu16 下安装freeswitch 1.8.3
  11. pythonmt4通讯swot矩阵_SWOT矩阵分析法
  12. 一篇文章看懂Oracle开窗函数
  13. 关于《上海市城镇生育保险办法》的问答
  14. Python概念-Attr系列(林海峰教的)
  15. factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class ..
  16. 赵燕菁:城市化2.0与规划转型 ——一个两阶段模型的解释│宏论
  17. OV7725摄像头显示VGA/LCD
  18. Android实现九宫格图片控件
  19. jasper report 子报表中嵌套子报表
  20. android WebView加载视频只有声音没有画面

热门文章

  1. 聚类树状图_聚集聚类和树状图-解释
  2. 霍金一生重要时刻照片合集,3次来中国,年轻时也是帅哥一枚
  3. 2018年对PHP的新认知
  4. 理解 Keystone 核心概念 - 每天5分钟玩转 OpenStack(18)
  5. priority case语句
  6. python frame如何置顶_Python tkinter frame父窗口小部件排列列
  7. MySQL社区介绍_mysql社区服务器
  8. body onload 控制窗口大小 html,HTML5 对各个标签的定义与规定:body的介绍
  9. Tensorflow 指令加速
  10. ViewPager + TabLayout + Fragment + MediaPlayer的使用