e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> C Builder教程 >> 用C++Builder 5开发Windows下的屏保 >> 教程正文
 
教程搜索
 
 
相关教程
  • Borland C++ Builder 5 企业版使用BDE
  • C++ Builder的几则小应用
  • 使用C++ Builder开发DirectX应用程序
  • 用Pcomm Pro开发串行通信程序
  • 用C++Builder写COM版的Hello world
  • 在BCB中制作模仿超级链接效果
  • 在BCB中实现菜单资源的动态加载
  • 在C++ Builder中使用Access数据库
  • BCB实现MDI程序背景图
  • C++ BUILDER 消息处理的深入探索
  • 用C++ Builder实现VFP数据库开发
  • 用C++ Builder获取应用程序图标
  • C++ Builder 中的图像显示技巧
  • 用C++Builder 5开发Windows下的屏保
  • 如何在 BCB 中旋转并输出文字
  • 关于文件复制的程序代码
 
 

图文教程


  • 将其他Email邮件转移到Gmail邮箱中

  • Vista破解TCP/IP后进不了系统咋办

  • Vista下用DriveSpacio查看磁盘空间

  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”
 
 
赞 助 商
 
 
用C++Builder 5开发Windows下的屏保
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

E_Mail:codehunter@sohu.com

网址:http://codehunter.1yes.net

摘要:本文通过一个具体的程序演示了Windows下的屏幕保护程序的实现过程。

一. 引言

视窗系统下的屏幕保护程序是一个基于命令行(Command Line)的应用程序。当屏保

程序被调用时操作系统就用具体的命令行执行该程序。本文组织和处理了所有的命令行,包

括“/p”,“/s”,“/c”,“/a”,其中“/p”表示让屏保在预览窗口中显示;“/s”表示真正运行

屏保;“/c”表示调用设置对话框;而“/a”表示调用密码设置对话框(WinNT中无效)。本

程序尽可能简单地实现一个全功能的屏保,运行Windows的屏保设置程序时你既可以修改

密码(WinNT中无效)又可以设置图片显示的频率并把频率数值保存到注册表里。当屏保

运行时图片以你设置的频率改变显示位置。笔者还留了个作业给读者,请看图1中的选择图

片文件夹这个项目,按下浏览按钮可以设置图片的路径,笔者已经实现了浏览按钮的功能并

把得到的路径也保存到注册表中,并让屏保启动时读picdir的值,picdir等于"no"时的代码

笔者已实现了,picdir不等于"no"时的代码由读者实现。也就是让读者实现一个能把picdir

目录里的图片轮流显示的屏保程序。

二. 实现方法

首先介绍几个API函数。

WinMain函数:

int WINAPI WinMain(

HINSTANCE hInstance, // 当前实例句柄

HINSTANCE hPrevInstance, // 前一个实例句柄

LPSTR lpCmdLine, // 指向命令行参数的指针(本程序要利用的参数)

int nCmdShow // 窗口的状态

);

GetWindowLong函数:得到指定窗口信息的函数

LONG GetWindowLong(

HWND hWnd, //窗口句柄

int nIndex //指定返回的信息

);

SetWindowLong函数:改变窗口属性

LONG SetWindowLong(

HWND hWnd, //窗口句柄

int nIndex, // 指定要设定的值的信息

LONG dwNewLong // 新值

);

SetParent函数:改变指定窗口的父窗口

HWND SetParent(

HWND hWndChild, //要改变父窗体的窗口句柄

HWND hWndNewParent //新的父窗体的句柄

);

GetClientRect函数:得到窗口的客户区

BOOL GetClientRect(

HWND hWnd, // 窗口句柄

LPRECT lpRect //RECT结构的地址


);

SetWindowPos函数:改变窗口的大小,位置,顶级窗口等

BOOL SetWindowPos(

HWND hWnd, // 窗口句柄

HWND hWndInsertAfter, // 布置窗口顺序的句柄(Z order)

int X, // horizontal position

int Y, // vertical position

int cx, // width

int cy, // height

UINT uFlags // 窗口位置等标记

);

SystemParametersInfo函数:访问或设置系统级的参数

BOOL SystemParametersInfo(

UINT uiAction, // 指定要获取或设置的系统参数

UINT uiParam, // depends on action to be taken

PVOID pvParam, // depends on action to be taken

UINT fWinIni // 用户配置文件是否改变标记

);

ShowCursor函数:显示或隐藏光标

int ShowCursor(

BOOL bShow // 鼠标可见度标记

);

GetVersion函数:获取系统的版本信息

DWORD GetVersion(VOID)

以上API函数的具体信息可以查找有关MSSDK文档。了解了基本函数后笔者简述一

下实现方法。

1. 新建一工程,增加两个窗体,将三个窗体分别取名为MainForm,FrmConfig,

FrmControl。在MainForm和FrmControl窗体上各添加一个Timer控件和TImage控件,

把两窗体的BorderStyle设为bsNone,背景色设为黑色。在两个窗体的TImage上各加一

张图片,FrmControl大小设为:高130像素,宽160像素,Timage的Stretch属性设为真

值。FrmConfig的样式如图1。

2. 保存工程文件为screensaver.cpp,其它单元分别存为Unitmain.cpp,

Unitcontrol.cpp,Unitconfig.cpp。

3. 编写代码,具体代码见第三部分的源程序。

4. 编译成可执行文件,并把文件扩展名改为scr。

5. 最后把屏保程序拷贝到windows目录下就可以测试了。如果一切正常的话你将会看

到图片在屏幕上以随机的位置显示。

图1

三. 源代码

以下是本程序的所有的源代码,其中screensaver.cpp, Unitmain.cpp是核心代码。

/*{*******************************}*/

/*{***** screensaver.cpp ****}*/

/*{*******************************}*/


//---------------------------------------------------------------------------

#include

#pragma hdrstop

USERES("screensaver.res");

USEFORM("Unitmain.cpp", Frmmain);

USEFORM("Unitconfig.cpp", FrmConfig);

USEFORM("Unitcontrol.cpp", FrmControl);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR p, int)//“p"是指向命令行参数的指针

{ String StartType;

AnsiString Command=p,temp;

HWND CPWindow =NULL;

if(Command=="")

StartType = "/c";

else

StartType=Command.SubString(1,2);//获取命令行的前两个参数

try

{

Application->Initialize();

if(StartType=="/c")//启动设置窗口

Application->CreateForm(__classid(TFrmConfig), &FrmConfig);

else if(StartType=="/s")启动屏保

Application->CreateForm(__classid(TFrmmain), &Frmmain);

else if(StartType=="/p")//预览

{

Application->CreateForm(__classid(TFrmControl), &FrmControl);

temp=Command.SubString(3,Command.Length()-2);//获取命令行中的屏保预览窗

口句柄的字符串形式

CPWindow =(long *)temp.ToInt();//将预览窗口句柄的字符串形式强制转换为长整形

指针

RECT *lookrect;//建立一个RECT结构指针

1 2 3 4 5 下一页
  • 上一篇教程: 如何在 BCB 中旋转并输出文字
  • 下一篇教程: C++ Builder 中的图像显示技巧
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.