见过有些闹钟做的挺不错的,但不知如何实现将透明图片吸附到桌面上,望高手指教一二。

解决方案 »

  1.   

    CSDN论去上有个源码的贴子,
    自己搜索一下。
      

  2.   

    让窗体始终居于最低层
    -----------------------------------------
    Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Const SWP_NOACTIVATE = &H10
    Private Const SWP_NOSIZE = 1
    Private Const HWND_BOTTOM = 1Private Sub Form_Resize()
        SetWindowPos Me.hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE
    End Sub
      

  3.   

    利用AlphaBlend函数
    看是不是可以帖上去
      

  4.   

    放个Timer控件来定时让窗体置底:Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Const SWP_NOACTIVATE = &H10
    Private Const SWP_NOSIZE = 1
    Private Const HWND_BOTTOM = 1Private Sub Timer1_Timer()
        SetWindowPos Me.hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE
    End SubPrivate Sub Form_Load()
        Timer1.Interval=200
        Timer1.Enabled=True
    End Sub
      

  5.   

    先用spy++看看,是不是画到桌面上去的
      

  6.   

    大家不妨看看:桌面日历秀-->桌面时钟-->钉在桌面,可以让窗口像桌面图标一样To:rainstormmaster(暴风雨 v2.0) spy++捕捉不到窗口To:faysky2():放Timer控件倒可以,但“钉”不到桌面上To IamDeane(冷冷的风(Deane)):AlphaBlend好像只能让窗体上的图片透明To province_(雍昊):桌面背景经常换就不好办了To tianhuo_soft: 没玩过联众
      

  7.   

    //To:rainstormmaster(暴风雨 v2.0) spy++捕捉不到窗口那就是直接画到桌面上去的
      

  8.   


    --用下面几个API
    Option Explicit'Createrectrgn为创建一个由点X1,Y1和X2,Y2描述的矩形区域
    '因为窗体是由一个个矩形组成的
    Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    'Combinergn将两个区域组合为一个新区域
    '把一个个矩形合为一个新的区域
    Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
    '做一个古怪的窗口必须要用的也是那个程序中最重要的一个函数就是SetWindowRgn
    '它的功能就是对指定的窗口进行重画,把这个窗口你选择的部分留下
    '其余的部分抹掉。
    '参数:hWnd:你所要重画的窗口的句柄
    '则应该让此参数为form1.hWnd
    ' hRgn:你要保留的区域的句柄,这个句柄是关键,需要通过别的渠道来获得
    '在这里的区域是由Combinergn合成的新区域
    ' bRedram:是否要马上重画,一般设为true
    Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    '用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放
    Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongType Dat '自定义类型
    '为了和坐标配合,把变量设置为整数型
         sx As Integer '存扫描头次遇到非背景色的X坐标
         ex As Integer '存扫描非背景色结束的X坐标
         sy As Integer 'Y坐标的开始
         ey As Integer 'Y坐标的结束
    End Type
      

  9.   

    //To:rainstormmaster(暴风雨 v2.0) spy++捕捉不到窗口那是利用Hook实现跨进程子类,自绘桌面的ListView办到的以前在陈宽达写的《Delphi深度历险》中见到这样的代码
      

  10.   

    http://discuss.fogcreek.com/joelonsoftware3/default.asp?cmd=show&ixPost=104273
      

  11.   

    setprentwnd好像有一个这样的API,不知写对了没有。