Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Системные цвета


Автор: lorents 16.6.2010, 16:38
Добрый день!
У меня есть некоторые константы, и я бы хотел понять какой цвет куда относится.
Я понимаю, что у меня есть расшифровка на нгл, но для меня это не достаточно, где можно прочитать поподробнее?
В частности меня интересует (на http://img3.immage.de/1606eb1.png обозначены интересующие цвета):
1. Цвет фона объекта Input в включенном состоянии;
2. Цвет фона объекта Input в выключено состоянии;
3. цвет текста;
4. Окантовка объекта Input.

и еще можно узнать какие цвета, используются в http://img2.immage.de/16065462.png?

Код
-- Константы
COLOR_SCROLLBAR = 0; --The Scrollbar colour
COLOR_BACKGROUND = 1; --Colour of the background with no wallpaper
COLOR_ACTIVECAPTION = 2; --Caption of Active Window
COLOR_INACTIVECAPTION = 3; --Caption of Inactive window
COLOR_MENU = 4; --Menu
COLOR_WINDOW = 5; --Windows background
COLOR_WINDOWFRAME = 6; --Window frame
COLOR_MENUTEXT = 7; --Window Text
COLOR_WINDOWTEXT = 8; --3D dark shadow (Win95)
COLOR_CAPTIONTEXT = 9; --Text in window caption
COLOR_ACTIVEBORDER = 10; --Border of active window
COLOR_INACTIVEBORDER = 11; --Border of inactive window
COLOR_APPWORKSPACE = 12; --Background of MDI desktop
COLOR_HIGHLIGHT = 13; --Selected item background
COLOR_HIGHLIGHTTEXT = 14; --Selected menu item
COLOR_BTNFACE = 15; --Button
COLOR_BTNSHADOW = 16; --3D shading of button
COLOR_GRAYTEXT = 17; --Grey text, of zero if dithering is used.
COLOR_BTNTEXT = 18; --Button text
COLOR_INACTIVECAPTIONTEXT = 19; --Text of inactive window
COLOR_BTNHIGHLIGHT = 20; --3D highlight of button
COLOR_2NDACTIVECAPTION = 27; --Uin98 only: 2nd active window color
COLOR_2NDINACTIVECAPTION = 28; --Win95 only: 2nd inactive window color

Автор: Cheloveck 16.6.2010, 20:28
COLOR_WINDOW - текстовое поле
COLOR_BTNFACE - цвет окна (тот же и у неактивного поля)
COLOR_BTNTEXT - цвет текста на кнопке (чекбокс тоже кнопка)

на счёт бордюра не уверен, но наверное
COLOR_ACTIVEBORDER
COLOR_INACTIVEBORDER

Автор: lorents 16.6.2010, 21:02
Cheloveck, 
а можно по порядку, как у меня поставлены вопросы
а просто не соображаю

и можно узнать по статусбару
1. цвет текста
2. цвет окантовки
3. и сам цвет статус бара

Автор: GremlinProg 17.6.2010, 07:56
сомнения можно разрешить так:
Код

TCHAR Buffer[80];
COLORREF Old, New    = RGB( 255, 0, 0 );
INT El    = COLOR_BTNFACE;
//
Old    = ::GetSysColor( El );
::SetSysColors( 1, &El, &New ); 
_stprintf_s( Buffer, TEXT("системный цвет #%i был заменен на #%.2x%.2x%.2x"), El, GetRValue( New ), GetGValue( New ), GetBValue( New ) );
::MessageBox( 0, Buffer, TEXT(""), MB_OK );
::SetSysColors( 1, &El, &Old ); 

в El можно поставить любой индекс из множества COLOR_xxx
этот цвет будет на время заменен красным, пока висит MessageBox, после чего вернется обратно

в это время открывай интересующее приложение и смотри,
если загорелся красный в нужном месте, значит это тот самый индекс,
нет - значит либо это не тот индекс, либо этот цвет вообще не привязан к системной палитре

Автор: lorents 17.6.2010, 13:15
GremlinProg, хитро придумано smile 

эх только одна загвоздка у меня нету C/C++, я для другой программы интересовался

А Вы не могли бы сделать мне мини-приложение со всеми константами если не затруднит
буду очень признателен

или что надо чтобы запустить данный код?

Автор: GremlinProg 17.6.2010, 13:45
пожалуйста,
консолька принимает 2 параметра:
первый - индекс
второй - цвет

сделай ярлык, или несколько ярлыков типа такого: chsysclr.exe 15 0xff
15 - это COLOR_BTNFACE, 0xff - красный

и запускай их поочереди

Автор: GremlinProg 17.6.2010, 13:46
исходник:
Код

#include <windows.h>
#include <tchar.h>

#pragma comment( lib, "user32" )

INT _tmain( INT argc, TCHAR*argv[], TCHAR*envp[] ){
    TCHAR Buffer[80];
    LPCTSTR pszUsage    = TEXT("chsysclr <i> <c>\r\n i - index\r\n c - color\r\n");
    COLORREF Old, New;
    INT Index;
    //
    if( argc < 3 ){
        _tprintf_s( pszUsage );
        return 0;
    }
    if( _stscanf_s( argv[1], TEXT("%i"), &Index ) != 1 ){
        _tprintf_s( pszUsage );
        return 0;
    }
    if( _stscanf_s( argv[2], TEXT("%i"), &New ) != 1 ){
        _tprintf_s( pszUsage );
        return 0;
    }
    Old    = ::GetSysColor( Index );
    ::SetSysColors( 1, &Index, &New ); 
    _stprintf_s( Buffer, TEXT("системный цвет #%i был заменен на #%.2x%.2x%.2x"), Index, GetRValue( New ), GetGValue( New ), GetBValue( New ) );
    ::MessageBox( 0, Buffer, TEXT(""), MB_OK );
    ::SetSysColors( 1, &Index, &Old );
    return 0;
}

Автор: lorents 17.6.2010, 13:50
GremlinProg, Мой спаситель, программа просто прелесть smile 
спасибо!!! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)