C#能开发半透明背景图片的窗体程序吗
下面这个游戏背景是图片,左边一块全是镂空的,我用C#放了png图片,是另一个鬼样子。本帖最后由 Himem 于 2021-7-9 19:54 编辑
https://stackoverflow.com/questions/33530623/c-sharp-windows-form-transparent-background-image/33531201 Himem 发表于 2021-7-9 19:47
https://stackoverflow.com/questions/33530623/c-sharp-windows-form-transparent-background-image/33531 ...
谢谢,感觉代码量好多的样子 算了,放弃镂空窗体了,做一个全图片的吧,再用几行代码拖动窗体
public Point startPoint;
public bool pressed=false;
public Form1()
{
InitializeComponent();
}
private void mouseDown(object sender, MouseEventArgs e)
{
startPoint = e.Location;
pressed = true;
}
private void mouseMove(object sender, MouseEventArgs e)
{
if (pressed)
{
this.Location = new Point(this.Location.X + e.X - startPoint.X, this.Location.Y+ e.Y - startPoint.Y);
}
}
private void mouseUp(object sender, MouseEventArgs e)
{
pressed = false;
}
win并不擅长干这些事。。你要用android等着力于用户体验的系统。 wye11083 发表于 2021-7-9 21:53
win并不擅长干这些事。。你要用android等着力于用户体验的系统。
可惜了,我这个只在Win上使用的程序,因为配置一次后就隐藏到系统栏,还可以接受 需要一定量的代码, WinForm 的话可以看看这个项目,里边的 DirectUI 就是干这个的
https://github.com/anonymous5l/ncmdump-gui
有两种方案:自定义不规则窗体,或是选择带透明的png作为背景图片 原来MFC的时候,用SetWindowRgn做过不规则窗体,不足是没有羽化边缘。 可能你需要 wpf 来做。 本帖最后由 armstrong 于 2021-7-10 12:54 编辑
wye11083 发表于 2021-7-9 21:53
win并不擅长干这些事。。你要用android等着力于用户体验的系统。
楼主位展示的就是Windows程序,你却说……
早在Windows 98年代,当时就流行一些桌面小精灵,可以鼠标交互,都是这种技术。 本帖最后由 armstrong 于 2021-7-10 13:02 编辑
给楼主一个示例,桌面小金鱼宠物,我在十几年前编译起来玩过,用的就是这种技术。
这种技术足以完成高帧率动画,而且是镂空的。
https://www.haolizi.net/example/view_10919.html
演示
源码
armstrong 发表于 2021-7-10 12:47
楼主位展示的就是Windows程序,你却说……
早在Windows 98年代,当时就流行一些桌面小精灵,可以鼠标交互 ...
是啊,没毛病啊,m$就是不擅长这种半透明啊。我所见过的所有程序基本只有破解器会用这种方式炫耀编程能力。 很多软件的启动或者关于界面也会使用这种技术,比如phtoshop:
本帖最后由 armstrong 于 2021-7-10 13:12 编辑
wye11083 发表于 2021-7-10 13:04
是啊,没毛病啊,m$就是不擅长这种半透明啊。我所见过的所有程序基本只有破解器会用这种方式炫耀编程能力 ...
你觉得这是炫耀,但其实很普通的效果而已,只要Ctrl+C和Ctrl+V就能搞定的东西。再说这种花里胡哨的界面,应用场景并不多,只在某些展示窗口用得到。 本帖最后由 armstrong 于 2021-7-10 13:18 编辑
如果要使整个窗口半透明,更简单,只要SetLayeredWindowAttributes函数就搞定了,连标题栏都半透明:
wye11083 发表于 2021-7-10 13:04
是啊,没毛病啊,m$就是不擅长这种半透明啊。我所见过的所有程序基本只有破解器会用这种方式炫耀编程能力 ...
一般情况下开发应用,都是先确定操作系统平台,不可能为了某个效果而换平台。所以你说要用androind根本不成立,还不如别回复。 armstrong 发表于 2021-7-10 12:57
给楼主一个示例,桌面小金鱼宠物,我在十几年前编译起来玩过,用的就是这种技术。
这种技术足以完成高帧率 ...
非常感谢,我正愁没有注册账号下载源码呢,现在马上试试。 wye11083 发表于 2021-7-9 21:53
win并不擅长干这些事。。你要用android等着力于用户体验的系统。
这和WIN系统没关系,而和编程语言有关系,编程语言不做这功能只能自己码代码实现了 用二楼给的链接,帮楼主测试了一下,比金鱼更简单,因为它不需要动画。
https://stackoverflow.com/questions/33530623/c-sharp-windows-form-transparent-background-image/33531201
当然,关闭窗口按钮需要自己添加一个 本帖最后由 Himem 于 2021-7-10 14:16 编辑
modbus 发表于 2021-7-10 13:48
这和WIN系统没关系,而和编程语言有关系,编程语言不做这功能只能自己码代码实现了 ...
本身就是靠win的layeredwindow机制,和语言毫无关 armstrong 发表于 2021-7-10 14:02
用二楼给的链接,帮楼主测试了一下,比金鱼更简单,因为它不需要动画。
https://stackoverflow.com/questio ...
这个方法不好,放在窗口上的按钮会消失不见,其实它存在,可以点击。 搞定了,12楼的方案,后面继续优化代码,因为不需要定时器刷新
private Image FullImage
{
get
{
return RotateTransformDemo.Properties.Resources.Picture10;
}
}
public Bitmap FrameImage
{
get
{
Bitmap bitmap = new Bitmap(frameWidth, frameHeight);
Graphics g = Graphics.FromImage(bitmap);
g.DrawImage(FullImage, new Rectangle(0, 0, bitmap.Width, bitmap.Height), new Rectangle(0, 0, FullImage.Width, FullImage.Height), GraphicsUnit.Pixel);
return bitmap;
}
}
Himem 发表于 2021-7-10 14:13
本身就是靠win的layerwindow机制,和语言毫无关
其实楼上说的可能是指:某种语言没有提供现成的库可用。比如C++标准库有Queue,Stack;那么对于C++这两个东西就直接可用。
如果C#在System.Windows.Forms命名空间里自带不规则窗口的函数,那么就说C#语言直接支持吧。 本帖最后由 armstrong 于 2021-7-10 14:25 编辑
记得镂空出是真正镂空,连鼠标事件也穿透的。你在圆角附近拖动鼠标试试看。 armstrong 发表于 2021-7-10 14:22
错了错了
可以交互,不过我这个应用无所谓了,我只需要一个外观漂亮的界面 fszhang 发表于 2021-7-10 14:25
可以交互,不过我这个应用无所谓了,我只需要一个外观漂亮的界面
这个方案有一个缺陷:窗口的控件都会看不见。如果是按钮还算好办,就是在背景图片上画出按钮,然后对应位置放置控件。但其它复杂控件就不好办了。
https://blog.csdn.net/jinjazz/article/details/1860437 本帖最后由 armstrong 于 2021-7-10 15:46 编辑
可能最实用的方法还是System.Drawing.Region对象。也就是9楼的SetWindowRgn方案的C#版。
下面这个是Region实现方法,供参考。
WPF啊。简单 用unity啊,多酷炫都行。 vtte 发表于 2021-7-10 20:47
用unity啊,多酷炫都行。
Unity我会做,你看一下我之前的帖子。我现在做的这个是一个轻量的后台驱动程序,界面是偶尔出来一下,Unity做太大了。 armstrong 发表于 2021-7-10 15:01
可能最实用的方法还是System.Drawing.Region对象。也就是9楼的SetWindowRgn方案的C#版。
下面这个是Region ...
你这个和我楼主位的差不多,在窗体属性最后面的那个透明颜色选择,你发的这个例程里面,被扣掉的是背景的颜色,就是属性里面设置的颜色,但没法处理羽化的透明图片。
页:
[1]