15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


CImageList::add() and CDC

George Voronoff -- george@island.com
Wednesday, June 26, 1996

--=====================_835841907==_
Content-Type: text/plain; charset="us-ascii"


--=====================_835841907==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="imagelist"


ENVIRONMENT: VC++ 4.0 NT 3.51


I am creating CImageList from an array of CBitmaps.  I would like to
use the top left corner of each bitmap as the mask color.

What I wanted to do was:


CImageList* init(CBitmap bmp[], UINT n, UINT cx, UINT cy)
{
	CIwnImageList* il = new CImageList;
	il->Create(cx, cy, TRUE, n, FALSE);

	CDC	dc; dc.CreateCompatibleDC(NULL);
	CBitmap	*obmp = dc.GetCurrentBitmap();

	for ( UINT i = 0; i < n; i++ )
	{
		COLORREF c;
		dc.SelectObject(&bmp[i]);
		c = dc.GetPixel(0,0);
		il->Add(&bmp[i], c);
	}
	dc.SelectObject(obmp);

	return il;
}

But this did not work at all.  The resulting bitmaps were all 
black.  Then I tried:


CImageList* init(CBitmap bmp[], UINT n, UINT cx, UINT cy)
{
	CIwnImageList* il = new CImageList;
	il->Create(cx, cy, TRUE, n, FALSE);

	CDC	dc; dc.CreateCompatibleDC(NULL);
	CBitmap	*obmp = dc.GetCurrentBitmap();

	for ( UINT i = 0; i < n; i++ )
	{
		COLORREF c;
		dc.SelectObject(&bmp[i]);
		c = dc.GetPixel(0,0);
		dc.SelectObject(obmp);
		il->Add(&bmp[i], c);
	}
	return il;
}

This worked.  The only diffrence between the to functions is that
i select the original bitmap (obmp) before I add the current CBitmap
to the CImageList.  Based on this, I'm assuming that a CBitmap can not be
added to a CImageList while the CBitmap is selected on a DC.  Is this
correct?  If so, where on MSDN could I have found this info.


Thanx.

--=====================_835841907==_--




Vilas Patil -- vilasp@rpsadf.atlantaga.ncr.com
Tuesday, July 02, 1996


Hi George:

You got it right secondtime...  You can not allow a bitmap to be selected in 
two DCs at a time...  Therefore, when you try to add image to list which is 
already selected into dc the Cimagelist::add() simply adds image info ie 
height width but no image..  So you see black one .

Bye..

 ----------
From: owner-mfc-l
To: mfc-l
Cc: george
Subject: CImageList::add() and CDC
Date: Wednesday, June 26, 1996 12:18PM

 --=====================_835841907==_
Content-Type: text/plain; charset="us-ascii"


 --=====================_835841907==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="imagelist"


ENVIRONMENT: VC++ 4.0 NT 3.51


I am creating CImageList from an array of CBitmaps.  I would like to
use the top left corner of each bitmap as the mask color.

What I wanted to do was:


CImageList* init(CBitmap bmp[], UINT n, UINT cx, UINT cy)
{
        CIwnImageList* il = new CImageList;
        il->Create(cx, cy, TRUE, n, FALSE);

        CDC     dc; dc.CreateCompatibleDC(NULL);
        CBitmap *obmp = dc.GetCurrentBitmap();

        for ( UINT i = 0; i < n; i++ )
        {
                COLORREF c;
                dc.SelectObject(&bmp[i]);
                c = dc.GetPixel(0,0);
                il->Add(&bmp[i], c);
        }
        dc.SelectObject(obmp);

        return il;
}

But this did not work at all.  The resulting bitmaps were all
black.  Then I tried:


CImageList* init(CBitmap bmp[], UINT n, UINT cx, UINT cy)
{
        CIwnImageList* il = new CImageList;
        il->Create(cx, cy, TRUE, n, FALSE);

        CDC     dc; dc.CreateCompatibleDC(NULL);
        CBitmap *obmp = dc.GetCurrentBitmap();

        for ( UINT i = 0; i < n; i++ )
        {
                COLORREF c;
                dc.SelectObject(&bmp[i]);
                c = dc.GetPixel(0,0);
                dc.SelectObject(obmp);
                il->Add(&bmp[i], c);
        }
        return il;
}

This worked.  The only diffrence between the to functions is that
i select the original bitmap (obmp) before I add the current CBitmap
to the CImageList.  Based on this, I'm assuming that a CBitmap can not be
added to a CImageList while the CBitmap is selected on a DC.  Is this
correct?  If so, where on MSDN could I have found this info.


Thanx.

 --=====================_835841907==_--





| Вернуться в корень Архива |