BOOL CMyBitmapButton::LoadThreeStateImages(LPCTSTR lpszFilename)
{
CDC srcDC;
srcDC.CreateCompatibleDC(NULL);
CDC memDC;
memDC.CreateCompatibleDC(NULL);
CBitmap src;
HBITMAP hbm = (HBITMAP) ::LoadImage (NULL, lpszFilename, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if (hbm == NULL)
{
return FALSE;
}
src.Attach(hbm);
//得到原指针,
CBitmap* pOldBitmap1 = srcDC.SelectObject(&src);
srcDC.SelectObject(&pOldBitmap1);
//CBitmap* pOldBitmap2 = memDC.SelectObject(&src); //ERROR ?
//memDC.SelectObject(pOldBitmap2); //save pOldBitmap2!!
BITMAP bmpinfo;
src.GetBitmap(&bmpinfo);
int bmpWidth = bmpinfo.bmWidth / 3;//!!attention!!
int bmpHeight = bmpinfo.bmHeight;
m_stateBitmaps[0].DeleteObject();
m_stateBitmaps[1].DeleteObject();
m_stateBitmaps[2].DeleteObject();
BOOL Rz=TRUE;
for(int i=0;i<3;i++)
{
m_stateBitmaps[i].CreateCompatibleBitmap(&srcDC,bmpWidth,bmpHeight);
memDC.SelectObject(m_stateBitmaps[i]);
if( !memDC.BitBlt(0,0,bmpWidth, bmpHeight, &srcDC,bmpWidth*i,0,SRCCOPY) )
{
Rz=FALSE;
break;
}
}
srcDC.SelectObject(pOldBitmap1);
//memDC.SelectObject(pOldBitmap2);
srcDC.DeleteDC();
memDC.DeleteDC();
src.DeleteObject();
return Rz;
}