c# - 捕获鼠标触摸win窗体的标题栏

标签 c# winforms wndproc

我有一些技巧来捕获鼠标触摸标题栏,但是当我将鼠标放在标题栏上时,例程会反复触发。这是常规

protected override void WndProc(ref Message m)
{
            if (m.Msg == 0xA0) // WM_NCMOUSEMOVE
            {
        listBox1.Items.Add("mouse move on title bar");
            }
            else if (m.Msg == 0x2A2) // WM_NCMOUSELEAVE
            {
        listBox1.Items.Add("mouse leave from title bar");            
            }

            base.WndProc(ref m);
}

任何人都可以告诉我任何技巧吗 WndProc 当鼠标触摸标题栏时只触发一次而不是重复触发。谢谢

最佳答案

你在找这个吗?我正在使用标志控制向列表框添加项目。

private bool insideTitleBar = false;
private bool outsideTitleBar = false;

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0xA0) // WM_NCMOUSEMOVE
    {        
           if(!insideTitleBar)
           {
            listBox1.Items.Add("mouse move on title bar");
            insideTitleBar = true;
            outsideTitleBar = false;
           }
    } 
    else if (m.Msg == 0x2A2) // WM_NCMOUSELEAVE
    {
           if(!outsideTitleBar)
           {      
            listBox1.Items.Add("mouse leave from title bar");            
            outsideTitleBar = true;
            insideTitleBar = false;
           }
    }
    base.WndProc(ref m);
}

关于c# - 捕获鼠标触摸win窗体的标题栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324482/

相关文章:

c# - Unity3d内置物理引擎如何绘制弹道?

delphi - 如何检查控件何时完全初始化?

windows - 如何确定鼠标在两次单击之间允许的移动量以触发 WM_LBUTTONDBLCLK 消息?

c# - Winforms - 单击控件的 WM_NCHITEST 消息

c# - 我在使用 mysql.data 从 mysql 数据库检索盐时遇到问题。 (C#)

c# - 数据库 - 历史数据

c# - 来自外部 ResourceDictionary 的对象

c# - 如何在 WinForms 中制作自动滚动的多行文本框?

c# - 拆分器控件(winforms)

c# - 应用程序很少在 Debug模式下完成加载,但 "run without debug"加载正常