填充背景

Beachboy 2000-08-16 12:48:00
我写了一个SDI程序,我想用一个小位图来填充背景,于是我在擦除背景的消息中利用位图创建了一个CBrush对象,将其选入DC中,结果背景并没有出现。

我应该怎么做才能用位图填充背景呢?

新手求教!
...全文
549 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Beachboy 2000-08-20
  • 打赏
  • 举报
回复
我重新装一了遍WINDOWS,然后重新编译了一遍源程序,一切又恢复正常了,所以原因可能出在WINDOWS上,但是我想破脑袋也想不出究竟是怎么回事!

非常感谢各位对我的帮助,由于开始的时候我认为问题很简单,所以分数太少了,各位请见谅!
Beachboy 2000-08-20
  • 打赏
  • 举报
回复
为什么加不了分?记得以前选择“我的问题”进入后就会出现加分的编辑框。为什么现在却不出现了。
xiaohuating03 2000-08-19
  • 打赏
  • 举报
回复
你将你的程序寄给我,我来半你解决。
Beachboy 2000-08-19
  • 打赏
  • 举报
回复
我在ONPAINT,ONDRAW,ONERASEBKGND中都试过这段代码。
在OnDraw中肯定要把dc.???换成pDC->??? ,否则连编译都不能通过。

在OnEraseBkgnd中调用时,为了防止窗口重绘背景,必须把return CView::OnEraseBkgnd(pDC);删掉,换成return TRUE,这个我知道啊。
packager 2000-08-19
  • 打赏
  • 举报
回复
那就很奇怪了,因为我们每个人都可以成功,其实通过新建一个MFC SDI Project,加入那段代码,加入一个bitmap资源,整个过程不到一分钟就可以看到正确结果。
也许是你的系统是不是有什么问题, 你的程序是不是在别的模块有什么问题,或者是一些其实非常简单的不被注意的错误。
如果有了结果,不妨告诉大家。
packager 2000-08-18
  • 打赏
  • 举报
回复
对了,你的代码中的dc是怎么得来的?我在OnDraw中,是把dc.???换成pDC->???
packager 2000-08-18
  • 打赏
  • 举报
回复
你的那段代码没有错。我说的“被用做Brush的Bitmap有个限制,就是它的如果宽度和高度不能大于8x8,如果比8x8大,系统也只取这个位图左上角8x8大小作为填充的Brush”也没有错。
我很简单地生成一个SDI,在OnDraw那里加上那段代码,我用了一个大于8x8的bitmap,结果正如预料中那样,一切正常。
BTW:如果你是在OnEraseBkgnd中加那段代码,你必须把appwizard生成的那句
return CView::OnEraseBkgnd(pDC);删掉,换成return TRUE;
qiujoe 2000-08-18
  • 打赏
  • 举报
回复
给我看看
Beachboy 2000-08-18
  • 打赏
  • 举报
回复
我看了一下,我的左上角是灰色的,我将其中几个点改成红色,结果矩形内还是白色背景。

CreatePatternBrush有这样的限制?那CBrush* pBrush = new CBrush(&m_bitmap)有没有这样的限制?

BTW:如果各位想看看我的源程序,可以写信给我,我觉得真的好奇怪!是不是我的机器有什么问题了?我可是刚装的WINDOW啊。
packager 2000-08-18
  • 打赏
  • 举报
回复
你去看一下你的IDB_BITMAP_BACK这个位图,它的左上角是不是就是白色的。
在CreatePatternBrush这个函数中,能够被用做Brush的Bitmap有个限制,就是它的如果宽度和高度不能大于8x8,如果比8x8大,系统也只取这个位图左上角8x8大小作为Brush来填充。
Beachboy 2000-08-18
  • 打赏
  • 举报
回复
我的代码如下:
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP_BACK);
CBrush brush;
brush.CreatePatternBrush(&bitmap);
CBrush* pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(0,0,200,200);
dc.SelectObject(pOldBrush);

结果矩形内为白色背景,根本没有出现位图,如果将一个RGB值选入CBRUSH,则能得到正确的结果,真的不明白是怎么回事。
redteasoft 2000-08-18
  • 打赏
  • 举报
回复
在CMyColorView::OnPaint(..)中加入xiaohuating的代码就可以的!
xiaohuating03 2000-08-17
  • 打赏
  • 举报
回复
我请你查证一下:
1。最好你兴建一个工程来试一下。
2。是在那个函数中用我的代码。你的dc是怎么来的。
3。你是否已建了一个IDB_BITMAP1的资源位图。
如你需要我可以将我的文件原码寄给你。
xiaohuating03 2000-08-17
  • 打赏
  • 举报
回复
我请你查证一下:
1。最好你兴建一个工程来试一下。
2。是在那个函数中用我的代码。你的dc是怎么来的。
3。你是否已建了一个IDB_BITMAP1的资源位图。
Beachboy 2000-08-17
  • 打赏
  • 举报
回复
用BITBLT函数是可以把图片画上去,可我现在想知道的是为什么我用位图创建了一个画刷后,不能填充矩形?

Xiaohuating贴的代码我早就试过,矩形内一片空白,没有出现位图。
qiujoe 2000-08-17
  • 打赏
  • 举报
回复
那你试一试xiaohuating的代码,应该是对的。
qiujoe 2000-08-16
  • 打赏
  • 举报
回复
你改用bitblt()函数就可以实现你的要求了
xiaohuating03 2000-08-16
  • 打赏
  • 举报
回复
它已在我的电脑上运行正常,如此:
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMPA1);
CBrush brush;
brush.CreatePatternBrush(&bitmap);
dc->SelectObject(&brush);
dc->Rectangle(0,0,200,200);

试一试??
Beachboy 2000-08-16
  • 打赏
  • 举报
回复
我需要的是用一个小的BITMAP来填充CRect,不是拉伸。
OnDraw OnPain中我都试过。
xiaohuating03 2000-08-16
  • 打赏
  • 举报
回复
画在OnDraw中试一试。
加载更多回复(2)

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