搜索
bottom↓
回复: 31

C#能开发半透明背景图片的窗体程序吗

[复制链接]

出100入95汤圆

发表于 2021-7-9 19:42:12 | 显示全部楼层 |阅读模式
下面这个游戏背景是图片,左边一块全是镂空的,我用C#放了png图片,是另一个鬼样子。









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入984汤圆

发表于 2021-7-9 19:47:24 | 显示全部楼层
本帖最后由 Himem 于 2021-7-9 19:54 编辑

https://stackoverflow.com/questi ... ound-image/33531201

出100入95汤圆

 楼主| 发表于 2021-7-9 20:07:18 | 显示全部楼层
Himem 发表于 2021-7-9 19:47
https://stackoverflow.com/questions/33530623/c-sharp-windows-form-transparent-background-image/33531 ...

谢谢,感觉代码量好多的样子

出100入95汤圆

 楼主| 发表于 2021-7-9 20:33:29 | 显示全部楼层
算了,放弃镂空窗体了,做一个全图片的吧,再用几行代码拖动窗体




        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;
        }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入442汤圆

发表于 2021-7-9 21:53:08 来自手机 | 显示全部楼层
win并不擅长干这些事。。你要用android等着力于用户体验的系统。

出100入95汤圆

 楼主| 发表于 2021-7-9 21:55:57 | 显示全部楼层
wye11083 发表于 2021-7-9 21:53
win并不擅长干这些事。。你要用android等着力于用户体验的系统。

可惜了,我这个只在Win上使用的程序,因为配置一次后就隐藏到系统栏,还可以接受

出0入0汤圆

发表于 2021-7-9 23:35:22 | 显示全部楼层
需要一定量的代码, WinForm 的话可以看看这个项目,里边的 DirectUI 就是干这个的

https://github.com/anonymous5l/ncmdump-gui

出0入0汤圆

发表于 2021-7-9 23:47:52 | 显示全部楼层
有两种方案:自定义不规则窗体,或是选择带透明的png作为背景图片

出200入2554汤圆

发表于 2021-7-10 11:24:15 来自手机 | 显示全部楼层
原来MFC的时候,用SetWindowRgn做过不规则窗体,不足是没有羽化边缘。

出0入0汤圆

发表于 2021-7-10 11:35:50 | 显示全部楼层
可能你需要 wpf 来做。                                                                                                                 

出870入263汤圆

发表于 2021-7-10 12:47:24 | 显示全部楼层
本帖最后由 armstrong 于 2021-7-10 12:54 编辑
wye11083 发表于 2021-7-9 21:53
win并不擅长干这些事。。你要用android等着力于用户体验的系统。


楼主位展示的就是Windows程序,你却说……
早在Windows 98年代,当时就流行一些桌面小精灵,可以鼠标交互,都是这种技术。

出870入263汤圆

发表于 2021-7-10 12:57:29 | 显示全部楼层
本帖最后由 armstrong 于 2021-7-10 13:02 编辑

给楼主一个示例,桌面小金鱼宠物,我在十几年前编译起来玩过,用的就是这种技术。
这种技术足以完成高帧率动画,而且是镂空的。
https://www.haolizi.net/example/view_10919.html
演示


源码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入442汤圆

发表于 2021-7-10 13:04:51 来自手机 | 显示全部楼层
armstrong 发表于 2021-7-10 12:47
楼主位展示的就是Windows程序,你却说……
早在Windows 98年代,当时就流行一些桌面小精灵,可以鼠标交互 ...

是啊,没毛病啊,m$就是不擅长这种半透明啊。我所见过的所有程序基本只有破解器会用这种方式炫耀编程能力。

出870入263汤圆

发表于 2021-7-10 13:06:47 | 显示全部楼层
很多软件的启动或者关于界面也会使用这种技术,比如phtoshop:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出870入263汤圆

发表于 2021-7-10 13:08:02 | 显示全部楼层
本帖最后由 armstrong 于 2021-7-10 13:12 编辑
wye11083 发表于 2021-7-10 13:04
是啊,没毛病啊,m$就是不擅长这种半透明啊。我所见过的所有程序基本只有破解器会用这种方式炫耀编程能力 ...


你觉得这是炫耀,但其实很普通的效果而已,只要Ctrl+C和Ctrl+V就能搞定的东西。再说这种花里胡哨的界面,应用场景并不多,只在某些展示窗口用得到。

出870入263汤圆

发表于 2021-7-10 13:16:57 | 显示全部楼层
本帖最后由 armstrong 于 2021-7-10 13:18 编辑

如果要使整个窗口半透明,更简单,只要SetLayeredWindowAttributes函数就搞定了,连标题栏都半透明:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出870入263汤圆

发表于 2021-7-10 13:23:58 | 显示全部楼层
wye11083 发表于 2021-7-10 13:04
是啊,没毛病啊,m$就是不擅长这种半透明啊。我所见过的所有程序基本只有破解器会用这种方式炫耀编程能力 ...

