使用 CPLApplet
在 Windows Vista 之前,创建控制面板项的方法是创建一个 .dll 文件,并以 .cpl 扩展名命名。 此文件导出了 CPlApplet 函数。 Windows Vista 及更高版本仍支持该方案,本主题将对此进行讨论。 但是,新控制面板项目指南建议采用更简单的方法,将控制面板项目构建为使用任务流布局的 .exe 文件。
当控制面板加载 .dll(或 .cpl)文件时,它会调用 CPlApplet 函数来获取信息,如该文件承载的控制面板项目数,以及每个项目的相关信息。 当项目窗口初始化、打开或关闭时,控制面板也会调用该函数。
当 Windows 首次加载控制面板项目时,它会检索 CPlApplet 函数的地址,随后使用该地址调用函数并向其传递消息。 它可能会发送以下信息。
消息 | 说明 |
---|---|
CPL_DBLCLK | 用于通知 CPlApplet 用户已选择与给定控制面板项目相关的图标。 CPlApplet 应显示指定项目的对话框并执行任何用户指定的任务。 CPlApplet lParam1 参数是一个整数,表示控制面板项目从零开始的索引。 lParam2 参数是 CPLINFO 或 NEWCPLINFO 结构中返回的 lpData 指针,该结构位于 CPL_INQUIRE 或 CPL_NEWINQUIRE 消息中。 返回值会被忽略。 |
CPL_EXIT | 在最后一条 CPL_STOP 消息之后、紧接着 Windows 使用 FreeLibrary 函数释放包含控制面板项的 DLL 之前发送。 CPlApplet 应释放任何剩余内存并准备关闭。 返回值会被忽略。 |
CPL_GETCOUNT | 在 CPL_INIT 消息之后发送,以提示 CPlApplet 返回一个数字,该数字将指明它支持多少个子程序。 |
CPL_INIT | 在加载包含控制面板项的 DLL 后立即发送。 该消息提示 CPlApplet 执行初始化程序,包括内存分配。 |
CPL_INQUIRE | 在 CPL_GETCOUNT 消息之后发送,以提示 CPlApplet 提供有关指定子程序的信息。 lParam1 值是一个整数,表示请求获取信息的子程序的从零开始的索引。 CPlApplet 的 lParam2 参数指向 CPLINFO 结构。 返回值会被忽略。 |
CPL_NEWINQUIRE | 在 CPL_GETCOUNT 消息之后发送,以提示 CPlApplet 提供有关指定控制面板项目的信息。 lParam1 值是一个整数,表示请求获取信息的子程序的从零开始的索引。 lParam2 参数是指向 NEWCPLINFO 结构的指针。 CPL_NEWINQUIRE 通常应被忽略。 在 Windows 95、Microsoft Windows NT 4.0 及更高版本的系统上,应用程序应只处理 CPL_INQUIRE,因为使用 CPL_NEWINQUIRE 会降低控制面板的性能。 这是因为无法缓存返回的字符串和图标。 返回值会被忽略。 |
CPL_SELECT | 已过时。 当前版本的 Windows 不会发送此消息。 |
CPL_STARTWPARMS | 用于通知 CPlApplet 用户已选择与给定对话框相关的图标。 CPlApplet 应显示相应的对话框并执行用户指定的任何任务。 此消息与 CPL_DBLCLK 类似,但可能包含一些附加信息。 lParam1 参数是控制面板项目编号,而 lParam2 是一个 LPCTSTR 参数,表示可能需要的任何额外方向。 如果此消息已处理,将返回 TRUE;否则,将返回 FALSE。 此消息适用于版本 5.00 及更高版本的 Shell32.dll。 |
CPL_STOP | 在 Windows 卸载控制面板扩展名之前,为 .cpl 文件中的每个控制面板项目发送一次。 CPlApplet 应释放与 lParam1 中提供的项目编号相关联的任何内存。 lParam2 参数是 CPLINFO 或 NEWCPLINFO 结构中返回的 lpData 指针,该结构位于 CPL_INQUIRE 或 CPL_NEWINQUIRE 消息中。 返回值会被忽略。 |
相关主题