手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

用BCB研发控制面板程式

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
前不久,Inprise公司(原Borland公司)正式公开了Delphi 5.0版,其研发向导中支持了“控制面板程式(CPL)”框架的生成,利用他能够快速、方便地研发CPL程式。那么是否能在现有的Borland C Builder 中研发CPL程式呢?

  CPL程式是动态链接库(DLL)的一种变形,只但是扩展名为.cpl、入口函数为CPlApplet()而不是DllEntryPoint()罢了(并不是不要DllEntryPoint(),不然不能编译)。我们只需在BCB4.0中选择“File|New...”打开研发向导,选择“DLL”生成一个DLL框架,并在其中加入一个函数CPlApplet()就能够了。为了快速地说明问题,笔者先给出一个最简单的例子程式,然后再来解说。

#include <vcl.h>
#include <cpl.h>
#include <cplext.h>
#pragma hdrstop
USERES("my.res");//这是我加入的资源文档,其中有一个图标

extern"C" __declspec(dllexport) long CALLBACK __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2);

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}

long CALLBACK __declspec(dllexport) __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2)
{
LPNEWCPLINFO mycpl;//LPNEWCPLINFO结构可在CPL.H头文档中查看
long result=0;
switch (uMsg)//判断传来的信息
{
case CPL_INIT:// 第一个信息,在控制面板调入时产生
result=1;
break;
case CPL_GETCOUNT://第二个信息,在控制面板调入时产生
result=1;
break;
case CPL_INQUIRE://第三个信息,当控制面板查询时产生
result=0;
break;
case CPL_NEWINQUIRE://第三个信息,当控制面板查询时产生
mycpl=LPNEWCPLINFO (lParam2);// 将lParam2中的指针传给mycpl
mycpl->dwSize=sizeof(NEWCPLINFO);
mycpl->dwFlags=0;//标志变量 一般设为0
mycpl->dwHelpContext=0;//帮助句柄一般设为0
mycpl->lData=0;
mycpl->hIcon=(HICON)LoadIcon(HInstance,"MyIcon");
mycpl->szHelpFile[0]='\0';//帮助文档
StrCopy(mycpl->szName,"BCB控制面板演示程式");//在图标下显示的说明文字
StrCopy(mycpl->szInfo,"用BCB研发自己的控制面板程式");// 在控制面板状态栏中显示的说明信息
result=0;
break;
case CPL_DBLCLK://当图标被双击时
ShowMessage("这是个CPL试验程式");
result=0;
break;
case CPL_STOP://当用户关闭自已的程式时产生
result=1;
break;
case CPL_EXIT:// 当控制面板关闭时产生,系统使用FreeLibrary()释放
result=0;
break;
default:
break;
}
return result;
}

  程式解说

  CPL程式的运行流程是基于发送到程式的一系列消息。

  当用户打开“控制面板”的时候,系统将遍历System目录下的任何CPL程式,并给他们传送CPL—INT消息。这时,CPL程式就能够做一些初始化工作,然后返回非零值,假如返零,程式将被终止。假如CPL—INT消息处理完成后,CPL程式将接收到CPL—GETCOUNT消息,此时程式必须返回对话框的数目,一般为1。然后,程式又将收到CPL—NEWINQUIRE消息,此时系统需要CPL程式提供有关信息,如图标、说明文字、帮助文档等,程式必须填充lParam2这个指针指向的信息结构,然后返回0。到这里,控制面板就完成了初始化,显示出各个图标。假如用户双击了某个图标后,这个图标所代表的CPL程式将接收到一个CPL—DBCLICK消息。这时,CPL程式能够显示出对话界面,进行有关操作。当用户完成操作、关闭程式时,必须返回0。当用户关闭“控制面板”,此时CPL程式将接收到CPL—STOP消息,这时就要释放内存资源,做好善后工作,然后返回1。 最后CPL程式将接收到最后一个消息CPL—EXIT,系统将删除各个窗口,并使用FreeLibrary()函数将CPL程式从系统中删除,完成整个流程。一般情况下,我们只需要对CPL—NEWINQUIRE和CPL—DBCLICK这两个消息进行处理,其他的消息只要返回默认值就够了。

  大家只要编译这个CPL项目,并将结果拷贝到Windows\System目录下,然后打开“控制面板”就能够看到成果了。双击图标,程式将弹出一个信息框:“这是个CPL试验程式!"。这样一个CPL程式就完成了。

  假如您想加入更多的功能,只需将CPL—DBCLICK消息进行处理,比如能够显示一个窗口进行交互操作。具体的方法和在DLL中加入窗口的方法相同,因为CPL程式本身就是基于DLL框架制作出来的。下图是笔者做的一个交互窗口:最后,告诉读者一点技巧:想要编译器输出.cpl文档,可在Project|Options...|Application|output settings中将输出扩展名dll改为cpl就行了。将CPL程式拷入Windows\System\目录下后不必打开“控制面板”,直接双击文档就能够打开这个程式了。而在其他目录下是没有作用的。




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS