На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

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;
{
возвращайтесь ВЕРНО;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz