Фичи гуёвого режима

Персональный блог одноименного форумчанина. Человека и парохода, не побоюсь этого сравнения :)

Модератор: tyomitch

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Фичи гуёвого режима

Сообщение tyomitch » 16.06.2006 (Пт) 12:10

Продолжаю рассказывать о продвинутых фичах в Tiger2; теперь -- об относящихся к диалогу, появляющемуся в гуёвом режиме (при запуске с пустой командной строкой).

* В заголовке диалога нет иконки, причём в кнопке на таскбаре она есть, и при переключении по Alt-Tab -- тоже есть. Эта иконка была сгенерирована IrfanView из полноразмерной картинки, и по её краям идёт заметная светло-серая полоса антиалиасинга. На сером фоне кнопки это смотрится нормально, а на синем фоне заголовка -- плохо; поэтому я постарался совсем убрать иконку из заголовка.

Оказалось, что единственный способ убрать оттуда иконку, сохранив её в остальных местах -- это пометить ехе-шник как предназначенный для WinNT 3.x. В этом случае для совместимости со старыми прогами включается "режим Windows 3.x", в котором фон у окон белый, текст набран шрифтом System и т.д. Всё, что мне нужно от этого режима -- это отсутствие иконки в заголовке; остальные эффекты потом приходится вручную исправлять (перекрашивать окно, менять шрифт на MS Shell Dlg и т.д.)

Как выяснилось позже, в WinXP со включёнными темами иконка в заголовке всё равно отрисовывается. Будем считать это багом в uxtheme.dll, нарушающим совместимость с существующими со времён WinNT 3.1 программами :-)


* Картинка с Тигрой в левой части диалога -- это статик с SS_ENHMETAFILE, поэтому при изменении размеров системных шрифтов она будет красиво растягиваться вместе со всем диалогом, а не зависать в углу либо в центре рамки. (Можете проверить.)

Сам метафайл сгенерирован лежащей рядом с исходниками прогой на VB, и состоит из единственного элемента -- иконки размером 115х104. (Винда поддерживает иконки даже таких необычных размеров.) Картинка была сделана иконкой, а не битмапом, -- затем, чтобы её фон был "прозрачным", т.е. принимал системное значение цвета фона.

В иконке задействована ещё одна нечасто применяемая фича -- "инверсные пикселы", которые принимают цвет, контрастный с цветом фона в соответствующем месте. (Инверсные пикселы часто применяются в курсорах, но поддерживаются также и в иконках.) Именно из таких инверсных пикселов составлена надпись "CS.USU.EDU.RU", поэтому она будет различима при любом системном цвете фона. (Можете проверить.)


* Самая понтовая из фич гуёвого режима -- это гиперссылки в месседжбоксе About. (Это действительно обычный месседжбокс, а не хитрый кастомный диалог.) Сами гиперссылки -- это обычные статики; сразу после создания месседжбокса они добавляются на него из таймера, запускаемого непосредственно перед вызовом MessageBox. Затем месседжбокс сабклассится, и новый обработчик придаёт добавленным статикам функциональность гиперссылок -- меняющийся при наведении цвет, подчёркивание, курсор-палец и т.д.

На этом месте я случайно нажал Esc, потерял весь набранный текст, и был вынужден сочинять его по-новой. Раз уж пошло добавление на форум Хитрых Скриптов, нельзя ли добавить такой, который отключит на время набора текста кнопку Esc?

При добавлении статиков-гиперссылок их координаты рассчитываются при помощи DrawText(DT_CALCRECT), так что они не попадут мимо положенного места даже при нестандартных размерах системных шрифтов. (Можете проверить.)
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Фичи гуёвого режима

Сообщение alibek » 16.06.2006 (Пт) 12:28

tyomitch писал(а):В иконке задействована ещё одна нечасто применяемая фича -- "инверсные пикселы", которые принимают цвет, контрастный с цветом фона в соответствующем месте. (Инверсные пикселы часто применяются в курсорах, но поддерживаются также и в иконках.) Именно из таких инверсных пикселов составлена надпись "CS.USU.EDU.RU", поэтому она будет различима при любом системном цвете фона. (Можете проверить.)

Ты неправ :)
Это именно инверсные, а не контрастные. И при цвете фона R128G128B128 надпись ты не прочтешь.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.06.2006 (Пт) 12:48

Как ни удивительно, но я с этим цветом фона проверял, и даже смог прочитать надпись. Именнно заэтим и стоял в скобочках комментарий ;-)

(я не знаю, в чём там было дело -- в винде, в моём мониторе или в моих глазах)
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2006 (Пт) 13:32

Ну значит либо у тебя потрясающее цветовосприятие, способное отличить R127G127B127 от R128G128B128, либо монитор глючный :)
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.06.2006 (Пт) 13:42

Ни то, ни другое. Когда фоном (128,128,128), инверсные пикселы рисуются как (110,110,110) и прекрасно различимы.
Я же говорю -- проверь сам :-)
Изображение

Crio
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 21.05.2007 (Пн) 12:01
Откуда: Питер

Сообщение Crio » 19.08.2007 (Вс) 8:34

Оказалось, что единственный способ убрать оттуда иконку, сохранив её в остальных местах -- это...


А можно было сделать вариант разрешения иконки 16х16 со сплошной заливкой цветом фона? Или это не подходило по условию?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.08.2007 (Вс) 10:56

Это выглядело богомерзко в диалоге Alt-Tab
Изображение


Вернуться в Tyomitch

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList