用BCB研发控制面板程式

2008-02-23 05:37:06来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

前不久,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\目录下后不必打开“控制面板”,直接双击文档就能够打开这个程式了。而在其他目录下是没有作用的。




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 在CB程式中控制Windows关机

下一篇: 动态汉化Windows技术的分析

热门词条
热门标签