支持配置对话框

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

大多数屏幕保护程序提供一个配置对话框,让用户指定自定义数据,如独特颜色,绘制速度,线条粗细,字体等。要支持配置对话框,应用程序必须提供对话框模板,并且还必须支持ScreenSaverConfigureDialog功能。以下是示例应用程序的对话框模板。

DLG_SCRNSAVECONFIGURE DIALOG 6, 18, 160, 63
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION“屏幕保护程序示例”
FONT 8,“MS Shell Dlg”
BEGIN
GROUPBOX“重绘速度”,101,0,6,98,40
SCROLLBAR ID_SPEED, 5, 31, 89, 10
LTEXT“Fast”,103,6,21,20,8
LTEXT“慢”,104,75,21,20,8
PUSHBUTTON "OK", ID_OK, 117, 10, 40, 14
PUSHBUTTON“取消”,ID_CANCEL,117,32,40,14
END

您必须使用十进制值2003定义用于标识对话框模板的常量,如以下示例所示。

#define DLG_SCRNSAVECONFIGURE 2003

以下示例显示了示例应用程序中的ScreenSaverConfigureDialog功能。

#define MINVEL 1 / *最小重绘速度值* /

#define MAXVEL 10 / *最大重绘速度值* /

#define DEFVEL 5 / *默认重绘速度值* /

LONG lSpeed = DEFVEL; /* redraw-speed variable */

extern HINSTANCE hMainInstance; /* screen saver instance handle */

CHAR szAppName [80]; / *的.ini段名* /

CHAR szTemp [20]; / *临时字符数组* /

CHAR szRedrawSpeed[] = "Redraw Speed"; /* .INI speed entry */

BOOL WINAPI ScreenSaverConfigureDialog(hDlg, message, wParam, lParam)

HWND hDlg;

UINT message;

DWORD wParam;

LONG lParam;

{

static HWND hSpeed; /* handle of speed scroll bar */

static HWND hOK; /* handle of OK push button */

开关(消息)

{

case WM_INITDIALOG:

/ *从.RC文件中检索应用程序名称。*/

LoadString(hMainInstance, idsAppName, szAppName, 40);

/ *检索.INI(或注册表)文件名。*/

LoadString(hMainInstance,idsIniFile,szIniFile,

MAXFILELEN);

/ *从注册表检索任何重绘数据。*/

lSpeed = GetPrivateProfileInt(szAppName, szRedrawSpeed,

DEFVEL, szIniFile);

/*

*如果初始化文件不包含条目

*对于此屏幕保护程序,请使用默认值。

*/

if(lSpeed > MAXVEL || lSpeed < MINVEL)

lSpeed = DEFVEL;

/ *初始化重绘速度滚动条控件。*/

hSpeed = GetDlgItem(hDlg, ID_SPEED);

SetScrollRange(hSpeed, SB_CTL, MINVEL, MAXVEL, FALSE);

SetScrollPos(hSpeed, SB_CTL, lSpeed, TRUE);

/ *检索OK按钮控件的句柄。*/

hOK = GetDlgItem(hDlg, ID_OK);

return TRUE;

case WM_HSCROLL:

/*

*进程滚动条输入,调整lSpeed

*值适当。

*/

开关(LOWORD(wParam))

{

case SB_PAGEUP:

--lSpeed;

break;

case SB_LINEUP:

--lSpeed;

break;

case SB_PAGEDOWN:

++lSpeed;

break;

case SB_LINEDOWN:

++lSpeed;

break;

case SB_THUMBPOSITION:

lSpeed = HIWORD(wParam);

break;

case SB_BOTTOM:

lSpeed = MINVEL;

break;

case SB_TOP:

lSpeed = MAXVEL;

break;

case SB_THUMBTRACK:

case SB_ENDSCROLL:

return TRUE;

break;

}

if ((int) lSpeed <= MINVEL)

lSpeed = MINVEL;

if ((int) lSpeed >= MAXVEL)

lSpeed = MAXVEL;

SetScrollPos((HWND) lParam, SB_CTL, lSpeed, TRUE);

break;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case ID_OK:

/*

*将当前的重绘速度变量写入

* .ini文件。

*/

wsprintf(szTemp, "%ld", lSpeed);

WritePrivateProfileString(szAppName,szRedrawSpeed,

szTemp, szIniFile);

case ID_CANCEL:

EndDialog(hDlg, LOWORD(wParam) == ID_OK);

return TRUE;

}

}

return FALSE;

}

除了提供对话框模板和支持ScreenSaverConfigureDialog功能外,应用程序还必须支持RegisterDialogClasses功能。此函数注册屏幕保护程序所需的任何非标准窗口类。因为示例应用程序在其对话框过程中仅使用标准窗口类,所以该函数只返回TRUE,如以下示例所示。

BOOL WINAPI RegisterDialogClasses(hInst)

HANDLE hInst;

{

return TRUE;

}