gpt4 book ai didi

c# - 如何让 Rebar 的 .NET 包装器决定鼠标光标?

转载 作者:可可西里 更新时间:2023-11-01 09:14:04 26 4
gpt4 key购买 nike

我正在为 .NET 制作一个 Rebar 包装器。以下是我如何进行控制。

public class Rebar : Control {

public Rebar() : base() {
//Control won't even work if I let UserPaint enabled
SetStyle(ControlStyles.UserPaint, false);
}

protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ClassName = "ReBarWindow32"; //REBARCLASSNAME
cp.ExStyle |= 0x00000080; //WS_EX_TOOLWINDOW
//Windows Forms will control the position and size, not the native control
cp.Style |= 0x00000004 | 0x00000008; //CCS_NORESIZE and CCS_NOPARENTALIGN
return cp;
}
}

}

我通过将 REBARBANDINFO 添加到控件中来测试我的控件,它工作正常。

REBARBANDINFO info = new REBARBANDINFO();
info.cbSize = Marshal.SizeOf(typeof(REBARBANDINFO));
info.fMask = RBBIM_TEXT; // 0x00000004
info.lpText = "example";
SendMessage(this.Handle, RB_INSERTBANDW, -1, ref myband);

我不会包括我的 p/invoke 签名的实现,因为那里一切都很好。

问题从这里开始

该控件无法按我预期的方式工作,Rebar 游标不受尊重,Cursor 属性控制了游标,它甚至覆盖了调整大小游标。

期待

Expectation of Rebar wrapper

现实

Reality of Rebar wrapper

这可能吗?是的,它是

查看此 ListView 示例。可以制作一个尊重其原始光标消息的控件。

ListView example

如何让我的 Rebar 决定鼠标光标而不是 Cursor 属性?

附加:我已尽力提出一个好问题。我仔细检查了问题以确保它可以被理解。

最佳答案

Control 类处理 WM_SETCURSOR 并有自己的逻辑。

作为一个选项,您可以覆盖 WndProc 并让 DefWndProc 处理 WM_SETCURSOR:

const int WM_SETCURSOR = 0x0020;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SETCURSOR)
base.DefWndProc(ref m);
else
base.WndProc(ref m);
}

关于c# - 如何让 Rebar 的 .NET 包装器决定鼠标光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48756525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com