怎样开发控制面板程序(CPL程序)

本文介绍了如何开发CPL程序,即控制面板程序。通过创建DLL工程并实现CPlApplet()函数,处理CPL_INIT、CPL_GETCOUNT等消息,实现控制面板的图标显示和用户交互。编译后的CPL程序复制到System目录下,即可在控制面板中看到效果。
怎样开发控制面板程序(CPL程序)
    CPL程序是动态链接库(DLL)的一种变形,只不过扩展名为.cpl、入口函数为CPlApplet()而不是DllMain()罢了,编写起来其实很简单。
先创建一个dll工程,写下如下代码

#include <windows.h>
#include <cpl.h>
#include <cplext.h>
extern "C" __declspec(dllexport) long __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2);

long __declspec(dllexport) __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2)
{
    LPNEWCPLINFO cpl;//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://第三个信息,当控制面板查询时产生
        cpl=LPNEWCPLINFO(lParam2);// 将lParam2中的指针传给mycpl
        cpl->dwSize=sizeof(NEWCPLINFO);
        cpl->dwFlags=0;//标志变量 一般设为0
        cpl->dwHelpContext=0;//帮助句柄一般设为0
        cpl->lData=0;
        cpl->hIcon=(HICON)LoadIcon(NULL,IDI_WINLOGO);
        cpl->szHelpFile[0]='/0';//帮助文件
        strcpy(cpl->szName,"控制面板演示程序");//在图标下显示的说明文字
        strcpy(cpl->szInfo,"开发自己的控制面板程序");// 在控制面板状态栏中显示的说明信息
        result=0;
        break;
    case CPL_DBLCLK://当图标被双击时
        MessageBox(hwndCPL,"这是一个CPL试验程序","你好",MB_OK);
        result=0;
        break;
    case CPL_STOP://当用户关闭自已的程序时产生
        result=1;
        break;
    case CPL_EXIT://当控制面板关闭时产生,系统使用FreeLibrary()释放
        result=0;
        break;
    default:
        break;
    }
    return result;
}

    编译成一个dll文件。

  程序说明:

  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(System32)目录下,然后打开“控制面板”就可以看到成果了。双击图标,程序将弹出一个信息框:“这是一个CPL试验程序!"。这样一个CPL程序就完成了。也可不必到控制面板里来打开,直接点击右键“用控制面板打开”,就可运行程序。你也可以用编程的方法来运行。WinExec("c:/windows/system32/control.exe MyCpl.cpl", SW_NORMAL);


    如果大家用BCB开发的话,还得加dll入口函数。即下面的代码。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值