| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2286 人关注过本帖
标题:为什么加载的位图动画不显示呢?
只看楼主 加入收藏
panfeng415
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2015-2-7
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
为什么加载的位图动画不显示呢?
附件中有源码,大家帮忙看看吧,有8张位图,设了个timer,想贴到对话框上,为什么不显示呢,位图路径是对的,bitblt 函数使用有问题?
程序代码:
void CDGrainDlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    static int i =5;
    CString str;
    str.Format(L"\%d0.bmp",i);
    MemDC mdc(str);
    CClientDC dc(this);
    dc.BitBlt(10,10,mdc.GetWidth(),mdc.GetHeight(),&mdc,0,0,SRCCOPY);
    if (++i>12)
        i=5;
    CDialogEx::OnTimer(nIDEvent);
}


[ 本帖最后由 panfeng415 于 2015-5-7 16:18 编辑 ]
搜索更多相关主题的帖子: 对话框 color 动画 
2015-05-07 16:10
panfeng415
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2015-2-7
收藏
得分:0 
程序代码:
class MemDC :
    public CDC
{
    CSize m_size;
public:
    MemDC(void);
    
    ~MemDC(void);
    
    //加载进程内位图的构造函数
    MemDC(UINT nBitmap,CDC* pDC=NULL)
    {
        LoadBitmap( nBitmap,pDC);
    }
    //加载进程外位图的构造函数
    MemDC(LPCWSTR szFile, CDC* pDC=NULL)
    {
        LoadBitmap( szFile,  pDC);
    }
    //创建空白位图的构造函数
    MemDC(int cx, int cy,CDC* pDC=NULL)
    {
        Create( cx, cy, pDC);
    }
    int GetWidth()
    {return m_size.cx;}
    int GetHeight()
    {return m_size.cy;}
    BOOL DeleteDC()
    {
        if (!GetSafeHdc())
            return FALSE;
        CBitmap *pBitmap=GetCurrentBitmap();
        if(pBitmap)
            pBitmap->DeleteObject();
        return CDC::DeleteDC();
    }
    //创建空白位图
    BOOL Create(int cx, int cy,CDC* pDC=NULL)
    {
        CBitmap bmp;
        if (!bmp.CreateCompatibleBitmap(pDC,cx,cy))
            return FALSE;
        m_size.cx=cx;
        m_size.cy=cy;
        CreateCompatibleDC(pDC);
        SelectObject(&bmp);
        return TRUE;
    }
    //进程内资源加载

    BOOL  LoadBitmap(UINT nBitmap,CDC* pDC=NULL)
    {
        CBitmap bmp;
        if (!bmp.LoadBitmap(nBitmap))
            return FALSE;
        BITMAP bm;
        bmp.GetBitmap(&bm);
        m_size.cx=bm.bmWidth;
        m_size.cy=bm.bmHeight;
        CreateCompatibleDC(pDC);
        SelectObject(&bmp);
        return TRUE;
    }
    //进程外位图图片加载
    BOOL LoadBitmap(LPCWSTR szFile, CDC* pDC=NULL)
    {
        HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,szFile,IMAGE_BITMAP,
            0,0,LR_LOADFROMFILE);
        if (!hBitmap)
            return FALSE;
        BITMAP bm;
        GetObject(hBitmap,sizeof(bm),&bm);
        m_size.cx=bm.bmWidth;
        m_size.cy=bm.bmHeight;
        CreateCompatibleDC(pDC);
        SelectObject(hBitmap);
        return TRUE;

    }
};

2015-05-07 16:19
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:10 
void CDGrainDlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    static int i =5;
    CString str;
    str.Format(L"\%d0.bmp",i);
    MemDC mdc(str);
    CClientDC dc(this);
    dc.BitBlt(10,10,mdc.GetWidth(),mdc.GetHeight(),&mdc,0,0,SRCCOPY);
    if (++i>12)
        i=5;
    CDialogEx::OnTimer(nIDEvent);
}
只看了前面这一段,我觉得肯定是因为每一次Timer事件做的第一件事都是把i设置为5,所以每一次载入的都是"50.bmp"这幅图,后面的++i语句没有起到作用,所以图画才是静止的。你试试在Timer事件外面初始化i的值看是不是就可以了
2015-05-07 21:21
快速回复:为什么加载的位图动画不显示呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047518 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved