使用过Windows 9x的用户都应该知道,在关闭Windows系统时,整个屏幕会暗下来,那么,如何在自己开发的应用程序中也实现这一效果呢?我们通过调用一组API函数就可以实现,如果你有兴趣,就跟我来吧!这一组函数是:" b: v" Z# N/ t# g0 d) d/ R `
GetDC :用来获取屏幕的设备号;
V" Y3 G3 c/ P# c ReleaseDC :释放指定的设备;
' w, O7 B/ Z# W1 J* H CreatePatternBrush :创建图形刷子;1 |, ^! k$ x% T, `) a
PatBlt: 利用创建的图形刷子填充指定设备;7 p' {! w- P1 J& X
DeleteObject :删除创建的对象(与CreatePatternBrush创建的刷子对象呼应);$ n3 S" E- q( Y
CreateBitmap :创建BMP对象;
) V7 Z, h6 ]9 E9 B( b' V# F, q8 j SelectObject :选择当前操作对象; i# T- B" L9 A2 g$ `+ d. e: i
InvalidateRect :使操作无效,即恢复变暗前的状态。
' e5 i$ B; }. K: y 基本思路% f: Q# n3 M! m4 G# Z; c& ]
首先创建一个位图对象,然后,利用此位图对象创建一个图案刷子,选择指定设备为当前设备,利用已经创建的图案刷子填充当前设备,删除创建的刷子对象即可使当前设备变暗。调用InvalidateRect函数就可使指定设备恢复到变暗前的状态。, G' F, x; k" n# W* j
步 骤) l0 X9 p0 d2 ]; w
1、创建一个Form1窗体,设置2个Command按钮,将Command1和Command2的Caption属性分别设置为:“变暗”和“恢复”。0 D9 w) A' N( _8 c2 }& z
2、在窗体代码模块中声明API函数和相应的类型,代码如下:) G' z/ r" t; z |/ v5 I d5 q2 h
Private Type RECT
; t% }/ q) b8 P( u5 T0 x+ x0 \! b Left As Long/ a: d7 }- n* v' b+ B- K
Top As Long
: B. x9 [* v; p" {, Q5 ], Z Right As Long2 T; W9 R3 r0 e- i6 L, o" X* T( T
Bottom As Long
( t1 [9 \; P7 P$ d, ?- a End Type' ^4 V) ?, a7 X* o5 b
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
3 p0 _0 a4 R' `. y Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
. D/ t# f8 K+ C. U, S Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
& w; r1 U+ y7 y: Q 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& G( z2 _# a! W8 _+ ?% Z
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long/ n3 ^4 t% {7 t+ m: Z i4 v" l4 p
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/ Z3 Y) C3 {5 n9 i: U8 W
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long% v4 j+ u9 i! s
Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
4 ^( Z& j/ N% M8 m 3、编写代码实现程序功能,由于版面所限,具体代码将放到CCE网站(http://www.cce.com.cn)。 h4 P* q( n5 E7 i1 B
以上就是屏幕变暗的方法。如果要使窗体、图片框等对象变暗,只要使窗体或图片框等对象获取句柄即可,修改Command1_Click过程和Command2_Click过程中的以下语句即可实现窗体变暗。
" z8 N1 E3 P' [+ w. Q hdc5=Form1.Hdc;4 b: T' v' a" ?" m8 D% M3 R
Width5=Form1.width;& K% y8 K" r# R( g1 y) H R
height5=Form1.height;
& @' K, W! C- k; O1 d9 O# X ReleaseDC(Form1.hwnd,hdct)
& F3 @3 D0 @0 x% q aa=InvalidateRect (Form1.hwnd,bottom,1)。2 O2 S8 f+ C6 U" m- ^' Q! ?; K
以上程序在VB6.中文版,Windwos 98 环境中运行通过。有兴趣的朋友可以去试一试,看到这种效果是不是觉得很惊奇呢! |