一般情况下开发应用,都是先确定操作系统平台,不可能为了某个效果而换平台。所以你说要用androind根本不成立,还不如别回复。

出100入95汤圆

 楼主| 发表于 2021-7-10 13:25:51 | 显示全部楼层
armstrong 发表于 2021-7-10 12:57
给楼主一个示例,桌面小金鱼宠物,我在十几年前编译起来玩过,用的就是这种技术。
这种技术足以完成高帧率 ...

非常感谢,我正愁没有注册账号下载源码呢,现在马上试试。

出0入0汤圆

发表于 2021-7-10 13:48:57 | 显示全部楼层
wye11083 发表于 2021-7-9 21:53
win并不擅长干这些事。。你要用android等着力于用户体验的系统。

这和WIN系统没关系,而和编程语言有关系,编程语言不做这功能只能自己码代码实现了

出870入263汤圆

发表于 2021-7-10 14:02:21 | 显示全部楼层
用二楼给的链接,帮楼主测试了一下,比金鱼更简单,因为它不需要动画。
https://stackoverflow.com/questions/33530623/c-sharp-windows-form-transparent-background-image/33531201


当然,关闭窗口按钮需要自己添加一个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入984汤圆

发表于 2021-7-10 14:13:00 | 显示全部楼层
本帖最后由 Himem 于 2021-7-10 14:16 编辑
modbus 发表于 2021-7-10 13:48
这和WIN系统没关系,而和编程语言有关系,编程语言不做这功能只能自己码代码实现了 ...


本身就是靠win的layeredwindow机制,和语言毫无关

出870入263汤圆

发表于 2021-7-10 14:14:08 | 显示全部楼层
armstrong 发表于 2021-7-10 14:02
用二楼给的链接,帮楼主测试了一下,比金鱼更简单,因为它不需要动画。
https://stackoverflow.com/questio ...

这个方法不好,放在窗口上的按钮会消失不见,其实它存在,可以点击。

出100入95汤圆

 楼主| 发表于 2021-7-10 14:18:10 | 显示全部楼层
搞定了,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;
            }
        }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出870入263汤圆

发表于 2021-7-10 14:18:41 | 显示全部楼层
Himem 发表于 2021-7-10 14:13
本身就是靠win的layerwindow机制,和语言毫无关

其实楼上说的可能是指:某种语言没有提供现成的库可用。比如C++标准库有Queue,Stack;那么对于C++这两个东西就直接可用。
如果C#在System.Windows.Forms命名空间里自带不规则窗口的函数,那么就说C#语言直接支持吧。

出870入263汤圆

发表于 2021-7-10 14:22:15 | 显示全部楼层
本帖最后由 armstrong 于 2021-7-10 14:25 编辑

记得镂空出是真正镂空,连鼠标事件也穿透的。你在圆角附近拖动鼠标试试看。

出100入95汤圆

 楼主| 发表于 2021-7-10 14:25:18 | 显示全部楼层

可以交互,不过我这个应用无所谓了,我只需要一个外观漂亮的界面

出870入263汤圆

发表于 2021-7-10 14:37:18 | 显示全部楼层
fszhang 发表于 2021-7-10 14:25
可以交互,不过我这个应用无所谓了,我只需要一个外观漂亮的界面

这个方案有一个缺陷:窗口的控件都会看不见。如果是按钮还算好办,就是在背景图片上画出按钮,然后对应位置放置控件。但其它复杂控件就不好办了。
https://blog.csdn.net/jinjazz/article/details/1860437

出870入263汤圆

发表于 2021-7-10 15:01:12 | 显示全部楼层
本帖最后由 armstrong 于 2021-7-10 15:46 编辑

可能最实用的方法还是System.Drawing.Region对象。也就是9楼的SetWindowRgn方案的C#版。
下面这个是Region实现方法,供参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入16汤圆

发表于 2021-7-10 19:14:38 | 显示全部楼层
WPF啊。简单

出0入33汤圆

发表于 2021-7-10 20:47:55 来自手机 | 显示全部楼层
用unity啊,多酷炫都行。

出100入95汤圆

 楼主| 发表于 2021-7-10 22:19:33 | 显示全部楼层
vtte 发表于 2021-7-10 20:47
用unity啊,多酷炫都行。

Unity我会做,你看一下我之前的帖子。我现在做的这个是一个轻量的后台驱动程序,界面是偶尔出来一下,Unity做太大了。

出100入95汤圆

 楼主| 发表于 2021-7-10 22:29:09 | 显示全部楼层
armstrong 发表于 2021-7-10 15:01
可能最实用的方法还是System.Drawing.Region对象。也就是9楼的SetWindowRgn方案的C#版。
下面这个是Region ...

你这个和我楼主位的差不多,在窗体属性最后面的那个透明颜色选择,你发的这个例程里面,被扣掉的是背景的颜色,就是属性里面设置的颜色,但没法处理羽化的透明图片。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 07:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表