серый цвет
От: Qwer Ty  
Дата: 27.12.02 23:09
Оценка:
При создании окна (CreateWindow (...)) цвет его оказывается белым ,если приложение запускается под WIN XP,
и серым при запуске под WIN9X. Хотелось бы что бы в обоих случаях было серым.
Re: серый цвет
От: Leonid V. Volnin Россия  
Дата: 28.12.02 08:28
Оценка:
Здравствуйте, Qwer Ty, Вы писали:

QT>При создании окна (CreateWindow (...)) цвет его оказывается белым ,если приложение запускается под WIN XP,

QT>и серым при запуске под WIN9X. Хотелось бы что бы в обоих случаях было серым.
Если ты создаешь собственное окно, то перед этим ты должен регистрировать класс окна. Так вот при регистрации, при заполнении структуры WNDCLASS:
WNDCLASS wc;
// у всех окон этого класса - серый фон. 
wc.hbrBackground=GetStockObject(GRAY_BRUSH);
// ... заполняем остальные поля, регистрируем и т.д.
hwnd=CreateWindow(...
best regards, Leonid
Re[2]: серый цвет
От: Hacker_Delphi Россия  
Дата: 28.12.02 10:07
Оценка:
Здравствуйте, Leonid V. Volnin, Вы писали:

LVV>Здравствуйте, Qwer Ty, Вы писали:



LVV>
LVV>WNDCLASS wc;
LVV>// у всех окон этого класса - серый фон. 
LVV>wc.hbrBackground=CreateSolidBrush(RGB(255, 0, 0)); // можно так , а было: GetStockObject(GRAY_BRUSH)
//При разрегистрации класса кисть сама умрет :super:
LVV>// ... заполняем остальные поля, регистрируем и т.д.
LVV>hwnd=CreateWindow(...
LVV>
Пикник — Песня Без Слов (Женшень)
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[3]: серый цвет
От: Leonid V. Volnin Россия  
Дата: 28.12.02 11:05
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

HD>Здравствуйте, Leonid V. Volnin, Вы писали:


LVV>>Здравствуйте, Qwer Ty, Вы писали:


HD>

LVV>>
LVV>>WNDCLASS wc;
LVV>>// у всех окон этого класса - серый фон. 
LVV>>wc.hbrBackground=CreateSolidBrush(RGB(255, 0, 0)); // можно так , а было: GetStockObject(GRAY_BRUSH)
// наверное CreateSolidBrush(RGB(128,128,128)) ?
HD>//При разрегистрации класса кисть сама умрет :super:

Почему это она умрет?
Про stock объекты в MSDN прямо так и сказано:
It is not necessary (but it is not harmful) to delete stock objects by calling DeleteObject.
А вот обычные GDI объекты... не уверен.
LVV>>
LVV>>// ... заполняем остальные поля, регистрируем и т.д.
LVV>>hwnd=CreateWindow(...
LVV>>
best regards, Leonid
Re[4]: серый цвет
От: Hacker_Delphi Россия  
Дата: 28.12.02 11:34
Оценка:
Здравствуйте, Leonid V. Volnin, Вы писали:

LVV>Здравствуйте, Hacker_Delphi, Вы писали:


HD>>Здравствуйте, Leonid V. Volnin, Вы писали:


LVV>>>Здравствуйте, Qwer Ty, Вы писали:


HD>>

LVV>>>
LVV>>>WNDCLASS wc;
LVV>>>// у всех окон этого класса - серый фон. 
LVV>>>wc.hbrBackground=CreateSolidBrush(RGB(255, 0, 0)); // можно так , а было: GetStockObject(GRAY_BRUSH)
LVV>// наверное CreateSolidBrush(RGB(128,128,128)) ?
//в общем-то да.. только тогда уж 192, 192, 192 - светло серый... или взять системный цвет :)
//системный цвет берется так:
wc.hbrBackground = COLOR_BTNFACE; // есть такой прикол - можно вместо кисти стандартный цвет задать :)
HD>>//При разрегистрации класса кисть сама умрет :super:
LVV>

LVV> Почему это она умрет?
LVV> А вот обычные GDI объекты... не уверен.
открываем MSDN::WNDCLASS (для WNDCLASSEX АНАЛОГИЧНО, естественно

hbrBackground

Handle to the class background brush. This member can be a handle to the physical brush to be used for painting the background, or it can be a color value. A color value must be one of the following standard system colors (the value 1 must be added to the chosen color). If a color value is given, you must convert it to one of the following HBRUSH types:

COLOR_ACTIVEBORDER
[skipped]
COLOR_WINDOWTEXT


The system automatically deletes class background brushes when the class is unregistered by using UnregisterClass. An application should not delete these brushes.

Данный фрагмент дословно означает следующее:
Система автоматически удаляет кисти классов когда класс разрегистрируется с помощью UnregisterClass.
Приложение не должно (в смусле не имеет права) удалять эти кисти
[skipped block]

08 — velikan
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[5]: серый цвет
От: Qwer Ty  
Дата: 28.12.02 15:58
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

HD>Здравствуйте, Leonid V. Volnin, Вы писали:


LVV>>Здравствуйте, Hacker_Delphi, Вы писали:


HD>>>Здравствуйте, Leonid V. Volnin, Вы писали:


LVV>>>>Здравствуйте, Qwer Ty, Вы писали:


HD>>>

LVV>>>>[ccode]
LVV>>>>WNDCLASS wc;
LVV>>>>// у всех окон этого класса — серый фон.
LVV>>>>wc.hbrBackground=CreateSolidBrush(RGB(255, 0, 0)); // можно так , а было: GetStockObject(GRAY_BRUSH)
LVV>>// наверное CreateSolidBrush(RGB(128,128,128)) ?
HD>//в общем-то да.. только тогда уж 192, 192, 192 — светло серый... или взять системный цвет
HD>//системный цвет берется так:
HD>wc.hbrBackground = COLOR_BTNFACE; // есть такой прикол — можно вместо кисти стандартный цвет задать
Вместо кисти системный цвет и задавал:

s.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);

Только в Win9X получается серый, а в WinXP — белый.
И есть ли серый цвет который и там и там выглядел одинаково?


HD>
Re[6]: серый цвет
От: Lopcom  
Дата: 28.12.02 19:48
Оценка:
Да, сделай так:

hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
Re[7]: серый цвет
От: Михаил Челноков Украина  
Дата: 30.12.02 21:10
Оценка:
Здравствуйте, Lopcom, Вы писали:

L>Да, сделай так:


L>hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);


Не факт. Не вводи человека в заблуждение. COLOR_BTNFACE может быть хоть зеленым. Если ему нужно задать именно СЕРЫЙ, то правильно посоветовали GetStockObject или CreateSolidBrush.
Re[6]: серый цвет
От: Михаил Челноков Украина  
Дата: 30.12.02 21:16
Оценка:
Здравствуйте, Qwer Ty, Вы писали:

QT>s.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);


QT>Только в Win9X получается серый, а в WinXP — белый.

QT>И есть ли серый цвет который и там и там выглядел одинаково?

Тебе уже сказали. GetStockObject(GRAY_BRUSH) или подобное.
COLOR_WINDOW — это просто "цвет фона окна". Он совсем не обязательно белый или серый. В любом Windows его можно поменять в "свойствах экрана -> оформление".
Re[8]: серый цвет
От: Lopcom  
Дата: 30.12.02 21:31
Оценка:
L>>Да, сделай так:

L>>hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);


МЧ>Не факт. Не вводи человека в заблуждение. COLOR_BTNFACE может быть хоть зеленым. Если ему нужно задать именно СЕРЫЙ, то правильно посоветовали GetStockObject или CreateSolidBrush.



Я про стандартные предопределённые значения. Этот цвет более гарантированно серый, чем любые другие. Но, понятное дело, что все они меняются в настройках схем рабочего стола. Именно такое поведение иногда и требуется.

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