使用过Windows 9x的用户都应该知道,在关闭Windows系统时,整个屏幕会暗下来,那么,如何在自己开发的应用程序中也实现这一效果呢?我们通过调用一组API函数就可以实现,如果你有兴趣,就跟我来吧!这一组函数是:
& p! c/ h0 A- z* i- a GetDC :用来获取屏幕的设备号;
1 g2 ]7 b( f6 j! G+ E) m* z: H, w. W ReleaseDC :释放指定的设备;- P4 E4 s/ B5 P2 O
CreatePatternBrush :创建图形刷子;( n2 R: U$ C9 Z! e+ e& |8 C# Q! i
PatBlt: 利用创建的图形刷子填充指定设备;
/ }5 U: U4 e* ^/ W6 B DeleteObject :删除创建的对象(与CreatePatternBrush创建的刷子对象呼应);
1 G- R( W& `* H# W3 B& B9 I CreateBitmap :创建BMP对象;6 e. o/ w: X8 c1 i
SelectObject :选择当前操作对象;
2 Y) g4 h L' u7 }5 L8 \. k InvalidateRect :使操作无效,即恢复变暗前的状态。
, s: Q- s! N& S& F" S/ ~( D 基本思路
* c3 B+ s4 @1 c/ D1 i5 z4 J& ] 首先创建一个位图对象,然后,利用此位图对象创建一个图案刷子,选择指定设备为当前设备,利用已经创建的图案刷子填充当前设备,删除创建的刷子对象即可使当前设备变暗。调用InvalidateRect函数就可使指定设备恢复到变暗前的状态。- d) A- t3 h8 @5 O: d2 U
步 骤7 m( L" Q6 V, m; V
1、创建一个Form1窗体,设置2个Command按钮,将Command1和Command2的Caption属性分别设置为:“变暗”和“恢复”。9 F. N1 Q) s- N5 _
2、在窗体代码模块中声明API函数和相应的类型,代码如下:
% r7 {: g2 A4 Q+ T9 A Private Type RECT
+ F! Z1 V3 |2 L! m; k8 Q Left As Long
B5 b4 K6 o4 b/ y Top As Long! j) u( Q8 S( o0 t4 |+ V. V
Right As Long* h# G0 _0 n/ `# h5 g& M6 n
Bottom As Long
7 p" @6 I0 g+ G9 X) M' K. O End Type5 {% A3 o# M1 D* E
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
! N @, v' `8 Z0 k. M Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
: q- X: d( I. S! ^* a! m. @% T Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
R* z6 l* W7 f. _# G: O( | Private Declare Function PatBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long
9 \8 f, ?4 O1 }: t8 q Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
1 P# s% [% X8 P, c- W _6 h" v2 ` Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long m2 E- e! v' O" D8 \
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long6 N/ p5 d# U/ \" j- n( `. H
Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long# y4 V" [" N/ }# F- H9 {# r
3、编写代码实现程序功能,由于版面所限,具体代码将放到CCE网站(http://www.cce.com.cn)。
( B7 K- S7 ?% I 以上就是屏幕变暗的方法。如果要使窗体、图片框等对象变暗,只要使窗体或图片框等对象获取句柄即可,修改Command1_Click过程和Command2_Click过程中的以下语句即可实现窗体变暗。9 w# m' l! Q1 F r1 y( M" r
hdc5=Form1.Hdc;: w4 Z6 z! ~+ t1 U" X
Width5=Form1.width;
' E* Y" O% ]; e( l1 @ height5=Form1.height;
/ }9 s$ }7 G. c# k q ReleaseDC(Form1.hwnd,hdct)
, }6 }/ |- y3 `7 O aa=InvalidateRect (Form1.hwnd,bottom,1)。
! g1 Z+ y( O& Z4 R& H 以上程序在VB6.中文版,Windwos 98 环境中运行通过。有兴趣的朋友可以去试一试,看到这种效果是不是觉得很惊奇呢! |