2010-03-25 111 views
1

如何打开/关闭Windows窗体父级控件中的WS_CLIPCHILDREN窗口样式?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 
    } 
}; 

在有间谍检查++我发现父母有默认启用的WS_CLIPCHILDREN窗口样式。什么是Windows窗体的方式来关闭它?

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

回答

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; 
    } 
} 
0

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