Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
1

Создать static таким образом, чтобы его цвет был таким же, как у окна

19.06.2011, 21:14. Показов 2685. Ответов 8
Метки нет (Все метки)

Нужно создать метку таким образом чтобы цвет метки был таким же как у окна.
Код
HWND hLabelFrom = CreateWindow("STATIC", "Исходное число",
		WS_CHILD | WS_VISIBLE , 
		20, 40, 100, 50, window1._hMainWnd, (HMENU)-1, hInstance, NULL);
Затем можно сделать так:
Код
COLORREF Color_myColor = RGB(200,255,200);
	
	SetBkColor((HDC) hLabelFrom,  Color_myColor);
но через HDC это уже какой-то велосипед будет. Можно сделать так, чтобы все свойства окна автоматически наседовались на метку?
P.S. как изменить размер шрифта в элементе?

Добавлено через 5 часов 39 минут
А можно в третьем аргументе через побитовое И присвоить константу, позволяющую унаследовать цвет от главного окна или как-то так?
что-то типа этого, но только чтоб именно цвет главного окна унаследовать можно было

C++
1
2
3
HWND hLabelFrom = CreateWindow("STATIC", "Исходное число",
        WS_CHILD | WS_VISIBLE | COLOR_WINDOW , 
        20, 40, 100, 50, window1._hMainWnd, (HMENU)-1, hInstance, NULL);
Цвет главного окна:
C++
1
HBRUSH myColor = CreateSolidBrush(RGB(200,255,200));
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2011, 21:14
Ответы с готовыми решениями:

Отсортировать массив таким образом, чтобы наибольший элемент был в середине
Дан массив из 9 случайных чисел. Отсортировать его таким образом, чтобы наибольший элемент был в...

Создание потока таким образом, чтобы файл был доступен другим программам
Здравствуйте Я создаю поток для записи в бинарный файл: using (FileStream stream = new...

Сформировать матрицу М таким образом, чтобы элемент с индексами (I, J) был равен двузначному числу
Сформировать матрицу М таким образом, чтобы элемент с индексами (I, J) был равен двузначному числу,...

Переставить строки матрицы таким образом, чтобы первый столбец был упорядочен по возрастанию
При помощи случайных чисел ввести матрицу размером 8x10. Переставить строки матрицы таким образом,...

8
Brainsbreaker
894 / 371 / 51
Регистрация: 01.02.2011
Сообщений: 1,587
19.06.2011, 22:33 2
Цитата Сообщение от Dimarik__ Посмотреть сообщение
А можно в третьем аргументе через побитовое И присвоить константу
Конечно же нет, что это будет?

Цитата Сообщение от Dimarik__ Посмотреть сообщение
Можно сделать так, чтобы все свойства окна автоматически наследовались на метку?
Похоже на SetSysColors.
0
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
26.06.2011, 20:19 3
Для того, чтобы цвет метки был таким же, как у его родительского окна, в процедуре-обработчике родительского окна метки нужно обрабатывать сообщение WM_CTLCOLORSTATIC.
Параметр wParam - описатель контекста устройства статического элемента управления;
параметр lParam - описатель статического элемента управления.

Если приложение обрабатывает сообщение WM_CTLCOLORSTATIC, возвращаемое значение используется как описатель кисти, для закрашивания фона метки.

Для твоего случая, это выглядит примерно так:

C
1
2
3
4
case WM_CTLCOLORSTATIC:
        if ((HWND) lParam == hLabel)
            return (LRESULT) GetClassLong(hwnd, GCL_HBRBACKGROUND);
        break;
0
Brainsbreaker
894 / 371 / 51
Регистрация: 01.02.2011
Сообщений: 1,587
26.06.2011, 21:50 4
У мну не пашет. ( Окно белое, фон статика серый. Откуда?
0
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
27.06.2011, 18:59 5
Из книги Петцольда,
я проверял - у меня работало.

C
1
2
3
4
5
6
7
8
9
10
11
case WM_CTLCOLORSTATIC:
                /* Если сообщение связано с меткой, описатель которой - hLabel,
                    то возвращаем кисть, которая используется для закрашивания
                    фона родительского окна, описателем которого является hwnd.
                    Естественно, значения описателей hLabel и hwnd должны быть
                    действующими и сообщение должно обрабатываться в обработчике
                    окна, являющегося родительским для метки.
                */
                if ((HWND) lParam == hLabel)
                        return (LRESULT) GetClassLong(hwnd, GCL_HBRBACKGROUND);
                break;
За подробностями можешь обратиться к описанию сообщения WM_CTLCOLOTSTATIC в MSDN.
0
Brainsbreaker
894 / 371 / 51
Регистрация: 01.02.2011
Сообщений: 1,587
27.06.2011, 23:23 6
В Петзольде '95 этого кода нет, MSDN не подходит, выложи весь код.
0
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
27.06.2011, 23:36 7
Как это нет?
глава "Дочерние окна управления", страница 278, "Окрашивание полос прокрутки и статического текста".
0
Brainsbreaker
894 / 371 / 51
Регистрация: 01.02.2011
Сообщений: 1,587
27.06.2011, 23:56 8
C++
1
2
3
4
5
6
7
8
9
10
case WM_CTLCOLORSTATIC:
    
    i = GetWindowLong((HWND) lParam, GWL_ID);
    if(i >= 3 && i <= 8) // static text controls
    {
        SetTextColor((HDC) wParam, crPrim[i % 3]);
        SetBkColor((HDC) wParam, GetSysColor(COLOR_BTNHIGHLIGHT));
        return(LRESULT) hBrushStatic;
    }
    break;
И... Возвращает кисть. Какой-то неправильный у тебя Петзольд.
0
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
28.06.2011, 08:53 9
В смысле
Какой-то неправильный у тебя Петзольд.
??
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2011, 08:53

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Сколькими способами 7 человек могут сесть в 3 вагона таким образом, чтобы ровно 1 вагон был пустым
На мой взгляд, по идее должно быть P_{7}\cdot A^{2}_{3}=7!\cdot 3! Это верно или нет?

Создать файл. Переписать во второй файл таким образом, чтобы перед каждой фамилией студента стоял его порядковый номер
Помогите пожалуйста решить!!! Создайте файл,содержащий фамилии студентов.Напишите...

Вывести на экран монитора квадрат таким образом, чтобы он изменял свой цвет с голубого на фиолетовый
Задание: Вывести на экран монитора квадрат таким образом, чтобы он изменял свой цвет с ...

Дан массив. Преобразовать его таким образом, чтобы все его элементы принадлежали отрезку
Дан массив. Преобразовать его таким образом, чтобы все его элементы принадлежали отрезку . Параметр...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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