更详细的表明我的意思当我点某个按钮,或者弹出一个对话框时,屏幕会慢慢的变黑,就像XP的关机前的效果一样我在163的邮箱里面,也看到过此类的效果,但是,本人是菜鸟一级,没能具备该等水平特向广大的高手提出这等不起眼的小特效。我先有二个想法,就是利用截取屏幕的画面,
第一
然后保存到picture1,
把窗体的BorderStyle的值设为0(None),WindowState设为2(max)
在用timer改变picture1的图像(慢慢变黑)第二
正在组织语言中.....在网上找了一些类似的代码,但是,都仅仅只能变黑,不能慢慢的变黑,而且有些部分还会有白色(比如说开始菜单那一块就是白色的!)希望大伙不要吝啬,帮助我们这些菜鸟一级的人群!谢谢先!
第一
然后保存到picture1,
把窗体的BorderStyle的值设为0(None),WindowState设为2(max)
在用timer改变picture1的图像(慢慢变黑)第二
正在组织语言中.....在网上找了一些类似的代码,但是,都仅仅只能变黑,不能慢慢的变黑,而且有些部分还会有白色(比如说开始菜单那一块就是白色的!)希望大伙不要吝啬,帮助我们这些菜鸟一级的人群!谢谢先!
另外,98那种可以称为变黑,而xp那种其实是把真彩图逐步变为灰度图
98那种很简单,网上一抓一大把
xp那种可以参考我以前回复的一个贴子:
http://community.csdn.net/Expert/topic/4191/4191909.xml?temp=.2810022
不过那时写的是一下子变灰的,要逐步变灰要修改一下楼主自己试试吧。
你给的代码我正在看,好多啊!
http://community.csdn.net/Expert/topic/4191/4191909.xml?temp=.2810022
先谢喽,不知道行不行!
唉!··可怜了我的眼睛!
lsftest() 太有个性了!在加一句,太牛了!
=======================================
是有很多无用代码,因为是把一个更早以前的程序的模块直接帖上去的
其实主要代码是这些:
'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所以不能进行测试,见谅。。
我还在你的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怎么就不行了呢!?不变灰了恕小弟愚昧!
=======================================
是因为下面这几句:
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应该就可以了。
现在的功能基本上是能够实现,只不过有些慢!
感谢以下人员的帮助:
lsftest()
yanexp(啊福)
thirdapple(.:RNPA:.陨落雕 - O(1)的未来)
我今天晚上将在“非技术类 ”为以上三位在次加分,谢谢!
=======================
是的,只作演示之用。为免有误人子弟之嫌,给楼主附带zyl910兄的经典之作《用VB写高效的图像处理程序》:
http://www.zahui.com/html/3/6637.htm