繁体   English   中英

是否可以在不使用p / invoke的情况下设置TVS_EX_DOUBLEBUFFER?

[英]Is it possible to set TVS_EX_DOUBLEBUFFER without using p/invoke?

我试图通过使用双重缓冲来减少TreeView控件中的闪烁。 使用此处概述的建议似乎可行,这样可以设置自Vista以来可用的TVS_EX_DOUBLEBUFFER扩展窗口样式: 树状图闪烁?

但是,我更希望不要对user32.dll有额外的依赖,因为该项目设置为也可以在Mono上运行。 是否可以在不使用P / Invoke的情况下设置TVS_EX_DOUBLEBUFFER扩展窗口样式?

我曾希望可以使用CreateParams来做到这一点,但是它似乎没有用。 这是我尝试过的:

const int TVS_NOHSCROLL = 0x8000;
const int TVS_EX_DOUBLEBUFFER = 0x0004;

protected override CreateParams CreateParams
{
    get
    {
        var parameters = base.CreateParams;
        parameters.Style |= TVS_NOHSCROLL;
        parameters.ExStyle |= TVS_EX_DOUBLEBUFFER;
        return parameters;
    }
}

TVS_NOHSCROLL只是为了演示使用有效的CreateParams设置窗口样式。 根据文档,您可以使用ExStyle来设置扩展窗口样式,但是不幸的是,这似乎不适用于TreeView。

有任何想法吗?

可以通过具有相同名称的属性设置.NET Windows Forms控件中的双缓冲:

yourControl.DoubleBuffered = true;

您可以使用控件的SetStyle方法设置其他样式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM