怎样才能获得一个透明窗体呢/
我自己试了好多方法,不行
又到网上下载原代码
可是只有在开始是透明的,移动就保持原有图案.
原代码如下,能否修改一下:
Private Declare Function CreateCompatibleBitmap Lib "gdi32" _
(ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeighth As Long) As Long
Private Declare Function SelectObject Lib "gdi32" _
(ByVal hdc As Long, ByVal hObject As Long) As Long
Dim hBitmapPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace Then Form1.Visible = Not Form1.Visible
End SubPrivate Sub Form_Load()
Form1.AutoRedraw = True
hBitmap = CreateCompatibleBitmap(Me.hdc, 0, 0)
SelectObject Me.hdc, hBitmap
Form1.Refresh
End Sub
我觉得问题在于
此程序只能在窗口出现前获得窗口位置的位图
打开以后窗口就占据了原来的位置
获得的位图就变成窗口自己的位图了
所以用timer 不断执行此程序不行
但是最小化 然后再 最大化 就可以
或者先使 visible 为false,再变为true 也可以
但是这样运算起来对于计算机太麻烦,屏幕总闪
有没有其他方法呢?
请多指教.顺便问一句有没有可能获得半透明窗体?
另外问一句form1.refresh 是什么意思?
不好意思再麻烦一下,问一个与此无关的问题:
有没有像cls那样清除比较容易地整个屏幕的语句
用Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Any, ByVal bErase As Long) As Long
太慢了.
不好意思,由于非点,长时间不上网积累了好多问题,麻烦大家了.
不好意思啊.^v^

解决方案 »

  1.   

    半透明窗体:
    SetLayeredWindowAttributes函数,其中hwnd是透明窗体的句柄,crKey为颜色值,bAlpha是透明度,取值范围是[0,255],dwFlags是透明方式,可以取两个值:当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。    Const LWA_COLORKEY = &H1    Const LWA_ALPHA = &H2    Const GWL_EXSTYLE = (-20)    Const WS_EX_LAYERED = &H80000    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long    Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long    Private Sub Form_Load()        Dim Ret As Long        'Set the window style to 'Layered'        Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)        Ret = Ret Or WS_EX_LAYEREDSetWindowLong Me.hWnd, GWL_EXSTYLE, Ret        'Set the opacity of the layered window to 128        '我们可以设置这个数值来控制透明程度        SetLayeredWindowAttributes Me.hWnd, 0, 128, LWA_ALPHA    End Sub
      

  2.   

    http://vbboshi.myrice.com/vbfriend/vbfriend_3.htm
      

  3.   

    boywang(大力水手)的代码只在2000下有效吧
      

  4.   

    boywang(大力水手)的代码,只可以在2000及以上的系统才有效
      

  5.   

    原因在于win98没有提供SetLayeredWindowAttributes这个函数
      

  6.   

    Const LWA_COLORKEY = &H1
    Const LWA_ALPHA = &H2
    是干什么用的
    文中好象除了声明它 就没有了
    另外 这个好象有点满呀
    光是一个窗口还看不出来满
    一旦在上面作浮动字条 就可以看出来了(字条闪烁)
    另外 字条的透明度也跟着变小
    怎样不让它变小呢?
    另外 还没回答我的其他问题呢.(在最上面)
    谢谢了
    麻烦了
    ^v^