Привет! Этот код (из старого QT'го примера trayicon) создаёт HICON из QPixmap //////////////////////////////////////////////////////////////////////////////// /////////// static HICON createIcon( const QPixmap &pm ) { QPixmap maskpm( pm.size() ); QBitmap mask( pm.size() ); QPainter p; if ( !pm.mask().isNull() ) { maskpm.fill( Qt::black ); // make masked area black QPainter mp( &mask ); p.begin( &mask ); p.drawPixmap( 0, 0, pm.mask() ); p.end(); } else maskpm.fill( Qt::color1 ); p.begin( &maskpm ); p.drawPixmap(0, 0, pm); p.end(); ICONINFO iconInfo; iconInfo.fIcon = TRUE; HBITMAP hbm; iconInfo.hbmMask = hbm = createIconMask(mask); iconInfo.hbmColor = maskpm.toWinHBITMAP(); HICON icon = CreateIconIndirect( &iconInfo ); DeleteObject(iconInfo.hbmMask); iconInfo.hbmMask = hbm = 0; return icon; } //////////////////////////////////////////////////////////////////////////////// /////////// static HBITMAP createIconMask( const QPixmap &qp ) { QImage bm = qp.toImage(); int w = bm.width(); int h = bm.height(); int bpl = ((w+15)/16)*2; // bpl, 16 bit alignment uchar *bits = new uchar[bpl*h]; bm.invertPixels(); for ( int y=0; y<h; y++ ) memcpy( bits+y*bpl, bm.scanLine(y), bpl ); HBITMAP hbm = CreateBitmap( w, h, 1, 1, bits ); delete [] bits; return hbm; } //////////////////////////////////////////////////////////////////////////////// /////////// Вопросы: 1) Почему при отображении в system tray фон иконки - чёрный? 2) Как получить иконку с прозрачным фоном? 3) Что для этого нужно изменить в этих функциях? Спасибо!
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум libnotify+gtk2+threads in c++ = Ошибка сегментирования (2012)
- Форум [Qt] QPixmap (2010)
- Форум QT+QPixmap (2004)
- Форум Trouble ! ! ! (2014)
- Форум trouble (2005)