LINUX.ORG.RU

QT4: QPixmap -> HICON trouble.


0

0

Привет!

Этот код (из старого 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) Что для этого нужно изменить в этих функциях?

Спасибо!

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.