0
我有一个自定义控件,我用它作为橡皮筋绘制蓝色边框和半透明中间。我正在处理鼠标向下/移动事件以调整面板大小。当鼠标移动事件被调用时,一切似乎都能正常工作,它全部按照我的预期绘制,但是当鼠标停止移动时,半透明下方的某些自定义控件正在重绘自己。用z顺序玩耍什么都不会做。半透明面板显示下方的控件
这里是透明面板:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
protected override void OnPaint(PaintEventArgs pe)
{
pe.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(128, 101, 135, 196)), this.ClientRectangle);
pe.Graphics.DrawRectangle(Pens.DarkBlue,
pe.ClipRectangle.Left,
pe.ClipRectangle.Top,
this.Width - 1,
this.Height - 1);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
//do not allow the background to be painted
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
}
您的控件是否从Panel类派生? – 2011-03-02 15:48:07
不,只是用户控制 – 2011-03-02 16:22:28
会发生什么情况是,通过透明控件(无透明控件获取无效)在油漆底下获取无效的控件。你想以这种方式实现将是非常困难的。我们在我们的一个项目中进行了全面的测试,并通过在运行时修改对API的调用,完全重定向了WinForms控件的渲染。但这很难,需要很长时间。如果你有这种可能性,你可能需要考虑WPF的这个用例。或者制作UI WPF的一部分并在WinForms中托管它。 – 2011-03-03 00:18:49