MFC飞机大战开发之绘制图像

这一节来演示一种绘图的方法,让我们的程序真正的看得见~ 哈哈哈,而不再是命令行的黑框框。 采用的是二重缓冲的方式

先说一下当前工程的启动过程,省略一部分,直接看到我们的ChildView.cpp这个文件,里边有两个函数BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)void CChildView::OnPaint() ,可以简单的理解为,前者是窗口出现之间,程序所做的事情,所以你可以把游戏的一些初始化的操作放在这个函数里边,后者就是绘制这个窗口,每执行一次这个函数,就会重新绘制一下当前的窗口,你所看到的动画啊,游戏啊 都是通过一直执行这个函数实现的动画的效果的~,好啦~ 说了这么一堆话了,来开始贴上我们的飞机们把~

第一步:

找到ChildView.h 这个头文件,在里边添加一些我们所需要的属性,

// 特性
public:
    //绘图相关
    CRect m_client;//记录客户区大小
    CDC m_cacheDC;   //缓冲DC  
    CBitmap m_cacheCBitmap;//缓冲位图

然后转到ChildView.cpp这个文件,修改OnPaint函数

void CChildView::OnPaint() 
{
    CPaintDC dc(this); // 用于绘制的设备上下文

    // TODO: 在此处添加消息处理程序代码

    // 不要为绘制消息而调用 CWnd::OnPaint()

    //获取窗口DC指针  
    CDC *cDC = this->GetDC();
    //获取窗口大小  
    GetClientRect(&m_client);
    //创建缓冲DC  
    m_cacheDC.CreateCompatibleDC(NULL);
    m_cacheCBitmap.CreateCompatibleBitmap(cDC, m_client.Width(), m_client.Height());
    m_cacheDC.SelectObject(&m_cacheCBitmap);

    //————————————————————开始绘制——————————————————————  

    //把要绘制的内容都贴到m_cacheDC当中就可以了

    Manager.Draw(&m_cacheDC);

    //最后将缓冲DC内容输出到窗口DC中  
    cDC->BitBlt(0, 0, m_client.Width(), m_client.Height(), &m_cacheDC, 0, 0, SRCCOPY);

    //————————————————————绘制结束—————————————————————  

    //在绘制完图后,使窗口区有效  
    ValidateRect(&m_client);
    //释放缓冲DC  
    m_cacheDC.DeleteDC();
    //释放对象  
    m_cacheCBitmap.DeleteObject();
    //释放窗口DC  </
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值