自定义用户控件背景透明的方法

先说几种背景透明的方法:

1、Color.Transparent,这个普遍大家都知道,但是,这个对于如果在用户控件上进行控件的组合,但是却需要背景透明的时候,却是办不到的,可能会出现几种情况:完全变成窗体背景色,却覆盖掉窗体上的其他控件;当设置parent属性时,的确使其透明了,但是全部透明 了,就如同窗体把Opacity属性设置成0一样,使上面的控件也透明,所以用这个来实现,pass

2、有人可能会想到,用TransparencyKey来实现,但是,自定义控件和自定义用户控件都不是窗体,所以没有这个属性(这里说句后话,其实TransparentKey属性实现窗体透明和Opacity属性实现窗体透明的原理都是调用API 函数SetLayeredWindowAttributes,只是其中的参数不同而已,所以在此提供一种可能可行的办法,即在自定义控件和用户控件中导入该API,使用相应的参数,也许可以实现如题效果,我没有试过,只想过)

现在说说我的解决办法:

细心的人可能可以发现,在自定义控件的时候,你会发现有一个SetStyle函数,来设置控件的样式,里面就可以使用一个参数:ControlStyles.Opaque,当我发现的时候,看到这个属性貌似也可以实现透明,当时我就觉得,嘿,这个没见过,也许有戏,然后就按照这个方法的参数进行填写:SetStyle(ControlStyles.Opaque,true),然后生成,调用的时候,发现,在把控件拉进设计器的时候,嘿,竟然可以做到要的效果:,不错,于是就果断运行,看看能不能真的成功,之后发现,仅仅这样,还不行,可能需要某一些别的东西,后来仔细得找了msdn中关于SetStyle使控件透明的信息,发现还是不行,最后没办法了,度娘么,找了千辛万苦,终于找到一片类似的帖子,说用图片使控件透明的,里面就有一部分SetStyle的用法,最重要的是,我发现还需要重写CreateParams属性:

protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle = 0x00000020;
                return cp;
            }
        }

,然后运行,哈哈,果断得到效果:,至此,在控件透明方面又多学会了一种方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
原tab件,仿360开关件版权归原作者! VB背景透明代码来自:新浪 “玄雨清风”的博客 感谢以上两位源代码作者 链接:http://pan.baidu.com/s/1hrAEXqG 密码:nfhc '-----------------------以下是转自博客的透明源代码(可透明至父窗体或桌面)------------- '添加一个用户件UserControl,代如下: Option Explicit '实现用户件UserControl的"伪透明" Private Type POINTAPI X As Long Y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const WM_ERASEBKGND = &H14 Private Const WM_PAINT = &HF Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source Public Event MouseDown(Button As Integer, Shift As Integer, X A
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值