首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可拖WinForm问题

可拖WinForm问题
EN

Stack Overflow用户
提问于 2009-05-29 17:24:21
回答 1查看 642关注 0票数 1

我有一个窗口窗体,可以通过单击和拖动窗体的任何部分来移动。我使用了重写WndProc的方法,并将NCHITTEST函数的结果设置为HTCAPTION,以便欺骗表单,以为我单击了标题--因此它支持拖动。

这方面的代码很好用,如下所示:

代码语言:javascript
复制
protected override void WndProc(ref Message msg)
    {
      if (msg.Msg == (int)WinAPI.NCHITTEST)
            {
                DefWndProc(ref msg);
                if ((int)msg.Result == (int)MousePositionCodes.HTCLIENT)
                {
                   msg.Result = (IntPtr)MousePositionCodes.HTCAPTION;
                   return;
                }
            }
        }
        base.WndProc(ref msg);
    }

当我将一个ToolStripPanel停靠到表单中时(这是一个可拖动的工具栏),就会出现这个问题。我需要ToolStripPanel中没有被ToolStrip覆盖的任何部分来传递导致整个表单进入拖动模式所需的消息。

我已经创建了自己的ToolStripContainer类来覆盖WndProc函数,并尝试使用与上面相同的函数,但它会导致ToolStripContainer进入表单中的拖动模式,这不是所需的功能。

我还尝试将NCHITTEST消息传递给父消息,并使用当前鼠标坐标构造新消息,并使用WinAPI和父窗口句柄将其发送给父消息。

我一定错过了一些简单的东西..。有人有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2009-05-29 17:30:38

尝试在您自己的WndProc的ToolStripContainer,其中您有测试的WM_NCHITTEST返回HTTRANSPARENT (-1)的区域,您想要拖动发生。这将导致消息在链式中上升到您处理它的表单,并返回HTCAPTION,因此会发生拖动。

希望这能有所帮助。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/927167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档