更详细的表明我的意思当我点某个按钮,或者弹出一个对话框时,屏幕会慢慢的变黑,就像XP的关机前的效果一样我在163的邮箱里面,也看到过此类的效果,但是,本人是菜鸟一级,没能具备该等水平特向广大的高手提出这等不起眼的小特效。我先有二个想法,就是利用截取屏幕的画面,
第一
然后保存到picture1,
把窗体的BorderStyle的值设为0(None),WindowState设为2(max)
在用timer改变picture1的图像(慢慢变黑)第二
正在组织语言中.....在网上找了一些类似的代码,但是,都仅仅只能变黑,不能慢慢的变黑,而且有些部分还会有白色(比如说开始菜单那一块就是白色的!)希望大伙不要吝啬,帮助我们这些菜鸟一级的人群!谢谢先!

解决方案 »

  1.   

    你这效果我也一直在找,可总是找不到理想的,我认为是系统有这样的API,从95起就有的了,像关机或重启注销前确认的那一幕,XP多了个渐变效果,不过我想也是同一个API,知道的请回网页的注销效果我也这有http://npower.vicp.net/logout.htm
      

  2.   

    除了调用API,我想用其它方法模拟这一幕的效果都不怎样好,因为作图象处理会占CPU,浪费时间
      

  3.   

    不晓得有这个api,不过wumylove1234(毁于随)说的就可以实现了。
      

  4.   

    SetColorAdjustment和GdiAlphaBlend都能实现变暗DC上图像的功能
      

  5.   

    xp的关机效果跟98的关机效果实现起来根本就是两回事。
    另外,98那种可以称为变黑,而xp那种其实是把真彩图逐步变为灰度图
    98那种很简单,网上一抓一大把
    xp那种可以参考我以前回复的一个贴子:
    http://community.csdn.net/Expert/topic/4191/4191909.xml?temp=.2810022
    不过那时写的是一下子变灰的,要逐步变灰要修改一下楼主自己试试吧。
      

  6.   

    To: lsftest() 
    你给的代码我正在看,好多啊!
    http://community.csdn.net/Expert/topic/4191/4191909.xml?temp=.2810022
    先谢喽,不知道行不行!
      

  7.   

    把我吓死了,好多无用的代码呀,而且更可怕的是没有注释!
    唉!··可怜了我的眼睛!
     lsftest() 太有个性了!在加一句,太牛了!
      

  8.   

    把我吓死了,好多无用的代码呀,而且更可怕的是没有注释!
    =======================================
    是有很多无用代码,因为是把一个更早以前的程序的模块直接帖上去的
    其实主要代码是这些:
    'form1里的代码:
    Dim displaysend(1 To 3145728) As Byte
    Private Sub Command11_Click()
    Dim hdc As Long
    Dim hmemdc As Long
    Dim hmemdc1 As Long
    Dim hBitmap As Long
    Dim hbitmap1 As Long
    Dim status As Long
    hdc = GetDC(0)
    'hdc = Picture1.hdc
    hmemdc = CreateCompatibleDC(GetDC(0))
    hmemdc1 = CreateCompatibleDC(GetDC(0))
    hBitmap = CreateCompatibleBitmap(GetDC(0), 1024, 768)
    hbitmap1 = CreateCompatibleBitmap(GetDC(0), 1024, 768)
    SelectObject hmemdc, hBitmap
    SelectObject hmemdc1, hbitmap1
    BitBlt hmemdc, 0, 0, 1024, 768, hdc, 0, 0, vbSrcCopy
    status = GetBitmapBits(hBitmap, 3145728, displaysend(1))For i = 3145728 To 1 Step -4
    temp = (CLng(9798) * displaysend(i - 1) + CLng(19235) * displaysend(i - 2) + CLng(3735) * displaysend(i - 3)) \ 32768
    displaysend(i - 1) = temp
    displaysend(i - 2) = temp
    displaysend(i - 3) = temp
    Next
    status = SetBitmapBits(hbitmap1, 3145728, displaysend(1))StretchBlt GetDC(0), 0, 0, 1024, 768, hmemdc1, 0, 0, 1024, 768, vbSrcCopy
    'Picture1.Refresh
    ReleaseDC 0, hdc
    DeleteDC hmemdc
    DeleteObject hBitmap
    MsgBox "ok"
    End Sub你把上面用到了什么api或常量定义自己搞一个模块就可以了。现在我的机子里已没有vb所以不能进行测试,见谅。。
      

  9.   

    嘿嘿,谢谢了!我昨天晚上把你的代码简化得跟你现在发出来的差不多了,而且每条都写了注释(嘿嘿,怕以后忘记了)
    我还在你的Msgbox "OK"的后面加了一句 WC = InvalidateRect(0, 0, 1) 可以还原本色把你的For i = 3145728 To 1 Step -4 的 步长改成了 -12,-8,-4用一个时间来调用(这样就有了慢慢变灰的效果!)但是我不解的是,我把StretchBlt GetDC(0), 0, 0, 1024, 768, hmemdc1, 0, 0, 1024, 768, vbSrcCopy 的GetDC(0)改成me.hdc怎么就不行了呢!?不变灰了恕小弟愚昧!
      

  10.   

    但是我不解的是,我把StretchBlt GetDC(0), 0, 0, 1024, 768, hmemdc1, 0, 0, 1024, 768, vbSrcCopy 的GetDC(0)改成me.hdc怎么就不行了呢!?不变灰了
    =======================================
    是因为下面这几句:
    hmemdc = CreateCompatibleDC(GetDC(0))
    hmemdc1 = CreateCompatibleDC(GetDC(0))
    hBitmap = CreateCompatibleBitmap(GetDC(0), 1024, 768)
    hbitmap1 = CreateCompatibleBitmap(GetDC(0), 1024, 768)建立的hmemdc、hmemdc1都是兼容于getdc(0)的dc,同理,建立的hBitmap、hBitmap1都是兼容于getdc(0)的Bitmap,你把上面四句的getdc(0)改成me.hdc应该就可以了。
      

  11.   

    另外,我上面的代码最后只释放了hmemdc、hBitmap,没有释放hmemdc1、hBitmap1,楼主自己加上去吧。。
      

  12.   

    真是太谢谢了!
    现在的功能基本上是能够实现,只不过有些慢!
    感谢以下人员的帮助:
        lsftest()
        yanexp(啊福)
        thirdapple(.:RNPA:.陨落雕 - O(1)的未来)
    我今天晚上将在“非技术类 ”为以上三位在次加分,谢谢!
      

  13.   

    这一代码对于设置为32位色的系统有效
    =======================
    是的,只作演示之用。为免有误人子弟之嫌,给楼主附带zyl910兄的经典之作《用VB写高效的图像处理程序》:
    http://www.zahui.com/html/3/6637.htm