VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 747|回复: 5

内存DC问题?各位,帮忙看看……

[复制链接]

2

主题

8

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-3-22 23:00:02 | 显示全部楼层 |阅读模式
我做一个画图程序,使用内存DC,原代码如下:(C*View的OnDraw(CDC* pDC)函数中)----- 但是运行后,整个View区域是黑色的?

CDC dc;
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap;

CRect rect;
GetClientRect(&rect);
//========================================================
if (dc.CreateCompatibleDC(pDC))
{
        if (bitmap.CreateCompatibleBitmap(pDC,
                                     rect.Width(),
                                 rect.Height()))
        {
                OnPrepareDC(&dc,NULL);
                pDrawDC = &dc;
                pOldBitmap = dc.SelectObject(&bitmap);
        }
}
//========================================================
pDoc->Draw(pDrawDC,ViewID);
pDrawDC->TextOut(1,1,*str);
dc.DPtoLP(&rect);
//========================================================
if ( pDrawDC != pDC )
{
        pDC->BitBlt( 0, 0,rect.Width(), rect.Height(),
                  &dc, 0, 0, SRCCOPY);
        dc.SelectObject(pOldBitmap);
        bitmap.DeleteObject();
}
各位帮忙给看看,是什么问题?
回复

使用道具 举报

1

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-7-3 12:00:01 | 显示全部楼层
用CreateCompatibleBitmap建立的是原始的位图,是黑白色的
应该直接loadimage加载位图文件,然后
selectobject 内存dc中就可以了
回复

使用道具 举报

0

主题

14

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-7-3 14:45:01 | 显示全部楼层
CreateCompatibleBitmap创建的位图默认是黑色的,在往上画之前,必须刷成你要的底色譬如白色。
回复

使用道具 举报

0

主题

8

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-7-5 20:30:01 | 显示全部楼层
楼上s说得对!
用CreateCompatibleBitmap建立的是原始的位图,默认是黑白色的
回复

使用道具 举报

2

主题

8

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-7-8 12:30:01 | 显示全部楼层
再问一个比较菜的问题:怎么将位图的底色刷成白色?
回复

使用道具 举报

2

主题

8

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-7-27 09:00:01 | 显示全部楼层
原因是我在OnPrepareDC()中有SetMapMode(MM_TWIPS)语句;当我把这条语句注释掉后,就可以出正常结果了,为什么呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表