用bmp图片作FormView的背景在OnEraseBkgnd中实现,可是发现背景跟着窗口大小而被拉伸,使背景扭曲很难看,怎样才能做出象NetAnts左帧那样随窗口大小使背景平铺?

baobao 2001-08-09 02:53:53
以下是我使用的背景算法,怎样才能达到随窗口平铺的效果?
BOOL LeftFormView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CDC dcmem;
dcmem.CreateCompatibleDC(pDC);
CBitmap bmp ;
bmp.LoadBitmap(IDB_LEFTBG);
CBitmap* pold =(CBitmap*)dcmem.SelectObject(&bmp);
BITMAP bm;
bmp.GetBitmap(&bm);
int swidth =bm.bmWidth;
int sheight =bm.bmHeight;
RECT rc;
GetClientRect(&rc);
int width =rc.right-rc.left;
int height =rc.bottom-rc.top;
pDC->StretchBlt(0,0,width,height,&dcmem,0,0,swidth,sheight,SRCCOPY);
dcmem.SelectObject(pold);
bmp.DeleteObject();
return FALSE;
//return CFormView::OnEraseBkgnd(pDC);

// return CFormView::OnEraseBkgnd(pDC);
}
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tigal 2001-12-12
  • 打赏
  • 举报
回复
我喜欢
jiach 2001-08-10
  • 打赏
  • 举报
回复
hheys的算法,最终是平铺吧)
ruixp 2001-08-10
  • 打赏
  • 举报
回复
对,上面这个做法我在编程技巧里面见过
hheys 2001-08-10
  • 打赏
  • 举报
回复
你以上的做法太罗嗦,你用下面的代码替换掉你上面的代码包你看到意想不到的效果。
CBitmap m_bmp;
m_bmp.LoadBitmap(IDB_YOURBMP);

CRect rect;
GetClientRect(&rect);

CBrush m_brush(&m_bmp);

pDC->FillRect(&rect,&m_brush);

return FALSE;

运行一下是不是很酷!哈哈
baobao 2001-08-09
  • 打赏
  • 举报
回复
能否给出算法,万分感谢!
gameboy999 2001-08-09
  • 打赏
  • 举报
回复
平铺就是把你上面那句用个for循环代替,自己计算一下就可以了。(我做过,但代码不在这)

16,551

社区成员

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

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

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