****************************
华软源码:http://www.hur.cn
****************************
各位前辈:
见笑了,本人很菜,却一直努力着,看后请不要见怪!
本程序旨讲述VC++中字体的应用,却是通过一个简单的屏幕保护程序来实现的。
本程序运行后将会屏蔽掉Alt+Ctrl+Del,Alt+F4,Alt+Tab等键,
(Windows 2000 不能屏蔽)必须在两个Enter键之间输入密码才能退
出!!!!!!!! 密码是小写"printf".
-----------------说明--------------
_________________________________________________________________________________
1.系统字体的使用过程
(1)定义字体句柄变量
HFONT hF; //hF为字体句柄
(2)调用GetStockObject()获得系统字体句柄,它返回的是系统默认字体
hF=(HFONT)GetStockObject();
(3)调用函数SelectObject将字体选入设备环境
(HFONT)SelectObject(hdc,hF); //hdc为设备环境句柄
自定义字体的使用过程,以在程序中给出。
_________________________________________________________________________________
2.位图的操作过程
位图的操作过程包括定义、加载或创建、选入内存设备环境句柄和输出。
(1)定义
定义一个位图句柄,形式为:
HBITMAP hBm;
(2)加载或创建位图
应用程序调用函数LoadBitMap加载位图并获得位图句柄,形式为:
hBm=LoadBitMap(hInstance,lpszname);
其中:hInstance为当前应用程序实例句柄,lpszname为位图名称。
此外,应用程序还可以通过CreateCompatibleBitmap创建位图。其形式为:
hBM=CreateCompatibleBitmap(hdc,nWidth,nHeight);
其中:nWidth,nHeight 分别为位图的宽度和高度。
应用程序经常通过响应消息 WM_CREATE 完成加载或创建位图的操作,其一般形式为:
case WM_CREATE:
...
hdc=GetDC(hwnd); //获取设备环境
hdcmem=CreateCompatibleDC(hdc); //获取内存设备环境
...
ReleaseDC(hwnd,hdc); //释放设备环境
(3)选入内存设备环境
获取设备环境句柄后,应用程序需调用SelectObject函数将位图选入内存设备环境中,起形式如下:
SelectObject(hdcmem,hBm);
将位图选入内存设备环境后,即可对其进行编辑。
(4)输出
最后应用程序调用函数BitBlt在指定的设备上输出内存中的位图。函数BitBlt将位图从内存设备环境复制
到设备环境中,其原形如下:
BOOL BitBlt
(HDC hdcDest, //目的设备环境句柄
int Xdest,int Ydest, //目的设备显示位图的基点
int nWidth,int nHeight, //位图区域的高和宽
HDC hdcScr, //源设备环境句柄
int XScr,int YScr, //源设备中位图的左上角的坐标
DWORD dwRop //位图显示方式
)
另外,应用程序在输出位图之前,经常需要调用函数GetObject获取位图的尺寸。函数GetObject的作用是获取
指定对象的信息并将其复制到指定的缓冲区内,该函数的原形为:
int GetObject(HANDLE hObject,int nCount,LPVOID lpObject)
其中:hObject 为对象句柄,nCount为复制到缓冲区的字节数,lpObject为接受信息的缓冲区地址。
应用程序调用该函数获取位图尺寸的形式为:
GetObject
(
hBitmap, //位图句柄
sizeof(BITMAP), //BITMAP结构的大小
(LPVOID)&bm //BITMAP结构的地址
)
应用程序调用函数GetObject后,将指定位图的信息写入BITMAP结构中。数据结构BITMAP在位图操作中经常使用,
其定义如下:
typedef struct tagBITMAP
{
LONG bmType; //位图类型
LONG bmWidth; //位图宽度
LONG bmHeight; //位图高度
LONG bmWidthBytes; //每一光栅行的字节数
LONG bmPlanes; //位图中位面的数目
WORD bmBitsPixel; //位图中每个像素的位数
LPVOID bmBits; //位图位值的地址
}# BITMAP;
_________________________________________________________________
程序已给极其祥尽的注释,希望能给刚入门的同仁朋友以最大的帮助!
不足之处,在所难免,请朋友提出宝贵意见(chenzhen1745@sohu.com)。
-------------------------作者:陈振(手记)
2003.11.6(完)