关于VC++贴图的问题,bitblt
hdc=GetDC(hWnd);mdc=CreateCompatibleDC(hdc);bufdc=CreateCompatibleDC(hdc);bg=(HBITMAP...
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);
bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
问下,为什么这样贴图,窗口就没有任何显示呢?
为什么这样写
SelectObject(mdc,bg);
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
就能显示图片?中间加了一个过渡就不能显示了?
SelectObject(mdc, bg)函数到底执行了什么功能,是将bg加载到mdc中了吗? 展开
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);
bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
问下,为什么这样贴图,窗口就没有任何显示呢?
为什么这样写
SelectObject(mdc,bg);
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
就能显示图片?中间加了一个过渡就不能显示了?
SelectObject(mdc, bg)函数到底执行了什么功能,是将bg加载到mdc中了吗? 展开
2个回答
展开全部
可以把bmp理解成画布,DC是绘画的架子,PEN、LINE、BITBLT之类的是工具;
你这个代码里里,把画布准备好了(bg),也把画布跟bufdc装在一起了;然后想通过BITBLT把它给绘制到MDC里面;可是问题是,你的MDC只是一个架子,MDC里面还没有画布呢,当然就失败了;
总结问题所在,就是你的mdc里面,没有selectobject过BMP,所以有问题。
解决方法:
在你的SelectObject下面,再加两行代码:
SelectObject(bufdc,bg); // 把bg画布放到bufdc的架子上
mbmp=CreateCompatibleBitmap(hdc, 640, 480); // 新代码,创建个画布mbmp
SelectObject(mdc, mbmp); // 新代码,把mbmp画布放到MDC这个架子上
// 现在应该可以了
BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
你这个代码里里,把画布准备好了(bg),也把画布跟bufdc装在一起了;然后想通过BITBLT把它给绘制到MDC里面;可是问题是,你的MDC只是一个架子,MDC里面还没有画布呢,当然就失败了;
总结问题所在,就是你的mdc里面,没有selectobject过BMP,所以有问题。
解决方法:
在你的SelectObject下面,再加两行代码:
SelectObject(bufdc,bg); // 把bg画布放到bufdc的架子上
mbmp=CreateCompatibleBitmap(hdc, 640, 480); // 新代码,创建个画布mbmp
SelectObject(mdc, mbmp); // 新代码,把mbmp画布放到MDC这个架子上
// 现在应该可以了
BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询