1

我想创建一个这样的winform:

Winform 样式类似于通知区域的弹出窗口(Windows 7)

通过关注其他问题,我已经完成了视觉效果(如图所示)。但我不能禁止调整表格的大小,因为要有边框,它必须是“Sizeable”。有人建议将最小尺寸和最大尺寸值设置为等于当前表单尺寸。这解决了部分问题,但是当鼠标悬停在边框上时,它仍然显示双端箭头,表明表单是可调整大小的。有什么方法可以禁用此光标更改?我的目标是模仿 Windows 7 中的原始系统托盘弹出窗口,如网络、声音等。

谢谢!

4

2 回答 2

1

示例代码:

private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;

protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case WM_NCHITTEST:
            m.Result = (IntPtr)HTCLIENT;
            return;
    }
    base.WndProc(ref m);
}

这样,当光标悬停在边框上时,指针不会改变,因为它被视为在表单内部,从而达到预期的效果。

于 2012-09-03T12:02:15.683 回答
0

将消息处理程序添加到您的表单并处理 WM_NCHITTEST。当原件返回 HTSIZE(等)时,返回 HTNONE 或 HTCAPTION。

这样的问题应该让你开始。

解释:

当 Windows 想知道您的窗口使用哪个光标时,它首先会向您发送一条WM_NCHITTEST消息(非客户端命中测试)。该消息由该WndProc方法处理。您的窗口应该返回一个HT*代码来告诉 Windows 鼠标在窗口的哪个部分。例如,返回HTCAPTION标题区域、HTCLIENT客户区域或HTSIZENESW左下角大小。标准窗口的默认消息处理程序(调用base.WndProc)处理此问题。

我们没有标准的窗口。

我们在这里尝试做的是询问原始窗口鼠标在哪里。如果它返回任何HTSIZE*值,我们希望将该返回值替换为HTNONE(对于无操作)或HTCLIENT(如果您希望光标被视为在窗口内 - 可能不是这个)或HTCAPTION(如果您希望能够通过边缘拖动窗口 - 可能有用)。

于 2012-09-03T09:21:07.390 回答