首页 / C# / 在C#中绘制父母和父母子女的自定义背景
在C#中绘制父母和父母子女的自定义背景
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在C#中绘制父母和父母子女的自定义背景,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2205字,纯文字阅读大概需要4分钟。
内容图文
![在C#中绘制父母和父母子女的自定义背景](/upload/InfoBanner/zyjiaocheng/662/c71332fbc5f947f48b6fd930e5a095f9.jpg)
我正在尝试使用this tutorial,以便可以使用透明按钮.在主要背景下效果很好,但不会覆盖其他子项.如果我使用BringToFront(),则它应该在其他子项的绘图处.
我已经开始通过将其添加到代码中来解决它:
foreach (Control child in Parent.Controls) {
if(child != this) {
InvokePaintBackground(child, pea);
InvokePaint(child, pea);
}
}
尽管我得到了一些想要的东西,但它位于错误的位置(在左侧而不是应该在中间的位置),并且在儿童绘画事件中绘制的形状也没有显示.
我该如何进行修改,以便让其他所有孩子也都完全了解透明性?
注意:除了我的孩子,我不担心会给其他人带来痛苦,因为我知道这没有任何问题,并且还有很多其他地方可以找到如何递归让所有孩子痛苦的方法.
感谢C.Evenhuis的回答,它现在可以工作了.我的实现很简单(只有另一个孩子),所以这是我的代码.对于将来的读者,请务必阅读该文章,以获取fll范围.
using (PaintEventArgs pea = new PaintEventArgs(e.Graphics, rect)) {
pea.Graphics.SetClip(rect);
InvokePaintBackground(Parent, pea);
InvokePaint(Parent, pea);
foreach (Control child in Parent.Controls) {
if (child != this) {
pea.Graphics.ResetTransform();
pea.Graphics.TranslateTransform(child.Left - Left, child.Top - Top);
InvokePaintBackground(child, pea);
InvokePaint(child, pea);
}
}
}
解决方法:
绘画时,所有控件均假定其左上角位于(0,0)坐标处.这是通过在调用OnPaint之前将Graphics对象的视口设置为控件的坐标来实现的.
要绘制其他控件,您必须手动执行以下操作:
if (child != this)
{
int offsetX = control.Left - Left;
int offsetY = control.Top - Top;
// Set the viewport to that of the control
pevent.Graphics.TranslateTransform(offsetX, offsetY);
// Translate the clip rectangle to the new coordinate base
Rectangle clip = pevent.ClipRectangle;
clip.Offset(-offsetX, -offsetY); // Ugly self-modifying struct
PaintEventArgs clippedArgs = new PaintEventArgs(pevent.Graphics, clip);
InvokePaintBackground(control, clippedArgs);
InvokePaint(control, clippedArgs);
pevent.Graphics.TranslateTransform(-offsetX, -offsetY)
}
如果基础控件是包含自己的子控件的Panel,则事情会变得更加复杂-这些控件不会自动与其父控件一起绘制.如果您也需要支持,我建议将WM_PRINT消息发送到父控件和当前控件下方的缓冲控件-对于兄弟控件,您可以设置PRF_CHILDREN标志以使其也绘制其后代.
同样,当前您正在绘制所有同级控件-包括当前控件上方的那些.您可能希望让循环倒退并在到达当前控件时中断.在您开始堆叠多个透明控件之前,这将不是一个真正的问题.
内容总结
以上是互联网集市为您收集整理的在C#中绘制父母和父母子女的自定义背景全部内容,希望文章能够帮你解决在C#中绘制父母和父母子女的自定义背景所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。