所以我要通过使用GDI制作游戏引擎来挑战自己。
到目前为止,我已经设法使用GDI制作了一些游戏-但是最近遇到了一个我需要帮助的问题。
我已经实现了一个UI系统,并且发现GDI Translate
函数可以移动 entire 画布。随后,我所有的鼠标坐标都偏移了,导致我的UI系统无法按预期工作。
问题:有什么方法可以使Paint在Paint方法上透明?
我尝试将透明颜色设置为透明,但这只会使面板变黑。
答案 0 :(得分:0)
我不能为此指出一个来源,但是我现在做了一些测试,我的解释如下:
当我将面板的BackgroundColor设置为Colors.FromArgb(50,0,0,0)时,此方法就起作用了,因为每当我更改面板的Backgroundcolor时,面板的颜色就会一直亮着面板。
但是:位于该面板后面的其他控件并非一直可见。我确信出于性能原因,仅当控件对用户可见时才进行控件的呈现,这意味着它们不会被其他控件覆盖。因此,表单的颜色会发光,因为透明的颜色实际上是有效的,但是面板后面的控件却未被渲染,因为它们被另一个控件覆盖。
您必须编写自己的控件:
public class TransparentPanel : Panel
{
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
}
这告诉窗口,该控件是透明的,并且还必须呈现此控件后面z顺序的控件。