Консультация № 138832
31.05.2008, 22:32
0.00 руб.
0 2 2
В разных источниках как пример увидел при регистрации класса окна запись в структуру типа WNDCLASS:
WNDCLASS ws;
...
ws.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
...

Так вот зачем еденицу-то прибавляют? Ведь не просто так аж в 2-х разных книжках написали.

Обсуждение

Неизвестный
31.05.2008, 23:20
общий
это ответ

<i>Здравствуйте, <b>effort</b>!</i>

Потому, что так придумали разработчики Microsoft...
В <a target=_blank href=http://msdn.microsoft.com/en-us/library/ms633576.aspx>MSDN</a> написано так: "<cite>A color value must be one of the following standard system colors (the value 1 must be added to the chosen color)</cite>..." (<cite>Значение цвета должно соответствовать одному из следующих стандартных системных цветов (необходимо добавлять единицу к выбранному значению цвета)...</cite>).

Насколько я понимаю, сделано это было потому, что COLOR_SCROLLBAR объявлен равным нулю (см. winuser.h), а чтобы не путать (HBRUSH)COLOR_SCROLLBAR c NULL_HBRUSH, то Microsoft придумали прибавлять 1 (т.е. чтобы не было нуля).

Дополнительно: <a target=_blank href=http://forums.msdn.microsoft.com/en-US/vcgeneral/thread/e4fd1c4b-4407-4743-a74f-7d78338c17d2/>ссылка</a> (на англ.)

<em>Успехов!</em>
Неизвестный
31.05.2008, 23:23
общий
это ответ
<font color=red><b>!!!</b></font>
Здравствуйте, effort!
1)<a href=http://forums.msdn.microsoft.com/en-US/vcgeneral/thread/e4fd1c4b-4407-4743-a74f-7d78338c17d2/>ссылка</a>

2) <s>заметьте в С++ эта единичка не добавляеться.</s>

3) Попытаюсь предположить что причина в разнице в работе с массивами. (не) Поддержке 0 - го элемента в разных типах массивов. Т.е. массив имеет поле имеющее значение 0, но не имеет 0 - го элемента. В С# возникает трудность т.к. идет попітка получить 0 - й элемен(которого может не быть)т. Для этого и добавляют еденицу...
4) Вероятнее всего я ошибаюсь но могу сказать вам точно, что ответ лежит в системных С++ библиотеках<p><fieldset style=‘background-color:#EFEFEF; width:80%; border:red 1px solid; padding:10px;‘ class=fieldset><font color=red><i>В соответствии со статьей в MSDN (<a target=_blank href=http://msdn.microsoft.com/en-us/library/ms633576.aspx>WNDCLASS Structure</a>) единицу нужно прибавлять независимо от языка программирования (Visual Basic, C++, C#, J#, JScript, ...)</i>
-----
</font><font color=#777777 size=1><b>• Отредактировал: <a href=http://rusfaq.ru/info/user/4837 target=_blank>Denisss</a></b> (Профессор)
<b>• Дата редактирования:</b> 01.06.2008, 14:22 (MCK)</font></fieldset>
Форма ответа