以下的程序想实现的是将目录下的11张图片先全部缩画到后备dc上,
然后将后备dc画到屏幕上,现在程序的问题是如果我直接画到屏幕上就没事
通过后备来画怎么都不行
各位帮忙
pDC = GetDC();
m_DC.CreateCompatibleDC(pDC);
TemDC.CreateCompatibleDC(pDC);
for (int i=1; i<=11; i++)
{
strcpy(szFileName, "C:\\Program Files\\okTTemp1\\");
char aa[64];
_itoa(i,aa,10);
strcat(aa,".bmp");
strcat(szFileName,aa);
hBitmap= (HBITMAP)LoadImage(NULL, szFileName, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE);
TemDC.SelectObject(hBitmap);
StretchBlt(m_DC.m_hDC,i%10*103,(i/10)*100, 100, 96, TemDC.m_hDC, 0,0,768,576,SRCCOPY);
}
pDC->BitBlt(0,0,1024,576,&m_DC,0,0,SRCCOPY);
ReleaseDC(pDC);
然后将后备dc画到屏幕上,现在程序的问题是如果我直接画到屏幕上就没事
通过后备来画怎么都不行
各位帮忙
pDC = GetDC();
m_DC.CreateCompatibleDC(pDC);
TemDC.CreateCompatibleDC(pDC);
for (int i=1; i<=11; i++)
{
strcpy(szFileName, "C:\\Program Files\\okTTemp1\\");
char aa[64];
_itoa(i,aa,10);
strcat(aa,".bmp");
strcat(szFileName,aa);
hBitmap= (HBITMAP)LoadImage(NULL, szFileName, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE);
TemDC.SelectObject(hBitmap);
StretchBlt(m_DC.m_hDC,i%10*103,(i/10)*100, 100, 96, TemDC.m_hDC, 0,0,768,576,SRCCOPY);
}
pDC->BitBlt(0,0,1024,576,&m_DC,0,0,SRCCOPY);
ReleaseDC(pDC);
LoadImage 需要DeleteObject
一般SelectObject()后因该恢复原来的对象到设备中TemDC.SelectObject()的参数是 CBitmap* 不是HBITMAP
还有看看你的位图是否load成功了
m_DC.CreateCompatibleDC(pDC);
//must select a bitmap in m_DC...
CBitmap Bitmap1,Bitmap2;
//自己指定宽、高
Bitmap1.CreateCompatibleBitmap(pDC,1024,576);
CBitmap* pOldBitmap = (CBitmap *)m_DC.SelectObject(&Bitmap1); TemDC.CreateCompatibleDC(pDC);
for (int i=1; i<=11; i++)
{
strcpy(szFileName, "C:\\Program Files\\okTTemp1\\");
char aa[64];
_itoa(i,aa,10);
strcat(aa,".bmp");
strcat(szFileName,aa);
hBitmap= (HBITMAP)LoadImage(NULL, szFileName, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE);
//Attach to cbitmap
Bitmap2.Attach(hBitmap);
CBitmap *pOld = (CBitmap *)TemDC.SelectObject(&Bitmap2);
StretchBlt(m_DC.m_hDC,i%10*103,(i/10)*100, 100, 96, TemDC.m_hDC, 0,0,768,576,SRCCOPY);
//释放
TemDC.SelectObject(pOld);
Bitmap2.Detach();
DeleteObject(hBitmap);
}
pDC->BitBlt(0,0,1024,576,&m_DC,0,0,SRCCOPY);
m_DC.SelectObject(pOldBitmap);
ReleaseDC(pDC);
//must select a bitmap in m_DC...
very good!
我也学到了!谢谢!