创建控制面板应用程序

【勇芳软件工作室】汉化HomePreviousNext

虽然控制面板应用程序可能支持多个对话框,但它通过单个CPlApplet功能处理所有请求。在以下示例中,“控制面板”应用程序支持三个对话框,可让用户设置连接到计算机的组件立体声系统的首选项。该示例使用包含三个结构的应用程序定义的StereoApplets数组,每个对应于一个对话框。每个结构都包含CPL_INQUIRE消息所需的所有信息,以及CPL_DBLCLK消息所需的对话框模板和对话框过程。该代码演示了如何填充StereoApplets数组中的结构。

#define NUM_APPLETS 3

typedef struct tagAppletsenen

{

int icon; //图标资源标识符

int namestring; // name-string资源标识符

int descstring; // description-string资源标识符

int dlgtemplate; //对话框模板资源标识符

DLGPROC dlgfn; //对话框程序

} APPLETS;

APPLETS StereoApplets[NUM_APPLETS] =

{

AMP_ICON,AMP_NAME,AMP_DESC,AMP_DLG,AmpDlgProc,

TUNER_ICON,TUNER_NAME,TUNER_DESC,TUNER_DLG,TunerDlgProc,

TAPE_ICON,TAPE_NAME,TAPE_DESC,TAPE_DLG,TapeDlgProc,

};

HANDLE hinst = NULL;

LONG CALLBACK CPlApplet(hwndCPL,uMsg,lParam1,lParam2)

HWND hwndCPL; //控制面板窗口的句柄

UINT uMsg; // 信息

LPARAM lParam1; //第一个消息参数

LPARAM lParam2; //第二个消息参数

{

int i;

LPCPLINFO lpCPlInfo;

i = (int) lParam1;

开关(uMsg){

case CPL_INIT: //第一个消息,发送一次

hinst = GetModuleHandle("ecp.cpl");

return TRUE;

case CPL_GETCOUNT: //第二个消息,发送一次

return NUM_APPLETS;

break;

case CPL_INQUIRE: //第三条消息,每次应用发送一次

lpCPlInfo = (LPCPLINFO) lParam2;

lpCPlInfo->lData = 0;

lpCPlInfo->idIcon = StereoApplets[i].icon;

lpCPlInfo->idName = StereoApplets[i].namestring;

lpCPlInfo->idInfo = StereoApplets[i].descstring;

break;

case CPL_DBLCLK: //应用程序图标双击

DialogBox(hinst,

MAKEINTRESOURCE(StereoApplets[i].dlgtemplate),

hwndCPL, StereoApplets[i].dlgfn);

break;

case CPL_STOP: //在CPL_EXIT之前每个应用程序发送一次

break;

case CPL_EXIT: //在FreeLibrary被调用之前发送一次

break;

默认:

break;

}

return 0;

}