如何在SDI中的左上脚做一个动画图标? 如题,我搜索了一下,怎么搜索的相关内容都连不上去啊?在csdn上啊! 谢谢帮助! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想在右上角做一个动画图标,和IE的一样,不知该怎么做?一起UP!你搜索的贴子早于某个日期时,贴子的内容已经被删除了,但是标题还在,CSDN这一点做的真是差! 这个问题实际上是关于BMP的问题,采用CImageList来管理动画需要的多幅位图现本人解答如下:1. 添加AnimateIcon.cpp和AnimateIcon.h 到工程文件。2. 创建位图资源,并按序放置所有位图文件(16*16)。3. 在mainframe.h 开始添加#include "AnimateIcon.h" 。4. 添加下面的protected成员到主框架类: CAnimateIcon m_animIcon; UINT m_timerID;5. 添加下面的代码到主框架的OnCreate成员中: m_animIcon.SetImageList(IDB_ANIM_IMGLIST,4,RGB(0,0,0)); m_timerID = this->SetTimer(99,500,NULL);6. 为主框架类创建OnDestroy()函数,并添加下面代码: CFrameWnd::OnDestroy(); if(m_timerID != 0) KillTimer(m_timerID);7. 添加WM_TIMER处理器到主框架类,并添加下面代码: m_animIcon.ShowNextImage();编译并运行上述代码,并改变IDR_MAINFRAME图标资源即可。 你真有福气,我刚好写了一个。现献丑如下:首先我用的是和楼上基本相同的办法,实现过程略有不同。1 创建动画帧,也就是几幅连续变化的位图或者图标;2 添加成员变量CPictureHolder m_AVI,这是用来显示显示图片的,要使用这个空件需要在头文件中加上#include <afxctl.h>。2 在MainFrame里面定义成员变量HICON数组,当然如果你创建的动画帧是位图则应该定义HBITMAP数组。然后的OnCreate()函数里面Load所有的图片,方法如下: for(int i = 0;i < n ;i++) PicArray[i] = LoadICON(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_ANIMATE1 + i))3 在开始播放的时候设置计时器SetTimer(0,100,NULL)4 在MainFrame的OnTimer()函数里面修改当前显示的图标的ID m_nFrameNo++; DrawAVI();5 DrawAVI函数void CMainFrame::DrawAVI(){ CRect ClientRect ; GetClientRect(&ClientRect); if(ClientRect.Width() < 500 || ClientRect.Height() < 40) return ;//当主窗口的宽度和高度不够时就不要画了。 else { CDC* pDC = GetDC(); m_AVIRect.top = 2; m_AVIRect.left = ClientRect.right - 24; m_AVIRect.right = ClientRect.right - 2; m_AVIRect.bottom = 24;// pDC->SelectStockObject(BLACK_BRUSH);//设置背景色 pDC->Rectangle(&m_AVIRect); InflateRect(&m_AVIRect,1,1); pDC->DrawEdge(&m_AVIRect,EDGE_BUMP,BF_RECT); InflateRect(&m_AVIRect,-4,-4); //以上代码是在播放动画的地方画一个矩形框,增加效果 m_AVI.CreateFromIcon(m_hMainIconAVI[m_nFrameNo % 11]); m_AVI.Render(pDC,m_AVIRect,m_AVIRect); ReleaseDC(pDC); }}void CMainFrame::OnPaint() { DrawAVI();}6 在主窗口改变大小的时候应该重画。void CMainFrame::OnSize(UINT nType, int cx, int cy) { CMDIFrameWnd::OnSize(nType, cx, cy); Invalidate();}如果要播放真正的AVI文件,有现成的控件,估计自己做也不会很难,如果你有兴趣可以研究一下。 两个进程间如何发送不同数据 用com开发activex视频播放插件 win7下添加ocx时说“不支持此接口” vc++一个工程里面为什么不能有两个main函数呢 为什么不能调用另一个对话框的EDIT值 0xC0000005:Access Violation,急! [散分]业余时间录了几首歌,欢迎大家欣赏! 如何设置一个具有hdc(DIB)属性的对象的字体大小和字体,紧急求助! 请高手帮忙,关于图象处理方面 DIBAPI.cpp 调用问题,先谢谢了! 急!VC中怎样加定时器与后台运行的Thread中? 5个Winsock api问题. 请问各位,怎么实现采用挂钩的方式截获自己注册的消息
你搜索的贴子早于某个日期时,贴子的内容已经被删除了,但是标题还在,CSDN这一点做的真是差!
1. 添加AnimateIcon.cpp和AnimateIcon.h 到工程文件。2. 创建位图资源,并按序放置所有位图文件(16*16)。3. 在mainframe.h 开始添加#include "AnimateIcon.h" 。4. 添加下面的protected成员到主框架类:
CAnimateIcon m_animIcon;
UINT m_timerID;5. 添加下面的代码到主框架的OnCreate成员中:
m_animIcon.SetImageList(IDB_ANIM_IMGLIST,4,RGB(0,0,0));
m_timerID = this->SetTimer(99,500,NULL);6. 为主框架类创建OnDestroy()函数,并添加下面代码:
CFrameWnd::OnDestroy();
if(m_timerID != 0)
KillTimer(m_timerID);7. 添加WM_TIMER处理器到主框架类,并添加下面代码:
m_animIcon.ShowNextImage();编译并运行上述代码,并改变IDR_MAINFRAME图标资源即可。
首先我用的是和楼上基本相同的办法,实现过程略有不同。
1 创建动画帧,也就是几幅连续变化的位图或者图标;
2 添加成员变量CPictureHolder m_AVI,这是用来显示显示图片的,要使用这个空件需要在头文件中加上#include <afxctl.h>。
2 在MainFrame里面定义成员变量HICON数组,当然如果你创建的动画帧是位图则应该定义HBITMAP数组。然后的OnCreate()函数里面Load所有的图片,方法如下:
for(int i = 0;i < n ;i++)
PicArray[i] = LoadICON(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_ANIMATE1 + i))
3 在开始播放的时候设置计时器SetTimer(0,100,NULL)
4 在MainFrame的OnTimer()函数里面修改当前显示的图标的ID
m_nFrameNo++;
DrawAVI();
5 DrawAVI函数
void CMainFrame::DrawAVI()
{
CRect ClientRect ;
GetClientRect(&ClientRect);
if(ClientRect.Width() < 500 || ClientRect.Height() < 40)
return ;//当主窗口的宽度和高度不够时就不要画了。
else
{
CDC* pDC = GetDC(); m_AVIRect.top = 2;
m_AVIRect.left = ClientRect.right - 24;
m_AVIRect.right = ClientRect.right - 2;
m_AVIRect.bottom = 24;// pDC->SelectStockObject(BLACK_BRUSH);//设置背景色
pDC->Rectangle(&m_AVIRect);
InflateRect(&m_AVIRect,1,1);
pDC->DrawEdge(&m_AVIRect,EDGE_BUMP,BF_RECT); InflateRect(&m_AVIRect,-4,-4);
//以上代码是在播放动画的地方画一个矩形框,增加效果
m_AVI.CreateFromIcon(m_hMainIconAVI[m_nFrameNo % 11]);
m_AVI.Render(pDC,m_AVIRect,m_AVIRect);
ReleaseDC(pDC);
}
}void CMainFrame::OnPaint()
{
DrawAVI();
}
6 在主窗口改变大小的时候应该重画。
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIFrameWnd::OnSize(nType, cx, cy);
Invalidate();
}
如果要播放真正的AVI文件,有现成的控件,估计自己做也不会很难,如果你有兴趣可以研究一下。