MFC缩放后的图片移动
MFCVS2005。已经实现了图片的移动和缩放,但是缩放后每次移动图片都会恢复原来大小,每次都白缩放了,求达人解答下。是复制复本呢,还是找到缩放后图片的句柄呢,求详细点的...
MFC VS2005 。已经实现了图片的移动和缩放,但是缩放后每次移动图片都会恢复原来大小,每次都白缩放了,求达人解答下。是复制复本呢,还是找到缩放后图片的句柄呢,求详细点的解答
展开
1个回答
展开全部
你是怎么缩放的。移动后会刷新窗口,所以应响应WM_PAINT或WM_ERASEBKGND消息时绘制缩放后的图片。方法是你可以保存缩放后的图片到内存DC。
更多追问追答
追问
能不能简单写下复制到内存DC,然后获得DC句柄呢,你的回答让我了解不少了,先谢谢了
追答
//以下代码用API写,可以用在Win32或MFC,如果用MFC的类实现原理一样(CDC、CWindowDC、CPaintDC、CBitmap)
//----将源DC存入内存DC
//以下三个参数是源DC的信息,具体需要自己设置。如一个窗口的DC、窗口的宽、窗口的高,那么之后实现的就是将窗口DC的内容存入内存DC
HDC hDC;//=...;源DC
int width;//源DC宽
int height;//源DC高
//以下为创建内存DC相关
HDC hRawMemDC=::CreateCompatibleDC(hDC);//创建内存DC
HBITMAP hRawBmp=::CreateCompatibleBitmap(hDC,width,height);//创建内存DC的画布
HBITMAP hOldRawBmp=(HBITMAP)::SelectObject(hRawMemDC,(HBITMAP)hRawBmp);//将画布装入内存DC,并保存原有信息(为了系统正常释放DC,用完DC最好还原其原始状态)
//以下是调用BitBlt将源DC(参数6)内容存入目标DC(参数1),其中采用拷贝模式SRCCOPY
::BitBlt(hRawMemDC,0,0,width,height,hDC,0,0,SRCCOPY);//将源DC的内容拷贝到内存DC
//----------------------------
/*----DC位块化处理的函数
类似BitBlt的DC位块化处理函数有很多,如:
BitBlt
StretchBlt 可实现缩放
TransparentBlt
AlphaBlend (可实现半透明)
----------------------------*/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询