Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анимированная иконка в трее, Как сделать анимацию НЕ делая 10 иконок 
V
    Опции темы
jonie
Дата 21.8.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Несколько раз видел в программах (таких как winRAR при архивировании в фоне) что иконка в трее изменяется (появляется индикаторы и т.д.). При этом в самих файлах не было найдено 10 (или более) иконок (картинок), т.е. программа как-то изменяет уже существующую иконку, а потом подменяет ею предыдущую.
Вопрос:Как сделать подобное? (с засовыванием иконки в трей, ее заменой трабл нет).


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
chaos
Дата 22.8.2005, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



1) можно засовывать в трэй анимированную иконку
2) можно брать HDC иконки в трэе и рисовать на ней
PM WWW   Вверх
ManiaK
Дата 22.8.2005, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



3) Самое просто и надёжное: ставить в таймере смену трей-иконок.

(не уверен, что анимированные иконки работают в трее)
PM MAIL WWW   Вверх
Denn
Дата 22.8.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 6.8.2005

Репутация: нет
Всего: 2



jonie
а сколько там было иконок? если одна, то прога сама рисует.
PM MAIL ICQ   Вверх
jonie
Дата 22.8.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Цитата
jonie
а сколько там было иконок? если одна, то прога сама рисует.
В том и смысл что вроде одна (в ресурсах только одна - точно).
Цитата
3) Самое просто и надёжное: ставить в таймере смену трей-иконок.
Хех, это ежу понятно...задача именно в том и состоит, чтобы не делать 10 (или более) иконок....
Цитата
1) можно засовывать в трэй анимированную иконку
Стоит попробывать, не уверен, что заработает
Цитата
2) можно брать HDC иконки в трэе и рисовать на ней
А поподробнее как получить HDC иконки в трее...пример приветствуется.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Guest
Дата 31.8.2005, 22:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот это может поможет http://www.sources.ru/cpp/cpp_cmetericon.shtml
  Вверх
jonie
Дата 14.5.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



давно нашел ответ) но все забывал написать.
В кратце он примерно таков:
создаем memory DC
создаем битмап. рисуем на нем все что хотим (хоть цифры например).
переводим его в значек (MSDN : CreateIconIndirect)

выкапано откуда-то оттуда....
---------------------------
http://www.wasm.ru/forum/index.php?action=...m=4&page=-1
---------------------------
хз куда код свой дел уже)) но работало. 


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
jonie
Дата 19.5.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Вот пример кода... думаю это может быть интересно (чтобы не думать))
Код

/*
  НЕ передавайте строку что больше 3-х символов
  (качество будет отврат + см. код)
  По аналогии рисуем _что_ хотите.
*/
HICON CreateIconFromText(LPCTSTR text,COLORREF color)
{

int cxIcon = GetSystemMetrics(SM_CXSMICON);
int cyIcon = GetSystemMetrics(SM_CYSMICON);

HDC hdcDisplay = GetDC(NULL);
if (!hdcDisplay){
    return NULL;
}

HDC hdcXOR = CreateCompatibleDC(hdcDisplay);
if (!hdcXOR){
    ReleaseDC(NULL, hdcDisplay);
    return NULL;
}

HDC hdcAND = CreateCompatibleDC(hdcXOR);
if (!hdcAND){
    DeleteDC(hdcXOR);
    ReleaseDC(NULL, hdcDisplay);
    return NULL;
}

ICONINFO iconinfo;
ZeroMemory(&iconinfo,sizeof(ICONINFO));
iconinfo.fIcon = TRUE;

iconinfo.hbmMask = CreateCompatibleBitmap(hdcDisplay,cxIcon, cyIcon);
if (!iconinfo.hbmMask){
    DeleteDC(hdcAND);
    DeleteDC(hdcXOR);
    ReleaseDC(NULL, hdcDisplay);
    return NULL;
}

iconinfo.hbmColor = CreateCompatibleBitmap(hdcDisplay, cxIcon, cyIcon);
if (!iconinfo.hbmColor){
    DeleteObject(iconinfo.hbmMask);
    DeleteDC(hdcAND);
    DeleteDC(hdcXOR);
    ReleaseDC(NULL, hdcDisplay);
    return NULL;
}

ReleaseDC(NULL, hdcDisplay);

HBITMAP hbmMaskOld  = (HBITMAP)SelectObject(hdcAND, iconinfo.hbmMask);
PatBlt(hdcAND, 0, 0, cxIcon, cyIcon, WHITENESS);

HBITMAP hbmColorOld = (HBITMAP)SelectObject(hdcXOR, iconinfo.hbmColor);
PatBlt(hdcXOR, 0, 0, cxIcon, cyIcon, BLACKNESS);

LOGFONT lf;
ZeroMemory(&lf,sizeof(LOGFONT));
lf.lfCharSet            = ANSI_CHARSET;
lf.lfOutPrecision       = OUT_DEFAULT_PRECIS;
lf.lfClipPrecision      = CLIP_DEFAULT_PRECIS;
lf.lfQuality            = ANTIALIASED_QUALITY; //DEFAULT_QUALITY;
lf.lfPitchAndFamily     = DEFAULT_PITCH;
lf.lfHeight                = cyIcon;
lf.lfWidth                = cxIcon / 3; //делим на кол-во букв (3 макс для читабельного текста)
lf.lfWeight                = FW_NORMAL;
strcpy_s(lf.lfFaceName,_countof(lf.lfFaceName),TEXT("Arial"));

HFONT hfontXOROld  = NULL;
HFONT hfontANDOld  = NULL;
HFONT hfont = CreateFontIndirect(&lf);
if (hfont){
    hfontXOROld  = (HFONT)SelectObject(hdcAND, hfont);
    hfontANDOld  = (HFONT)SelectObject(hdcXOR, hfont);
}

COLORREF rgbOld        = SetTextColor(hdcXOR, color);
int nBkModeXOROld   = SetBkMode(hdcAND,  TRANSPARENT);
int nBkModeANDOld   = SetBkMode(hdcXOR, TRANSPARENT);

RECT rc; rc.left = 0; rc.top = 0; rc.right = cxIcon; rc.bottom = cyIcon;

DrawText(hdcAND,  text, -1, &rc,  DT_CENTER | DT_VCENTER | DT_SINGLELINE);
DrawText(hdcXOR, text, -1, &rc,  DT_CENTER | DT_VCENTER | DT_SINGLELINE);

SetBkMode(hdcAND,  nBkModeXOROld);
SetBkMode(hdcXOR, nBkModeANDOld);
SetTextColor(hdcXOR, rgbOld);

if (hfontXOROld)
    SelectObject(hdcAND, hfontXOROld);
if (hfontANDOld)
    SelectObject(hdcXOR, hfontANDOld);
if (hfont)
    DeleteObject(hfont);

if (hbmMaskOld)
    SelectObject(hdcAND, hbmMaskOld);
if (hbmColorOld)
    SelectObject(hdcXOR, hbmColorOld);

DeleteDC(hdcAND);
DeleteDC(hdcXOR);

HICON hIcon = CreateIconIndirect(&iconinfo);

DeleteObject(iconinfo.hbmColor);
DeleteObject(iconinfo.hbmMask);

return hIcon;
}

 


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.2492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.