用BCB开拓节制面板措施
副标题#e#
前不久,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;
}
#p#副标题#e#
措施讲解
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\目次下后不必打开“节制面板”,直接双击文件就可以打开这个措施了。而在其它目次下是没有浸染的。
以上措施,经老妖试验在Win2000+sp2+CB6下乐成。