如何在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#。
答案 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属性作为窗口句柄。