Файл: ...\Samples\Solution\Winapi\Syscolor.scx
Этот пример использует две функции Windows API - первую для получения установок системного цвета (GetSysColor) и затем вторую для сброса системных цветов в новые значения (SetSysColors). Два из трех параметров, требуемых SetSysColors являются указателями на родные массивы языка C.
GetSysColor
Функция GetSysColor принимает целочисленный параметр, число в диапазоне от 0 до 18, и возвращает DWORD (32-битное целое число без знака), указывающее текущую установку цвета.
![]() | |
---|---|
DWORD GetSysColor( int nIndex // элемент отображения ); |
nIndex является значением, представляющим область интерфейса, определенную в приведенном ниже списке:
![]() | |
---|---|
#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 требует три параметра: число элементов в двух массивах и адреса двух массивов.
![]() | |
---|---|
BOOL WINAPI SetSysColors( int cElements, // число изменяемых элементов CONST INT *lpaElements, // адрес массива элементов CONST COLORREF *lpaRgbValues // адрес массива RGB-значений ); |
Вызов SetSysColors в Visual FoxPro
Приведенный ниже код извлечен из метода щелчка по командной кнопке - cmdSetSysColors.Click:
![]() | |
---|---|
DECLARE INTEGER SetSysColors IN win32api INTEGER, STRING, STRING |
Собираем элементы первого массива в символьную переменную.
![]() | |
---|---|
cElements = "" FOR i = 0 TO 18 cElements = cElements + THISFORM.DecToHex(i) ENDFOR |
Собираем элементы второго массива в символьную переменную. Сканируемый курсор заполнен значениями GetSysColor в событии Init формы.
![]() | |
---|---|
cColors = "" SCAN cColors = cColors + THISFORM.DecToHex(INT(color)) ENDSCAN =SetSysColors(18,cElements,cColors) |