修复控制不可点击区域(当BorderStyle为Fixed3D时)

时间:2014-10-22 21:17:42

标签: c# .net winforms

修改

似乎任何Panel都存在问题(尽管不是每个Control)。相应地更改了标题。但问题主要在于SplitContainer,因为内部无法点击区域。

原始

在以下情况中,SplitContainer中存在忽略事件的区域:

  1. 创建一个SplitContainer并为安全措施设置它(和它的 面板')填充和边距为0.
  2. 将所有这些订阅到Click事件处理程序。
  3. 我把System.Media.SystemSounds.Asterisk.Play();放在那个处理程序中。
  4. 现在导致问题的原因是:设置BorderStyle = BorderStyle.Fixed3D
  5. 现在,当点击大部分区域时,会听到声音,但是在面板和分割器之间的边界上 - 它不是。

    如何修复(当然不改变BorderStyle)?

1 个答案:

答案 0 :(得分:0)

您可以在WM_SETCURSOR消息的边框中查看鼠标是否已关闭:

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    if (m.Msg == 0x0020) //WM_SETCURSOR
    {
        //wParam is the window handle where the cursor is over
        if ( m.WParam == splitContainer1.Panel1.Handle || m.WParam == splitContainer1.Panel2.Handle )
        {
            if ( ((int)m.LParam & 0xFFFF) == 18 ) //low 16bits of lParam -> HTBORDER
                if ( (((int)m.LParam & 0xFFFF0000) >> 16) == 0x0201) //hight 16bits -> WM_LBUTTONDOWN 
                {
                    //mouse is down
                }
            }
        }
    }
}

如果您想查看click event,请使用WM_LBUTTONDOWN更改WM_LBUTTONUP