|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Supporting the Configuration Dialog Box
Most screen savers provide a configuration dialog box to let the user specify customization data such as unique colors, drawing speeds, line thicknesses, fonts, and so on. To support the configuration dialog box, the application must provide a dialog box template and must also support the ScreenSaverConfigureDialog function. Following is the dialog box template for the sample application.
DLG_SCRNSAVECONFIGURE DIALOG 6, 18, 160, 63 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sample Screen-Saver Setup" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Redraw Speed", 101, 0, 6, 98, 40 SCROLLBAR ID_SPEED, 5, 31, 89, 10 LTEXT "Fast", 103, 6, 21, 20, 8 LTEXT "Slow", 104, 75, 21, 20, 8 PUSHBUTTON "OK", ID_OK, 117, 10, 40, 14 PUSHBUTTON "Cancel", ID_CANCEL, 117, 32, 40, 14 END
You must define the constant used to identify the dialog box template by using the decimal value 2003, as in the following example.
#define DLG_SCRNSAVECONFIGURE 2003
The following example shows the ScreenSaverConfigureDialog function found in the sample application.
#define MINVEL 1 /* minimum redraw-speed value */ #define MAXVEL 10 /* maximum redraw-speed value */ #define DEFVEL 5 /* default redraw-speed value */ LONG lSpeed = DEFVEL; /* redraw-speed variable */ extern HINSTANCE hMainInstance; /* screen saver instance handle */ CHAR szAppName[80]; /* .INI section name */ CHAR szTemp[20]; /* temporary array of characters */
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 */ switch(message) { case WM_INITDIALOG: /* Retrieve the application name from the .RC file. */ LoadString(hMainInstance, idsAppName, szAppName, 40);
/* Retrieve the .INI (or registry) filename. */ LoadString(hMainInstance, idsIniFile, szIniFile, MAXFILELEN); /* Retrieve any redraw-speed data from the registry. */ lSpeed = GetPrivateProfileInt(szAppName, szRedrawSpeed, DEFVEL, szIniFile); /* * If the initialization file does not contain an entry * for this screen saver, use the default value.
*/ if(lSpeed > MAXVEL || lSpeed < MINVEL) lSpeed = DEFVEL; /* Initialize the redraw-speed scroll bar control. */ hSpeed = GetDlgItem(hDlg, ID_SPEED); SetScrollRange(hSpeed, SB_CTL, MINVEL, MAXVEL, FALSE); SetScrollPos(hSpeed, SB_CTL, lSpeed, TRUE); /* Retrieve a handle of the OK push button control. */ hOK = GetDlgItem(hDlg, ID_OK);
return TRUE; case WM_HSCROLL: /* * Process scroll bar input, adjusting the lSpeed * value as appropriate. */ switch (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: /* * Write the current redraw-speed variable to * the .INI file. */ wsprintf(szTemp, "%ld", lSpeed); WritePrivateProfileString(szAppName, szRedrawSpeed, szTemp, szIniFile); case ID_CANCEL: EndDialog(hDlg, LOWORD(wParam) == ID_OK);
return TRUE; } } return FALSE; }
In addition to providing the dialog box template and supporting the ScreenSaverConfigureDialog function, an application must also support the RegisterDialogClasses function. This function registers any nonstandard window classes required by the screen saver. Because the sample application used only standard window classes in its dialog box procedure, this function simply returns TRUE, as in the following example.
BOOL WINAPI RegisterDialogClasses(hInst) HANDLE hInst; { return TRUE; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Опорный Диалоговый Ящик Конфигурации
Наиболее экранные спасатели обеспечивают диалогового блока конфигурации, чтобы позволять, чтобы пользователь определяет данные настройки как например, уникальные цвета, рисующие скорости, толщину строки, шрифтов, и так далее. Чтобы поддерживать диалогового блока конфигурации, приложение должно обеспечить диалоговый шаблон блока и должно также поддержать функцию ScreenSaverConfigureDialog. Следующее является диалоговым шаблоном блока для приложения образца.
ДИАЛОГ DLG_SCRNSAVECONFIGURE 6, 18, 160, 63 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU ЗАГОЛОВОК "Установки Sample Screen-Saver" ШРИФТ 8, "МС Shell Dlg" НАЧИНАЕТСЯ GROUPBOX "ОБНОВЛЕНИЕ изображения Скорости", 101, 0, 6, 98, 40 SCROLLBAR ID_SPEED, 5, 31, 89, 10 LTEXT "Быстро", 103, 6, 21, 20, 8 LTEXT "Медленный", 104, 75, 21, 20, 8 КНОПОК "OK", ID_OK, 117, 10, 40, 14 КНОПОК "Отмены", ID_CANCEL, 117, 32, 40, 14 КОНЦОВ
Вы должны определить константу использованную, чтобы идентифицировать диалоговый шаблон блока используя десятичную величину 2003, как в следующем примере.
#define DLG_SCRNSAVECONFIGURE 2003
Следующий пример показывает функцию ScreenSaverConfigureDialog обнаруженную в приложении образца.
#define MINVEL 1 /* МИНИМАЛЬНАЯ перерисовывать-скоростная величина */ #define MAXVEL 10 /* максимальная перерисовывать-скоростная величина */ #define DEFVEL 5 /* по умолчанию перерисовывать-скоростная величина */ ДОЛГО (ДЛИНОЙ) lSpeed = DEFVEL; /* перерисовывать-скоростная переменная */ extern hMainInstance HINSTANCE; /* ручка примера экранного спасателя */ СИМВОЛ szAppName[80]; /* имя секции .INI */ CHAR szTemp[20]; /* временный массив символов */
СИМВОЛ szRedrawSpeed[] = "Обновление изображения Скорости"; /* скоростной вход .INI */ BOOL WINAPI ScreenSaverConfigureDialog(hDlg, СООБЩЕНИЕ, wParam, lParam) HWND hDlg; СООБЩЕНИЕ UINT; DWORD wParam; ДОЛГО (ДЛИНОЙ) lParam; { статический HWND hSpeed; /* ручка скорости перемещает зону */ статический HWND hOK; /* ручка кнопки OK */ ключ(сообщение) { случай WM_INITDIALOG: /* Извлеките прикладное имя из file. .RC */ LoadString(hMainInstance, idsAppName, szAppName, 40);
/* Извлеките .INI filename. (или регистрация) */ LoadString(hMainInstance, idsIniFile, szIniFile, MAXFILELEN); /* Извлеките любые перерисовывать-скоростные данные из registry. */ lSpeed = GetPrivateProfileInt(szAppName, szRedrawSpeed, DEFVEL, szIniFile); /* * Если файл инициализации не содержит вход * для этого экранного спасателя, используйте значение по умолчанию.
*/ если(lSpeed > MAXVEL || lSpeed < MINVEL) lSpeed = DEFVEL; /* Инициализируйте обновление изображения-скорость перемещать зону control. */ hSpeed = GetDlgItem(hDlg, ID_SPEED); SetScrollRange(hSpeed, SB_CTL, MINVEL, MAXVEL, FALSE); SetScrollPos(hSpeed, SB_CTL, lSpeed, ИСТИНА); /* Извлеките ручку кнопки OK control. */ hOK = GetDlgItem(hDlg, ID_OK);
возвращайтесь ВЕРНО; случай WM_HSCROLL: /* * Процесс перемещает ввод зоны, установки lSpeed * величина как подходящий. */ ключ (LOWORD(wParam)) { случай SB_PAGEUP: --lSpeed; прерывание; случай SB_LINEUP: --lSpeed; прерывание; случай SB_PAGEDOWN:
++lSpeed; прерывание; случай SB_LINEDOWN: ++lSpeed; прерывание; случай SB_THUMBPOSITION: lSpeed = HIWORD(wParam); прерывание; случай SB_BOTTOM: lSpeed = MINVEL; прерывание; случай SB_TOP: lSpeed = MAXVEL;
прерывание; случай SB_THUMBTRACK: случай SB_ENDSCROLL: обратная ИСТИНА; прерывание; } если ((int) lSpeed <= MINVEL) lSpeed = MINVEL; если ((int) lSpeed >= MAXVEL) lSpeed = MAXVEL; SetScrollPos((HWND) lParam, SB_CTL, lSpeed, ИСТИНА); прерывание; случай WM_COMMAND:
ключ(LOWORD(wParam)) { случай ID_OK: /* * Запишите текущую перерисовывать-скоростную переменную, чтобы * файл .INI. */ wsprintf(szTemp, "%ld", lSpeed); WritePrivateProfileString(szAppName, szRedrawSpeed, szTemp, szIniFile); случай ID_CANCEL: EndDialog(hDlg, LOWORD(wParam) == ID_OK);
возвращайтесь ВЕРНО; } } обратная ЛОЖЬ; }
Дополнительно к обеспечению диалогового шаблона блока и поддерживая функцию ScreenSaverConfigureDialog, приложение должно также поддержать функцию RegisterDialogClasses. Эта функция регистрирует любые нестандартные классы окна требовавшиеся экранным спасателем. Поскольку приложение образца использовало только стандартные классы окна в своем диалоге боксировать процедуру, эту функциональную ИСТИНУ просто возврата, как в следующем примере.
BOOL WINAPI RegisterDialogClasses РУЧКИ(hInst) hInst; { возвращайтесь ВЕРНО; }
|
|
|
|
| |