Файл: ...\Samples\Solution\Winapi\Syscolor.scx

Этот пример использует две функции Windows API - первую для получения установок системного цвета (GetSysColor) и затем вторую для сброса системных цветов в новые значения (SetSysColors). Два из трех параметров, требуемых SetSysColors являются указателями на родные массивы языка C.

GetSysColor

Функция GetSysColor принимает целочисленный параметр, число в диапазоне от 0 до 18, и возвращает DWORD (32-битное целое число без знака), указывающее текущую установку цвета.

 CopyCode imageСкопировать код
DWORD GetSysColor(
    int nIndex    // элемент отображения
   );   

nIndex является значением, представляющим область интерфейса, определенную в приведенном ниже списке:

 CopyCode imageСкопировать код
#define COLOR_SCROLLBAR         0
#define COLOR_BACKGROUND        1
#define COLOR_ACTIVECAPTION     2
#define COLOR_INACTIVECAPTION   3
#define COLOR_MENU              4
#define COLOR_WINDOW            5
#define COLOR_WINDOWFRAME       6
#define COLOR_MENUTEXT          7
#define COLOR_WINDOWTEXT        8
#define COLOR_CAPTIONTEXT       9
#define COLOR_ACTIVEBORDER      10
#define COLOR_INACTIVEBORDER    11
#define COLOR_APPWORKSPACE      12
#define COLOR_HIGHLIGHT         13
#define COLOR_HIGHLIGHTTEXT     14
#define COLOR_BTNFACE           15
#define COLOR_BTNSHADOW         16
#define COLOR_GRAYTEXT          17
#define COLOR_BTNTEXT           18
#define COLOR_INACTIVECAPTIONTEXT 19
#define COLOR_BTNHIGHLIGHT      20

#if(WINVER >= 0x0400)
#define COLOR_3DDKSHADOW        21
#define COLOR_3DLIGHT           22
#define COLOR_INFOTEXT          23
#define COLOR_INFOBK            24

#define COLOR_DESKTOP           COLOR_BACKGROUND
#define COLOR_3DFACE            COLOR_BTNFACE
#define COLOR_3DSHADOW          COLOR_BTNSHADOW
#define COLOR_3DHIGHLIGHT       COLOR_BTNHIGHLIGHT
#define COLOR_3DHILIGHT         COLOR_BTNHIGHLIGHT
#define COLOR_BTNHILIGHT        COLOR_BTNHIGHLIGHT
#endif /* WINVER >= 0x0400 */

SetSysColors

Функция SetSysColors требует три параметра: число элементов в двух массивах и адреса двух массивов.

 CopyCode imageСкопировать код
BOOL WINAPI SetSysColors(
    int cElements,                  // число изменяемых элементов 
    CONST INT *lpaElements,         // адрес массива элементов 
    CONST COLORREF *lpaRgbValues    // адрес массива RGB-значений  
   );   

Вызов SetSysColors в Visual FoxPro

Приведенный ниже код извлечен из метода щелчка по командной кнопке - cmdSetSysColors.Click:

 CopyCode imageСкопировать код
DECLARE INTEGER SetSysColors IN win32api INTEGER, STRING, STRING

Собираем элементы первого массива в символьную переменную.

 CopyCode imageСкопировать код
cElements = ""
FOR i = 0 TO 18
   cElements = cElements + THISFORM.DecToHex(i)
ENDFOR

Собираем элементы второго массива в символьную переменную. Сканируемый курсор заполнен значениями GetSysColor в событии Init формы.

 CopyCode imageСкопировать код
cColors = ""
SCAN
   cColors = cColors + THISFORM.DecToHex(INT(color))
ENDSCAN

=SetSysColors(18,cElements,cColors)

Смотрите также