Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
#1

Как изменить цвет окна приложения? - C++

08.06.2008, 14:17. Просмотров 1683. Ответов 4
Метки нет (Все метки)

Как изменить цвет окна SDI приложения? Я хочу заменить стандартный белый цвет на тот серый, в который окрашиваются, например, диалоговые окна в Windows. Как сделать, чтобы этот цвет менялся вместе с изменением настроек Windows?

Заранее спасибо,
Дмитрий.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2008, 14:17     Как изменить цвет окна приложения?
Посмотрите здесь:
C++ Как изменить цвет границы окна
Какой функцией изменить цвет фона окна windows bgi? C++
Как изменить цвет вывода в С++? C++
C++ Как изменить цвет фона в ListBox'е?
C++ Как изменить заголовок консольного окна
Как изменить размер окна, а не только буфера C++
Как изменить размер окна и убрать ползунок C++
Как изменить размер окна cmd.exe C++
C++ Как узнать размер окна консольного приложения
Изменить цвет C++
Изменить цвет текста в консоли C++
Получить снимок клиентской области окна и цвет пикселя C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vita
Сообщений: n/a
08.06.2008, 18:14     Как изменить цвет окна приложения? #2
Я точно не знаю, но цвета имеют имена в winuser.h:
Код
#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
Как их послать окну во время инициализации или во время создания, ты, наверное, знаешь, т.е. вместо COLOR_WINDOW по умолчанию используй COLOR_BTNFACE.
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
10.06.2008, 09:45  [ТС]     Как изменить цвет окна приложения? #3
Честно говоря, не знаю. Учусь!
Пожалуйста, объясните поподробнее: куда это вставлять и каким макаром?
Vita
Сообщений: n/a
10.06.2008, 10:31     Как изменить цвет окна приложения? #4
WM_SYSCOLORCHANGE сообщение посылается всем top-most окнам при изменении системной палитры цветов.
WM_CTLCOLOR сообщение посылается в функцию окна диалога при запросе цвета конкретного контрола на диалоге. Иногда и конкретные WM_CTLCOLORMSGBOX, WM_CTLCOLOREDIT, WM_CTLCOLORLISTBOX, WM_CTLCOLORBTN, WM_CTLCOLORDLG, WM_CTLCOLORSCROLLBAR, WM_CTLCOLORSTATIC и т.д.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
static HBRUSH WndDlgProcCTLCOLOR( HWND hwnd, HDC hdc, HWND hwndChild, int type )
{
    BOOL i;
    switch( type )
    {
 
    case CTLCOLOR_EDIT:
    case CTLCOLOR_LISTBOX:
 
        if( (i = IsWindowEnabled( hwndChild )) != 0 )
            SetTextColor( hdc, GetSysColor( COLOR_WINDOWTEXT ) );
        else
        {
            WORD vrsion;
            vrsion = LOWORD( GetVersion() );
            if( LOBYTE( vrsion ) >= 3 && HIBYTE( vrsion ) > 20 )
                SetTextColor( hdc, GetSysColor( COLOR_GRAYTEXT ) );
            else
                SetTextColor( hdc, GetSysColor( COLOR_BTNTEXT ) );
        }
        SetBkColor( hdc, GetSysColor( (i) ? COLOR_WINDOW : COLOR_BTNFACE ) );
        return (i) ? ci_brushWindow : ci_brushBackGround;
 
    case CTLCOLOR_BTN:
    case CTLCOLOR_STATIC:
    case CTLCOLOR_MSGBOX:
    case CTLCOLOR_DLG:
 
        if( IsWindowEnabled( hwndChild ) )
            SetTextColor( hdc, GetSysColor( COLOR_WINDOWTEXT ) );
        else
        {
            WORD vrsion;
            vrsion = LOWORD( GetVersion() );
            if( LOBYTE( vrsion ) >= 3 && HIBYTE( vrsion ) > 20 )
                SetTextColor( hdc, GetSysColor( COLOR_GRAYTEXT ) );
            else
                SetTextColor( hdc, GetSysColor( COLOR_BTNTEXT ) );
        }
        SetBkColor( hdc, GetSysColor( COLOR_BTNFACE ) );
        return ci_brushBackGround;
 
    }
 
    #if defined( __NT__ )
        return (HBRUSH) DefDlgProc( hwnd, GET_WM_CTLCOLOR_MSG(type), (WPARAM) hdc, (LPARAM) hwndChild );
 
    #else
 
        return (HBRUSH) DefDlgProc( hwnd, WM_CTLCOLOR, (WPARAM) hdc, MAKELPARAM(hwndChild, type) );
 
    #endif
 
}
static BOOL WndDlgProcCOLORCHANGE( HWND hwnd, BOOL reassign )
{
    if( ci_brushBackGround )
        DeleteObject( ci_brushBackGround );
    ci_brushBackGround = (reassign) ? CreateSolidBrush( GetSysColor( COLOR_BTNFACE ) ) : NULL;
 
    if( ci_brushWindow )
        DeleteObject( ci_brushWindow );
    ci_brushWindow = (reassign) ? CreateSolidBrush( GetSysColor( COLOR_WINDOW ) ) : NULL;
 
    return FALSE;
}
Которые вызываются при обработке сообщений в функции окна-диалога:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        switch ( msg )
        {
 
        case WM_CREATE:         // ex2crea.ci
 
            WndDlgProcINITMENUPOPUP( hWnd, GetSystemMenu( hWnd, FALSE ), 0, TRUE );
            WndDlgProcCOLORCHANGE( hWnd, TRUE );
            break;
 
    #if defined( __NT__ )
 
        case WM_CTLCOLOREDIT: // ex2ctlc.ci
 
            stopit = TRUE;
            ret = (LRESULT) WndDlgProcCTLCOLOR(
                hWnd, (HDC) wParam, (HWND) lParam, CTLCOLOR_EDIT );
            break;
 
        case WM_CTLCOLORLISTBOX: // ex2ctlc.ci
 
            stopit = TRUE;
            ret = (LRESULT) WndDlgProcCTLCOLOR(
                hWnd, (HDC) wParam, (HWND) lParam, CTLCOLORLISTBOX );
            break;
 
        case WM_CTLCOLORBTN: // ex2ctlc.ci
 
            stopit = TRUE;
            ret = (LRESULT) WndDlgProcCTLCOLOR(
                hWnd, (HDC) wParam, (HWND) lParam, CTLCOLORBTN );
            break;
simplepilot
1 / 1 / 0
Регистрация: 22.07.2007
Сообщений: 366
16.06.2008, 13:22     Как изменить цвет окна приложения? #5
А что всяки SetBkColor и SetBkMode не работают при обработке WM_PAINT ?
Yandex
Объявления
16.06.2008, 13:22     Как изменить цвет окна приложения?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru