VerySource

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

CreateCompatibleBitmap创建的位图默认是黑色的,在往上画之前,必须刷成你要的底色譬如白色

[复制链接]

2

主题

8

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-11-25 09:30:02 | 显示全部楼层 |阅读模式
如题!!!
回复

使用道具 举报

0

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-11-25 09:45:01 | 显示全部楼层
下面的例子是刷成白色背景       
HDC hMemDC = ::CreateCompatibleDC(hdc);
        if(hMemDC == NULL)
                return NULL;
        CSize cs(GetWidth()+GetPenWidth(),GetHeight()+GetPenWidth());
        HBITMAP hBmp = ::CreateCompatibleBitmap(hdc,cs.cx,cs.cy);
         .....

        HBITMAP hOldBmp =(HBITMAP) ::SelectObject(hMemDC,hBmp);
       
        PatBlt(hMemDC,0,0,cs.cx,cs.cy,WHITENESS);

         ........
       
回复

使用道具 举报

0

主题

14

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-11-25 10:15:01 | 显示全部楼层
CDC::FillSolidRect就可以了
回复

使用道具 举报

2

主题

8

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-11-25 11:00:01 | 显示全部楼层
我做一个画图程序,使用内存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();
}
各位帮忙给看看,是什么问题?
回复

使用道具 举报

2

主题

8

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-11-25 11:15:01 | 显示全部楼层
用CDC::FillSolidRect()根本就不起作用!怎么办?
回复

使用道具 举报

0

主题

14

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-11-25 11:30:01 | 显示全部楼层
不可能不起作用
pOldBitmap = dc.SelectObject(&bitmap);
dc.FillSolidRect(&rect,RGB(255,255,255));
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-11-25 11:45:02 | 显示全部楼层
你把它弄成白色的肯定是会起作用的,不行是你其它地方错了,不过要是想弄成其它颜色就有问题了,我也正在为这个问题苦脑呢
你看下面的代码:
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-11-25 12:00:01 | 显示全部楼层
void CDBDCView::MemDraw(CDC* pDC)
{
CRect rect;
GetClientRect(rect);
CDC memDC;
CBitmap temBmp;
memDC.CreateCompatibleDC(pDC);
temBmp.CreateCompatibleBitmap(&memDC,rect.Width(),rect.Height());
CBitmap* pOldBmp=memDC.SelectObject(&temBmp);
CBrush brush(RGB(0,255,255));
CBrush* pOldBrush=memDC.SelectObject(&brush);
memDC.Rectangle(rect);
COLORREF oldColor;
oldColor=memDC.SetBkColor(RGB(255,0,0));
memDC.TextOut(100,100,"verysource");
pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,
0,0,SRCCOPY);
memDC.SelectObject(pOldBmp);
memDC.SetBkColor(oldColor);
}
上面设置的字体背景为红色,但显示时全是黑色的把字都盖了
那个定义的也不行刷子
帮我解释一下这个问题,有什么解决方法
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-11-25 12:15:01 | 显示全部楼层
嘿嘿,以前做的时候加载了一个24bit的位图
做最下面的画布。
回复

使用道具 举报

0

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-11-25 12:30:01 | 显示全部楼层
void CDBDCView::MemDraw(CDC* pDC)
{
CRect rect;
GetClientRect(rect);
   CDC memDC;
   CBitmap temBmp;
   memDC.CreateCompatibleDC(pDC);
>>>temBmp.CreateCompatibleBitmap(&memDC,rect.Width(),rect.Height());
   CBitmap* pOldBmp=memDC.SelectObject(&temBmp);
   CBrush brush(RGB(0,255,255));
   CBrush* pOldBrush=memDC.SelectObject(&brush);
   memDC.Rectangle(rect);
   COLORREF oldColor;
   oldColor=memDC.SetBkColor(RGB(255,0,0));
   memDC.TextOut(100,100,"verysource");
   pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);
   memDC.SelectObject(pOldBmp);
>>>memDC.SelectObject(pOldBrush);
   memDC.SetBkColor(oldColor);
}

FROM MSDN:
A memory DC exists only in memory. When the memory DC is created, its display surface is exactly one monochrome pixel wide and one monochrome pixel high. Before an application can use a memory DC for drawing operations, it must select a bitmap of the correct width and height into the DC.
回复

使用道具 举报

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

本版积分规则

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

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