Windows窗体:启用/禁用WS_CLIPCHILDREN

时间:2010-03-25 07:34:10

标签: c# .net windows winforms

如何在Windows窗体父控件中打开/关闭WS_CLIPCHILDREN窗口样式?

我希望在绘制后在子控件上显示一些文本。在我的父控件中,这就是我所拥有的:

class Parent : public Control {
    void Parent::OnPaint(PaintEventArgs ^e){
        Control::OnPaint(e);

        // parent draws here
        // some drawing should happen over the child windows
        // in other words, do not clip child window regions
    }
};

在使用Spy ++检查时,我发现父级默认启用了WS_CLIPCHILDREN窗口样式。什么是Windows Forms关闭此方法?

注意:示例代码在C ++ / CLI中,但我已将此C#标记为可见性......语言在这里并不重要。随意将代码翻译为C#。

2 个答案:

答案 0 :(得分:1)

您可以通过覆盖父控件的CreateParams属性来执行此操作:

protected override CreateParams CreateParams {
    get {
        new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();

        // Modify the existing style.
        CreateParams cp = base.CreateParams;
        // Remove the WS_CLIPCHILDREN flag.
        cp.Style &= ~0x02000000; // WS_CLIPCHILDREN value.

        return cp;
    }
}

答案 1 :(得分:0)

您可以尝试使用SetWindowLong函数直接使用P / Invoke删除样式。使用Form.Handle属性作为窗口句柄。