2010-03-25 57 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屬性作爲窗口句柄。