Привет!
Этот код (из старого 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)
- Форум Troubles (2002)