70,036
社区成员
发帖
与我相关
我的任务
分享
case WM_PAINT:
{
ValidateRect( h , NULL );
hdc = GetDC( h );
hmdc= CreateCompatibleDC( hdc );
printf("%d\n", hmdc );
SelectObject( hmdc , hbitmap );
BitBlt( hdc , 0 , 0 , cx , cy , hmdc , 0, 0 , SRCCOPY );
SelectObject( hmdc , hbitmap2 );
// DeleteDC( hmdc );
ReleaseDC( h , hdc );
return 0;
}
,可是为什么会这样呢
?创建的是不同的DC,为什么需要在删除前把原位图加进去?
我测试了下,之后图片加入新DC得到的返回值确实是0,也就是加入失败,也就是说这些DC共用的同一个位图吗?不应该吧
case WM_PAINT:
{
HBITMAP hOldBitmap;
ValidateRect( h , NULL );
hdc = GetDC( h );
hmdc= CreateCompatibleDC( hdc );
//printf("%d\n", hmdc );
hOldBitmap = SelectObject( hmdc , hbitmap ); //加了接收返回值
BitBlt( hdc , 0 , 0 , cx , cy , hmdc , 0, 0 , SRCCOPY );
SelectObject( hmdc , hOldBitmap); //将hbitmap2改为hOldBitmap
//DeleteDC( hmdc );
ReleaseDC( h , hdc );
return 0;
}
hOldBitmap = SelectObject(hmdc, hbitmap);
BitBlt(hdc, 0, 0, cx, cy, hmdc, 0, 0, SRCCOPY);
SelectObject(hmdc, hOldBitmap); //将原来的放回去