惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Blog — PlanetScale
Blog — PlanetScale
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Jina AI
Jina AI
雷峰网
雷峰网
T
Tailwind CSS Blog
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
博客园 - 司徒正美
I
InfoQ
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
小众软件
小众软件
U
Unit 42
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net

博客园 - Findekano

C#异步调用的bug? 恩,VS调试时候的监视也不能够尽信啊 最近正在看的几本书 VS.NET2005使用体验(二) 将应用程序直接加入到"Run..."中打开的小工具 VS.NET2005使用体验(一) OpenGL & MFC 相关联接 .::Findekano's Tidbet:: .::Findekano's Tidbet:: .::Findekano's Tidbet:: .:: Findekano's Tidbet :: CorelDraw's Application Recovery Manager.. .:: Findekano's Tidbet :: C#&.NET Framework中的Beep .:: Findekano's Tidbet :: [C# FAQ]C#代码中如何启动另一个应用程序或批处理程序? 今天开始,努力攒钱... 又闻到味道 如何保持代码格式?
[C# FAQ]通过Windows Forms预处理Win32消息
Findekano · 2004-11-08 · via 博客园 - Findekano

Tip from Andrew Troelsen | Posted by: Duncan Mackenzie, MSDN | Translated by Findekano
说明:文章源自C# FAQ,翻译此文仅为个人爱好,如有错误敬请指点


在非托管世界,截取Win32消息进行处理得情况非常常见,Win32消息被用户应用程序截取就如同在消息队列中被弹出一般。然而在托管WIndows Form应用程序中很少碰到这种情况。Anyway,你可以通过如下步骤来截取并处理Windows消息。
首先,建立一个实现IMessageFilter接口的辅助类,可以通过它唯一的方法PreFilterMessage()来得到原始的WPARAM 和LPARAM 数据,即实际的message ID。下面是一个简单示例:

public class MyMessageFilter : IMessageFilter 
{
  
public bool PreFilterMessage(ref Message m) 
  
{
    
// Intercept the left mouse button down message.
    if (m.Msg == 513
    
{
      MessageBox.Show(
"WM_LBUTTONDOWN is: " + m.Msg);
      
return true;
    }

    
return false;
  }

}


在主程序中用Application类型注册该辅助类:

public class mainForm : System.Windows.Forms.Form
{
  
private MyMessageFilter msgFliter = new MyMessageFilter();

  
public mainForm()
  
{
    
// Register message filter.
    Application.AddMessageFilter(msgFliter);        
  }


}


此时,消息在送往注册的event处理器之前将被你定制的Message Filter预先处理。可以通过Application.RemoveMessageFilter() 来删除原来注册的Message Filter。