透明面板无法接收WM_NCHITTEST

时间:2015-06-04 07:53:26

标签: c# winforms transparent

在我的c#winform项目中,我将一个面板放在一个表单中。面板的BackColor与表单的TransparencyKey相同,因此它看起来很透明'。

我希望在点击/拖动“透明”内容时移动表单。面板。所以我覆盖了面板的WndProc,如下所示:

public class UnclickablePanel : Panel {
    protected override void WndProc(ref Message m) {
        if (m.Msg == 0x84) {  // WM_NCHITTEST
            m.Result = new IntPtr(-1);
            return;
        }
        base.WndProc(ref m);
    }
}

在我看来,面板返回" -1"(透明)然后表单可以处理鼠标按下/向上/移动事件。

在Win7中使用Aero主题可以正常工作。但是如果win xp或win7 +基本主题,面板根本无法接收WM_NCHITTEST。只需点击表单即可。

任何解决方案或解决方法?

0 个答案:

没有答案