Hello All!
This code (from old tray icon example) creates HICON by 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;
}
///////////////////////////////////////////////////////////////////////////////////////////
Questions:
1) Why HICON has black background color?
2) How to get HICON with transparent background color?
3) What should I change in this code?
Bookmarks