C# 制作透明窗体


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using ControlExs;

namespace TransForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

//// 定义在窗体上,光标显示为手形
this.Cursor = System.Windows.Forms.Cursors.Hand;
//// 定义窗体的标题名称
this.Text = "透明的WinForm窗体!";
//// 定义窗体的开始显示位置是屏幕的中间
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
//// 窗体的边界是Fixed3D类型
//this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
////以桌面的前景色作为窗体的前景色
this.ForeColor = System.Drawing.SystemColors.Desktop;
//// 定义字体类型,大小
this.Font = new System.Drawing.Font("宋体", 9);
//// 定义背景色为蓝色
this.BackColor = System.Drawing.Color.White;
// 设置窗体的大小
//this.ClientSize = new System.Drawing.Size(440, 170);
// Opacity属性设立窗体的透明程度,只对于视窗2000有效
this.Opacity = 0.60;
}

private void Form1_Load(object sender, EventArgs e)
{
this.SetWindowTransparent(100);
}

private void SetWindowTransparent(byte bAlpha)
{
try
{
WinAPI.SetWindowLong(this.Handle, (int)WinAPI.WindowStyle.GWL_EXSTYLE, WinAPI.GetWindowLong(this.Handle, (int)WinAPI.WindowStyle.GWL_EXSTYLE) | (uint)WinAPI.ExWindowStyle.WS_EX_LAYERED);
WinAPI.SetLayeredWindowAttributes(this.Handle, 0, bAlpha, WinAPI.LWA_COLORKEY | WinAPI.LWA_ALPHA);
}
catch
{

}
}

protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Parent = WinAPI.GetDesktopWindow();
cp.ExStyle = 0x00000080 | 0x00000008; //WS_EX_TOOLWINDOW | WS_EX_TOPMOST
return cp;
}
}
}
}


 public class WinAPI
{
[DllImport("user32.dll")]
public extern static IntPtr GetDesktopWindow();

[DllImport("user32.dll")]
public extern static bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);

public static uint LWA_COLORKEY = 0x00000001;
public static uint LWA_ALPHA = 0x00000002;

[DllImport("user32.dll")]
public extern static uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);

[DllImport("user32.dll")]
public extern static uint GetWindowLong(IntPtr hwnd, int nIndex);

public enum WindowStyle : int { GWL_EXSTYLE = -20 }
public enum ExWindowStyle : uint { WS_EX_LAYERED = 0x00080000 }
}

C# 制作透明窗体,布布扣,bubuko.com

时间: 2024-09-29 22:06:14

C# 制作透明窗体的相关文章

详解使用C#制作不规则窗体的方法

本文转自翔宇网http://www.biye5u.com/article/Csharp/winform/2010/2593.html 以前想制作不规则窗体,大多使用API函数来实现,在C#中,也可以不使用API函数照样能制作出漂亮的不规则窗体,下面就介绍一下相关方法. 1.首先准备一张BMP格式的图片 图片的形式随意,但注意图片的背景最好设置成C#中提供的一些色系,如白色(#FFFFFF\white).黑色(#000000\black).黄色(#FFFF00\yellow).蓝色(#0000FF

纯win32实现PNG图片透明窗体

#include <windows.h> #include <gdiplus.h> /*  GDI+ startup token */ ULONG_PTR gdiplusStartupToken; /*  Declare Windows procedure  */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); // UpdateLayeredWindow Defination typedef BOOL(

Qt 制作透明背景图片与裁剪图片(很实用)

这两天想做一个五子棋游戏,想从零开始自己绘制各种图片素材,将经验心得整理如下. 制作透明背景图片: void MyPainter::DrawKit() { QImage image(30, 30, QImage::Format_ARGB32); memset(image.bits(), 0x00, image.byteCount()); // 绘制图片 QPainter painter(&image); painter.setPen(QPen(Qt::red, 2, Qt::SolidLine)

Qt Widget 利用 Qt4.5 实现酷炫透明窗体

本文讲述的是Qt Widget 利用 Qt4.5 实现酷炫透明窗体,QWidget类中的每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分. 先来看内容吧. Qt4.2引入了QWidget::setWindowOpacity函数, 可以为窗体设置透明度, 从0.0到1.0之间, 值越小越透明. 经过设置的窗体可以整体呈现透明的效果. 但这种设置比较粗糙, 只能设一个整体的效果,大概只有比如像拖动的时候能用一下,大多数时候都不太实用.在

透明窗体透明窗体 控件正常显示

//TransparentFrm透明窗体透明窗体 控件正常显示 {以图片的形状作为窗体形态}{使窗体透明 透明的只剩下个控件} // 调用 setFormTransParent(Form1); procedure setFormTransParent(Form:TForm); begin Form.BorderStyle:=bsNone; Form.TransparentColor:=True; Form.TransparentColorValue:=20; Form.Color:=Form.T

gdi+ 高速绘制透明窗体

gdi+ 高速绘制透明窗体: 方法一: 1.用Iamge对象载入png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗体进行布局 方法二: 1.用Bitmap对象载入资源 2.通过CDC选中,再用bitblt拷贝或者AlphaBlend融合到目标CDC上. 3.UpdateLayeredWindow对目标CDC上的hdc进行布局,达到融合背景的效果. 方法一是比較常规的方法,可是drawimage函数的效率太低,假设要实现实时更新的话就会有问题

C#WinForm制作异形窗体/控件

制作异形窗体或控件的思路一般都是想办法生成一个region,然后设置给指定的窗口或控件.生成region的方法有很多,最常用的就是从一幅图片生成,把该图片中的透明色部分“抠”掉,剩下的部分作为一个region.设置窗口或控件的region可以用SetWindowRgn API,不过.NET framework封装了这个操作,在C#中只要对窗口或控件的Region属性赋值就可以了.下面我就把我在C#中实现异形窗体的核心代码贴出来给大家看看,有什么意见尽管提,别客气哦J首先,是一个根据Bitmap对

DSAPI 透明窗体+WIN7磨砂+窗体投影组合

你可以使用DSAPI和DS控件库组合多种特效,以下是透明窗体+WIN7磨砂+窗体投影组合效果 设计界面 编写代码 Private 透明 As New DSAPI.控件.Form窗体.透明窗体助手 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load DSAPI.Win7特性.设置窗体为磨砂透明效果_指定形状(Me, New Region(New Rectangle(0, 0, Me.Width,

PNG透明窗体全攻略(控件不透明)

http://blog.csdn.net/riklin/article/details/4417247 看好了,这是XP系统,未装.net.我的Photoshop学的不太好,把玻璃片弄的太透了些,如果你们有好的美术,再加上这种技术,肯定会如鱼得水.下面就来详细说说它的制作过程吧:     第 一步:在VC6中使用GDI+:你得从网上弄个GDI+ for XP的库,大约500K.如果找不到的话,找我QQ要吧,我会把这个窗口的源程序一起发给你的.把它解压后,将所有文件还包括子目录中的文件复制到你的项