使用BCB制作控制面版程序

原创 2001年05月19日 13:08:00

用BCB开发控制面板程序

  前不久,Inprise公司(原Borland公司)正式公布了Delphi 5.0版,其开发向导中支持了“控制面板程序(CPL)”框架的生成,利用它可以快速、方便地开发CPL程序。那么是否能在现有的Borland C++ Builder 4.0中开发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/目录下后不必打开“控制面板”,直接双击文件就可以打开这个程序了。而在其它目录下是没有作用的。

用BCB控件编写TCP/IP通讯程序的基础知识

最近在网上不断的看到有人问如何用BCB的TServerSocket和TClientSocket进行编程的问题,所以决定把我的一些编程经验告诉给大家,让大家能够尽快的掌握他们的用法。 首先要讲一下他们...
  • lixingshi
  • lixingshi
  • 2014年11月25日 15:26
  • 1222

NSIS 控制面版显示卸载信息

!define PRODUCT_INSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Install\${PRODUCT_NAME}" Ins...
  • yimengchenxi
  • yimengchenxi
  • 2015年08月24日 13:45
  • 906

BCB如何将应用程序图标写到系统托盘中

 1、新建一个工程,将工程存到目录D:/BCBTray下,并在这个目录下拷入一个icon图标文件,文件名为Icon1.ico,作为本程序的系统托盘处的图标。2、在这个工程中再增加一个窗体Form2,要...
  • moonsbird
  • moonsbird
  • 2009年08月20日 08:38
  • 1428

BCB如何获取.exe所在的路径?

直接上代码: //--------------------------------------------------------------------------- #include #pra...
  • stpeace
  • stpeace
  • 2014年12月14日 00:06
  • 4630

Apache 指定的网络名不再可用 winnt_accept: Asynchronous AcceptEx failed 的解决办法

现象: [Sat Mar 03 13:29:49 2007] [warn] (OS 64)指定的网络名不再可用。 :winnt_accept: Asynchronous AcceptEx faile...
  • webxscan
  • webxscan
  • 2015年11月25日 23:45
  • 226

BCB中的TListBox---如何将滚动行标控制在最后一行?

BCB中的TListBox很常见, 主要有两种作用: 1. 让用户选择, 程序来感知用于的选择, 并作出反应。 2. 用于动态显示信息等。 下面我们...
  • stpeace
  • stpeace
  • 2015年07月26日 16:35
  • 3261

BCB开发的程序发布注意

  从网络上看到的BCB开发的程序发布注意事项有以下两点,信息来自网络,呵呵  一般,我们这样发布程序:        在prject->Options->Compiler中点击Release,   ...
  • michelsn
  • michelsn
  • 2008年07月24日 16:07
  • 1911

确保一个程序只运行一个实例(BCB,Delphi)

一、通过创建互斥量来判断:  BCB 代码:  //--------------------------------------------------------------------------...
  • favory
  • favory
  • 2008年10月05日 22:52
  • 2709

一个简单的文件夹拷贝函数(BCB)

void CopyDirectory( AnsiString Dest, AnsiString Source )//Dest & Source must be end with // and Exis...
  • wellerweldon
  • wellerweldon
  • 2007年10月24日 15:29
  • 1074

关于在bcb中调用外部程序的用法

1:用system("")运行(简单,像在CMD命令行一样) 2:用WinExec()运行 3:用CreateProcess运行 4:用ShellExecute运行.     1)...
  • a100501102
  • a100501102
  • 2015年01月05日 18:32
  • 842
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用BCB制作控制面版程序
举报原因:
原因补充:

(最多只允许输入30个字)