65.9K
CodeProject 正在变化。 阅读更多。
Home

创建一个配置面板小程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.08/5 (6投票s)

2002年10月12日

4分钟阅读

viewsIcon

92877

downloadIcon

2013

逐步创建控制面板小程序的教程。

我已尽力以最简单的方式解释了如何创建控制面板小程序。

从模板向导中创建一个新的.dll类型项目。我们将其命名为ConfigPanel

Project Type

在第二步中选择“使用MFC的常规DLL”。

Dll Type

模板将生成以下类:

ConfigPanel

一个派生自CWinApp的类。

ConfigPanel.def

导出定义文件,显示导出的符号。

添加 CPlApplet函数。此函数是CPL(控制面板应用程序)的入口点。

LRESULT APIENTRY CPlApplet
(
    HWND    aHwndCPL_in,    // Handle to Configuration Panel window.
    UINT    aUMsg_in,        // CPL message.
    LPARAM    aLParam1_in,    // First message parameter.
    LPARAM  aLParam2_in    // Second message parameter.
) 

aUMsg_in

此参数填充了CPL相关的消息,例如:

//                       | Return            | Return
//    CPL message        | if successfully   | if not successfully
//    -------------------+-------------------+--------------------
//    CPL_INIT           | nonzero           | zero
//    CPL_GETCOUNT       | nonzero           | zero
//    CPL_NEWINQUIRE     | zero              | nonzero
//    CPL_SELECT         | zero              | nonzero
//    CPL_DBLCLK         | zero              | nonzero
//    CPL_STOP           | zero              | nonzero
//    CPL_EXIT           | zero              | nonzero

CPL_INIT

将CPL_INIT消息发送给控制面板应用程序,提示其执行全局初始化,特别是内存分配。

返回值:如果初始化成功,控制面板应用程序应返回非零值。否则,应返回零。如果应用程序返回零,则控制应用程序将结束通信并释放包含控制面板应用程序的DLL。

备注:因为这是控制面板应用程序可以发出错误条件信号的唯一方式,所以应用程序应响应此消息分配内存。在通过LoadLibrary()加载包含该应用程序的DLL后,将立即发送此消息。

CPL_GETCOUNT

将CPL_GETCOUNT消息发送给控制面板应用程序,以检索应用程序支持的对话框数量。

返回值:控制面板应用程序应返回其支持的对话框数量。

备注:此消息在CPL_INIT消息之后立即发送。

CPL_NEWINQUIRE

将CPL_NEWINQUIRE消息发送给控制面板应用程序,以请求有关应用程序支持的某个对话框的信息。

参数:aLParam1_in的值。指定对话框编号。aLParam2_in的值。指定 NEWCPLINFO 结构体的地址。控制面板应用程序应在此结构体中填充有关对话框的信息。

返回值:如果控制面板应用程序成功处理此消息,则应返回零。

备注:此消息为应用程序支持的每个对话框发送一次。在CPL_GETCOUNT消息之后立即发送。收到此消息后,应用程序可以初始化对话框。如果应用程序需要分配内存,则应响应CPL_INIT消息进行分配。

CPL_SELECT

当用户选择应用程序支持的对话框图标时,将CPL_SELECT消息发送给控制面板应用程序。aLParam1_in的值。指定对话框编号。aLParam2_in的值。指定控制面板应用程序在对话框的CPLINFO 或 NEWCPLINFO 结构体的lData成员中加载的值。应用程序在响应CPL_INQUIRE 或 CPL_NEWINQUIRE 消息时加载lData成员。

返回值:如果控制面板应用程序成功处理此消息,则应返回零。

CPL_DBLCLK

当用户双击应用程序支持的对话框图标时,将CPL_DBLCLK消息发送给控制面板应用程序。

参数:aLParam1_in的值。指定对话框编号。aLParam2_in的值。指定控制面板应用程序在对话框的CPLINFO 或 NEWCPLINFO 结构体的lData成员中加载的值。应用程序在响应CPL_INQUIRE 或 CPL_NEWINQUIRE 消息时加载lData成员。

返回值:如果控制面板应用程序成功处理此消息,则应返回零。

备注:响应此消息,控制面板应用程序必须显示相应的对话框。

CPL_STOP

当控制控制面板应用程序的应用程序关闭时,将CPL_STOP消息发送给每个对话框一次。

参数:aLParam1_in的值。指定对话框编号。aLParam2_in的值。指定控制面板应用程序在对话框的CPLINFO 或 NEWCPLINFO 结构体的lData成员中加载的值。应用程序在响应CPL_INQUIRE 或 CPL_NEWINQUIRE 消息时加载lData成员。

返回值:控制面板应用程序应返回其支持的对话框数量。

备注:响应此消息,控制面板应用程序必须为给定的对话框执行清理操作。

CPL_EXIT

在控制应用程序释放包含该应用程序的DLL之前,将CPL_EXIT消息发送给控制面板应用程序一次。

返回值:控制面板应用程序应返回其支持的对话框数量。

备注:此消息在发送最后一个CPL_STOP消息之后发送。响应此消息,控制面板应用程序必须释放其已分配的所有内存并执行全局级别的清理。

就是这样,您的应用程序现在就准备好了,但在那之前,不要忘记在导出定义文件中添加CPlApplet PRIVATE,否则回调将不会被调用。:)

编译后,您将得到一个.dll文件。将其重命名为.cpl并将其复制到Windows目录,您将在配置面板中看到您的应用程序。

演示项目在双击时会打开notepad.exe,您可以选择在那里运行任何exe,只需提供路径,或者您可以创建对话框作为.cpl本身的一部分。

源目录中有一个MakeCpl.bat文件,它会将.dll复制到System32目录并将其重命名为.cpl。

希望这个主题对您有所帮助……

如果您有任何意见或建议,请给我回信。

© . All rights reserved.