关于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中了吗?
展开
 我来答
888atao
推荐于2016-10-07 · TA获得超过330个赞
知道小有建树答主
回答量:376
采纳率:0%
帮助的人:303万
展开全部
可以把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);
任明星Ming
2013-10-09 · TA获得超过798个赞
知道小有建树答主
回答量:1061
采纳率:100%
帮助的人:1152万
展开全部
SelectObject是将指定的位图、画笔或其他图像资源,载入至该CDC中。执行BitBlt或其他描绘前,需要先载入需要描绘的资源。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式