И снова про иконки

November 21st, 2009 Begemot Posted in Программирование, Шаровароварение

На этот раз правда, не про бесплатные наборы иконок, а про правильное их использование в программе.

Заказал у дизайн главной иконки иконки у фрилансера,  $40, мне понравилось – я доволен, результат тут, спасибо маньяку за наводку. В процессе интеграции выяснил что, код который генерирует визард студии для работы с иконками – неправильный, и все эти годы у меня криво отображалась главная иконка. Раньше она и сама была кривая, так что на это внимание не обращал,  а теперь стало явно видно. Что генерирует визард

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

Проблема в том что LoadIcon грузит иконку весьма паршиво. И гораздо лучше использовать LoadImage, вот так

SetIcon(HICON(LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 32, 32, 0)), TRUE); // Set big icon
SetIcon(HICON(LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, 0)), FALSE); // Set small icon

Теперь и маленькая (таскбар, заголовок окна) и большая (алт-таб) иконка загрузятся корректно.

Но и это еще не все тонкости, грузить иконку для использования в трее надо так как написано выше, это понятно. Но если вы хотите корректно отображать иконку в трее для Windows 2000 – то необходимо делать две ветви кода, и для W2K грузить иконку с опцией LR_VGACOLOR

HICON(LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_VGACOLOR)

2000 винда умеет отображать в трее только 16 цветную иконку (ужас!), это нужно учесть и иметь формат с 4х битным цветом в вашем ico файле.

В общем намаялся я с этими иконками по полной программе, особенно учитывая, что я решил пользуясь случаем массово сменить иконки в меню\на тулбаре – потому что там тоже был ужас. Часть иконок заменил, часть взял старые но правильно их обработал, в результате программа стала смотреться намного приятнее, как по мне. А ведь страшно подумать, много лет продавалась с кривыми иконками, только потому что я 5 лет назад неумел\поленился разбираться с цветностью, форматами етс, а потом привык и как-то не замечал.

Отсюда мораль, если вы уже давно разрабатываете продукт – попробуйте абстрагироваться и посмотреть на него свежим взглядом…

За помощь и посвящения в тайны иконок, благодарю эксперта в этом вопросе  и по совместительству автора приятной программы для работы с иконками.

Кстати, тут сегодня Агентство переводов Alconost Translations выложило в открытый доступ Follow-up templates (шаблоны писем потенциальным клиентам), можно брать, пользоваться и даже добавлять свой любимый text repository for instant inserting 🙂

Related:

19 Responses to “И снова про иконки”

  1. Но это еще не все! (C) барон Карл Фридрих Иероним фон Мюнхгаузер!
    Фокесы обычно начинаются в тулбарах, с треем да главной иконкой можно завсегда пару веток кода на 5 строк пустить, делов-то!
    А вот с тулбарами так не выйдет – тулбар он всегда целый, и держать 2-3 версии битмапа под один и тот же тулбар это не выход. Размер файла конечно размером, но и гуй с ним, а вот когда тулбары внушительные по числу кнопок, и так с ними управляться, только успевай. А если еще завести по несколько версий – то это полный вперед.

    Вот я аккурат наразвлекался с полгодика назад с подменой иконок для отдельных кнопок на лету, при загрузке тулбара. Главное посильнее вдуматься сколько тупой работы предстоит выполнить, и потом еще много-много раз регулярно делать, если завести несколько версий изображения для одного и того же тулбара – и тогда моск приходит в правильное состояние – начинает лихорадочно искать решение кодом…. 🙂 Впрочем оно и нашлось 🙂

  2. Э а чо там за проблемы с тулбарами? у меня вроде не было.

  3. По чём иконки обошлись?

  4. Win2K с SP4 уже нормально поддерживает 32 битные иконки с прозрачностью. Возможно стоит проверять наличие SP4 для Win2K

  5. @Zitz, Главная 40, остальные с бесплатных наборов.

    @Andrey, да наверное действительно стоит если поддерживает, но с другой стороны сколько там той двушки осталось… 🙂

  6. 2Николай:
    Проблемы с тулбарами в следующем:

    Рисунок к тулбару хранится как единый битмап, и редактировать его можно или во встроенном редакторе где только 16 цветов и только, или уж редактировать битмап на стороне.

    Что имеем:

    Встроенный редактор: полное Г. в работе как с рисунком, цветность теряется, инструментов мало – т.е. для дизайнеров это не редактор, а убиться ап стену. Но для девелоперов самое то, т.к. предоставляет кучу других важных для повседневной работы инструментов вроде увязки со строками, автоматическая разбивка на кнопки, связка с обработчиками – в общем удобно это нашему брату.

    Редакторы битмапов на стороне: о да рисунок там можно сделать модный, но увязка с вышеперечисленным нулевая.

    Что на выходе: или говенный рисунок во встроенном редакторе тулбаров, зато можно легко мучить отдельные кнопки (подсказки, переместить влево\вправо и.т.д.) или красивый рисунок, но вся девелоперская часть через одно место.

    Что было нужно мне: ну не могу я повседневно отказаться от встроенного редактора. Все равно, ну не художник я, и красоту в рисунке профессионально сделать просто не смогу. А вот кнопки тасовать, что-то редактировать в связанных сущностях мне нужно через день. Соответственно можно только заменить разово полностью весь рисунок тулбара, благо он хранится отдельным bmp-файлом. Но вот какая фишка, и что теперь на каждом чихе заменять рисунок, после того как студия опять после редактирования кастрирует битмапку до 16-ти цветов? Это еще ладно, скриптом заменим. А что делать, когда просто передвинул кнопки влево вправо? Опять редактировать сторонний кульный битмап? Слишком уж много получается телодвижений, после каждого более менее значимого изменения тулбара – а изменений этих может быть по 3 раза на дню.

    Как-то писал об этом в блоге: тут http://nonp.blogspot.com/2009/03/true-color.html (только там код, сори уж скриншотом выложен – он у меня рабочий, я тогда был тогда маленький и злой :), да к тому же потерял RSDN`овский code formatter, поэтому и рисунком, но там и так все понятно – код замены видно, а откуда берутся конкретные кульные иконки забота стороннего кода – в моем случае было через virtual в наследниках CToolBar, несложно сделать и на какой-нить указатель на функцию, или еще как).

  7. Незнаю что там за проблемы, редактирую разумеется внешним редактором, да двигать иконки нельзя – но так ли часто это надо делать? У меня как прибил три года назад так, и держится. Сейчас вот только открыл некоторые кнопки заменил.

    Правда у меня в отличии от тебя, кнопок мало 🙂

  8. 2Николай:
    Ну проблемы во встроенном редакторе исключительно в цветности, и все. В остальном все нормально, никто и не ожидает от встроенного редактора возможностей полноценной живописи, а вот что эта встроенное чудо цвета нормально не поддерживает это уже ни в какие ворота. Больше всего удивило что даже 2005-студия (считай уже Виста выходила) и они всего лишь 16-цветов млин… Чем в MS думают, не понимаю. Уж цветность то можно сделать!?!

    Слушь, а чем ты редактируешь тулбары? Я как бы поискал что-то, но как-то все слабенько, а самому писать…. Если можешь не писать, не пиши ((C) Я шагаю по Москве) 🙂

    У тебя мало кнопок? Разве ж это мало!?! То что ты видишь у меня как раз и называется “мало”!. Больше половины кнопок по умолчанию!!!! у меня вообще скрыты :), они включаются отдельно в настройках, на самом деле их куда как больше. 🙂
    Так что “мало” понятие относительное 🙂

  9. Я раньше пайнтом, сейчас pixelformer использую. Но вообще как я написал я это делаю раз в три года 🙂

    А в новых проектах на wxWidgets – там грифы в png

  10. А Pixel Former умеет как-то работать с тулбарами!?!

    Кстати, давно хотел спросить а почему wxWidgets? Собсна с чего у тебя с wxWidgets все началось?
    1) возникла конкретная мультиплатформенная задача или просто на будущее?
    2) Ну и собсна почему именно wxWidgets? Я так понял, твой FlashPaste весьма активно делает … (подчеркнуть нужное, да не запалим коллегу 🙂 ), я так думаю, этот способ не очень-то куда-то переносим с Винды. Соответственно зачем писать чисто Виндовое приложение на wxWidgets? Или я ошибаюсь?

    В общем, интересно что к чему да почему. Как-то уже хочется что-нить новенькое попробовать. NET меня как-то не манит, больно поганная штука, аки семечки. Вот и в размышлениях. Благо есть пара идей новых несложных проектов, аккурат бы и потренироваться!?! HTMLLayout интересная штука, но имхо быстро начать там сложно, а не хотелось бы увязнуть. Qt говорят 10 метров за собой таскает – за такое и канделябром можно. Вот поглядываю на wxWidgets, хотелось бы услышать мнение профи.

    PS: к слову говоря, тут один небезызвестный товарищ из журнала Компьютерра ищет замену моей Aml Pages под Mac. У меня версий Aml Pages под Мас даже и не предвидится. В общем, пообщался с ним немного на днях и примерно понял, что ему более-менее нужно от такого софта. Ну и вроде как предложил твой FlashNote посмотреть. У тебя планируется или есть уже branch под Mac?

  11. Он умеет работать с битмапами, мне хватает.

    >Кстати, давно хотел спросить а почему wxWidgets?
    Блин надо наверное на эту тему отдельный пост написать, а то ты уже не первый спрашиваешь, что бы ссылкой давать 🙂 Так что потерпи.
    А Flashpaste он еще на mfc, на вхсах новые проекты.

    Под мак у меня конечно же планируется, сразу после линукса, то есть не в очень близкой перспективе:)
    Но предлагать Flashnote, как замену Aml Pages – это круто. Это как предлагать нож для чистки картошки, вместо кухонного комбайна 🙂

  12. 2000х на самом деле дофига, если внутри организаций. Вот найти их без последнего SP – это да, сложно

    @Carc
    Да ну, не смешите мои подковы. Если у тебя действительно много изменений в тулбарах – это значит тебе всё равно не до релиза будет несколько дней :). И тогда зачем вообще париться? пока сидишь с студии – делай в встоенном редакторе как придётся. Потом сесть и за полчаса причесать и ращложить все иконки в тулбарах вполне можно будет

  13. @Andrey, Классный викинг 🙂

  14. 1) 2Andrey: NT кстати тоже дофига, причем и в организациях солидных… Сам собственными глазами наблюдал и не по разу. Крутится себе NT4.0 sp4 с SQL, причем даже клаву от сервера пропили уже давно, и никто ничего апгрейдить даже и не собирается.

    2) Про иконки: тут дело не в том, много изменений в тулбарах или нет. Когда тулбар делается, оно понятно – работа кипит, тут-то фиг с ним. Но вот потом, по каким-то внешним причинам, нужно банально передвинуть кнопку влево или вправо, хотя бы потому что там ее быстрее заметит пользователь. И что? На каждом подобном чихе опять редактировать битмап? Тут все просто – если такой “чих” тащит за собой вагон и маленькую тележку работы, да причем работы тупой и повторяющейся, то на такую работу натурально кладется, и вообще никаких изменений не делается.

    PS: а в результате страдает конечный пользователь, именно он не получит полезного (вероятно) изменения. В общем-то, конечно, не велика потеря, но целое состоит из мелочей.
    И-эх, может действительно муть какую написать, чтобы хоть кнопки увязывала с описанием тулбара в ресурсах!?!

  15. 1) Ну млин, что знал то и предложил. Чем не замена? Да в контексте, того чего нужно было Голубицкому глядишь и подойдет…. Да и как бы промолчать было нельзя! Голубицкий меня просто впрямую спросил – неудобняк было промолчать. Еверноут слишком тяжкий, Трипад – предлагать это для меня перешагнуть через себя :), оставался FlashNote – больше ничего более-менее функционально подходящего я и не знаю (я имею ввиду кросс-платформ)… Кстати это тебе вдогону к посту про Леново, и к кому ты там собрался идти?!? Народ ищет, мучается – вот и написал бы…

    2) Даешь пост про wxWidgets, а хоть бы и в стиле “Что хорошо, что плохо, что ужасно”!?!

  16. А у нас еще много викингов есть, [не]хороших и разных… Скоро будет public beta – можешь посмотреть 🙂

    @Carc
    1) Ну это немного разные примеры. Я имел ввиду рабочие станцим. Для сервера наоборот все эти иконки пофигу, надо грузить с LR_VGACOLOR и не париться. Да и половина графического API в этом случае отваливается (прозрачность, common controls 5.0 и прочее). При таких требованиях чем проще UI – те меньше потом проблем

    2) Строй image list из нескольких png изображений если уж настолько неудобно. Но по-моему фигня всё это. Программисты должны программировать, а художники – рисовать. В том числе и правильную последовательность кнопок.

  17. А в чем была проблема с иконками? Какими вопросами задавался и по каким вопросам тебя консультировали? Возможно мне стоит написать какой-то ликбез по иконкам? Было бы такое коллегам полезно?

  18. Да в основном проблема была в моих кривых руках и неспособности пользоваться редактором иконок, и базовых знаниях:)

    Ну а по иконкам конечно общие вопросы есть – цветность, форматы, палитры какие-то…
    Какие форматы должны быть в главной иконке и в каком порядке?
    Какая цветность должна быть для иконок, которые я сую в wxWidgets меню 🙂
    Особенности использования под двушкой. и так далее, но это уже более специфические вопросы для языка\библиотеки..

  19. В целом понятно. Если есть еще конкртеный список вопросов, напиши. Опишу 🙂