解决方案 »

  1.   

    找个gif图片,然后贴图不是更简单一些?
      

  2.   

    主要是想学学简单的动画,不过你的回答也是我疑惑的地方,MFC为什么要搞一些乌七八糟的GDI,直接引用别人专业的素材就可以了,难道程序员都要会画画?就好像win系统自带的画图一样。跟小孩子过家家一样的东西。
      

  3.   

    第一,GDI是为了那些图形处理软件还有各种游戏引擎和UI设计的,因为那些需要这个,第二,想做出你说的这种效果,我有个想法用MFC里面的CStatic类显示图片,然后不断修改他的坐标达到动画效果
      

  4.   

    void CChildView::OnPaint()
    {
    CPaintDC dc(this); // 用于绘制的设备上下文 // TODO:  在此处添加消息处理程序代码 // 不要为绘制消息而调用 CWnd::OnPaint()
    CDC *cDC = this->GetDC();
    GetClientRect(&m_client);
    m_cacheDC.CreateCompatibleDC(NULL);
    m_cacheCBitmap.CreateCompatibleBitmap(cDC, m_client.Width(), m_client.Height());
    m_cacheDC.SelectObject(&m_cacheCBitmap);
    ValidateRect(&m_client);
    m_gameback.Draw(m_cacheDC, m_client);

    for (int i = 0; i < m_cardsnum; i++)
    m_card.Draw(m_cacheDC, cardx + i * 4, cardy, 71, 96, 923, 192, 71, 96);//准备一堆牌,并且发牌时慢慢减少一张牌


    if (isfapai)
    {
    int kk = 54 - m_cardsnum; //kk就是已经发的扑克牌数 在ONTIMER中m_cardsnum- -;
    for (int j = 0; j < kk; j++)
    {
    timer = (int)(j / 3+1); //timer就是发的轮数,3个人都发过了算一轮。
    if (j % 3 == 0)
    for (int i = 0; i <timer; i++) m_card.Draw(m_cacheDC, play1x, play1y + i * 8, 71, 96, 923, 192, 71, 96);
    if (j % 3 == 2)
    for (int i = 0; i < timer; i++)
    m_card.Draw(m_cacheDC, play2x, play2y + i * 8, 71, 96, 923, 192, 71, 96);
    if (j % 3 == 1)
    for (int i = 0; i < timer; i++)
    m_card.Draw(m_cacheDC, play3x + i * 14, play3y, 71, 96, 923, 192, 71, 96);
    }
    }

    cDC->StretchBlt(0, 0, m_client.Width(), m_client.Height(), &m_cacheDC, 0, 0, m_client.Width(), m_client.Height(), SRCCOPY);
    m_cacheDC.DeleteDC();
    m_cacheCBitmap.DeleteObject();
    ReleaseDC(cDC);
    }
    图片的LOAD 在PreCreateWindow中,其他变量也很好理解。测试逻辑是对的。但问题是,不知道是不是循环太多。运行起来比较慢。如果后面再加飞牌的动画效果更糟糕了。有好的逻辑吗?或者问题在哪里??