При создании окна (CreateWindow (...)) цвет его оказывается белым ,если приложение запускается под WIN XP,
и серым при запуске под WIN9X. Хотелось бы что бы в обоих случаях было серым.
Здравствуйте, Qwer Ty, Вы писали:
QT>При создании окна (CreateWindow (...)) цвет его оказывается белым ,если приложение запускается под WIN XP, QT>и серым при запуске под WIN9X. Хотелось бы что бы в обоих случаях было серым.
Если ты создаешь собственное окно, то перед этим ты должен регистрировать класс окна. Так вот при регистрации, при заполнении структуры WNDCLASS:
WNDCLASS wc;
// у всех окон этого класса - серый фон.
wc.hbrBackground=GetStockObject(GRAY_BRUSH);
// ... заполняем остальные поля, регистрируем и т.д.
hwnd=CreateWindow(...
Здравствуйте, 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>
Пикник — Песня Без Слов (Женшень)
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, 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>>
Здравствуйте, 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
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, 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 — белый.
И есть ли серый цвет который и там и там выглядел одинаково?
Здравствуйте, Lopcom, Вы писали:
L>Да, сделай так:
L>hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
Не факт. Не вводи человека в заблуждение. COLOR_BTNFACE может быть хоть зеленым. Если ему нужно задать именно СЕРЫЙ, то правильно посоветовали GetStockObject или CreateSolidBrush.
Здравствуйте, Qwer Ty, Вы писали:
QT>s.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
QT>Только в Win9X получается серый, а в WinXP — белый. QT>И есть ли серый цвет который и там и там выглядел одинаково?
Тебе уже сказали. GetStockObject(GRAY_BRUSH) или подобное.
COLOR_WINDOW — это просто "цвет фона окна". Он совсем не обязательно белый или серый. В любом Windows его можно поменять в "свойствах экрана -> оформление".
L>>Да, сделай так:
L>>hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
МЧ>Не факт. Не вводи человека в заблуждение. COLOR_BTNFACE может быть хоть зеленым. Если ему нужно задать именно СЕРЫЙ, то правильно посоветовали GetStockObject или CreateSolidBrush.
Я про стандартные предопределённые значения. Этот цвет более гарантированно серый, чем любые другие. Но, понятное дело, что все они меняются в настройках схем рабочего стола. Именно такое поведение иногда и требуется.