MFC动态加载JPG图片,作为对话框背景图片,且每隔10秒显示一次

梦境传说 2011-11-03 01:55:48
我现在有个测试代码,编译运行都是正确的,不过是通过资源的方式导入JPG图片的。现在要动态加载图片,不要下面的资源导入。

运行的效果也是正确的:现在就是怎么改成动态加载:



下面是我的测试代码:
.h 文件:
public:
UINT IDJPG[4];
int i;
int m_iPic;
CBrush m_brBk;
CBitmap bmp;

CPoint pt;
CPen pen;
CBrush cbrush;


.cpp 文件:
初始化工作:
CTestJPGDlg::CTestJPGDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestJPGDlg::IDD, pParent)
{
IDJPG[0] = IDR_JPG1;
IDJPG[1] = IDR_JPG2;
IDJPG[2] = IDR_JPG3;
IDJPG[3] = IDR_JPG4;
i = 0;
m_iPic = 1;

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}


BOOL CTestJPGDlg::OnInitDialog()
{
…………
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

//初始化一个画笔-------------------------------
pen.CreatePen(PS_INSIDEFRAME,1,RGB(255,0,0));

SetTimer(1, 1000, NULL);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

void CTestJPGDlg::OnPaint()
{
DrawCircle();

CPaintDC dc(this);
}

void CTestJPGDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

if (nIDEvent == 1)
{
pt.x=(long)rand()%100+30;
pt.y=(long)rand()%100+30;

DrawCircle();

i++;
m_iPic++;

if ( i == 4 )
{
i = 0;
}

if ( m_iPic == 40 )
{
m_iPic = 0;
}

/*if (m_iPic < 80)
{
m_iPic++;
}*/
}

CDialog::OnTimer(nIDEvent);
}

BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Gdiplus::Image * &pImg)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); //type
if (!hRsrc)
{
return FALSE;
}

// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
{
return FALSE;
}

// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);

return TRUE;
}

//画图函数-------------------------
void CTestJPGDlg::DrawPicture(void)
{
m_brBk.DeleteObject();
bmp.DeleteObject();

Image *pBackImage = NULL;
//int index = min(4,m_iPic/10);

if ( ImageFromIDResource(/*IDJPG[index]*/IDJPG[m_iPic/10],_T("JPG"),pBackImage) )
{
CDC *pDC = GetDC();
Graphics graph(pDC->m_hDC);

CRect rect;
GetClientRect(&rect);
Rect rectClient(rect.left,rect.top,rect.Width(),rect.Height());

graph.DrawImage(pBackImage,rectClient);
ReleaseDC(pDC);
}

//pDC->FillRect(rect,&m_brBk);
}

//画圆函数---------------------
void CTestJPGDlg::DrawCircle()
{
DrawPicture();

CDC *pDC = GetDC();

CPen *pPen = pDC->SelectObject(&pen);
cbrush.CreateSolidBrush(RGB(255,0,0));
CBrush *poldbrush = pDC->SelectObject(&cbrush);
pDC->Ellipse(pt.x-30,pt.y-30,pt.x+30,pt.y+30);

//Sleep(500); //不用这个
//Sleep(500);
pDC->SelectObject(poldbrush);
pDC->SelectObject(pPen);

//Invalidate();

cbrush.DeleteObject();
ReleaseDC(pDC);
}

HBRUSH CTestJPGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: 在此更改 DC 的任何属性

// TODO: 如果默认的不是所需画笔,则返回另一个画笔

if (pWnd == this)
{
return m_brBk;
}

return hbr;
}


现在是,主要修改画图函数中的这句话ImageFromIDResource(/*IDJPG[index]*/IDJPG[m_iPic/10],_T("JPG"),pBackImage)
改成绝对路径。。。 但是我运行是对的,没有显示?
我把JPG图片放在res中建立的一个文件夹:C:\E\Project\TestJPG\TestJPG\res\JPG

望,高手们指点。怎么稍微修改代码,实现动态加载JPG图片。。。
...全文
739 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fandh 2011-11-03
  • 打赏
  • 举报
回复
发给你了!收一下!
梦境传说 2011-11-03
  • 打赏
  • 举报
回复
现在时CXimage的搭配都有问题。。。一直在找 。 您给我的我下载下来看了,按照上面的方法一步一步实现,编译的时候就出现:1>LINK : fatal error LNK1104: 无法打开文件“cximage.lib;”

现在还是这个问题。。



fandh 2011-11-03
  • 打赏
  • 举报
回复
晕,不会吧!你发到我MAIL里面吧!
oyljerry 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dreamtale123 的回复:]
引用 2 楼 oyljerry 的回复:

CXImage Load()
http://wenku.baidu.com/view/df8e1811f18583d0496459bf.html



#include “ximage.h”
CxImage image;
CString filename("c:\\1.jpg");
image.Load(filename,CXIM……
[/Quote]
你的Lib路径是否正确。
梦境传说 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oyljerry 的回复:]

CXImage Load()
http://wenku.baidu.com/view/df8e1811f18583d0496459bf.html
[/Quote]


#include “ximage.h”
CxImage image;
CString filename("c:\\1.jpg");
image.Load(filename,CXIMAGE_FORMAT_JPG);
image.Draw(hdc,0,0);
这段代码我放在好几个地方编译不通过。。。

按照你给我那个连接,编译总是出现:
1>LINK : fatal error LNK1104: 无法打开文件“cximage.lib;” 可是我已经包含了这个库文件,怎么打不开???
诶呦 2011-11-03
  • 打赏
  • 举报
回复
GetPathName()得到图片路径
LoadImage()传入路径加载图片
oyljerry 2011-11-03
  • 打赏
  • 举报
回复
CXImage Load()
http://wenku.baidu.com/view/df8e1811f18583d0496459bf.html
sevancheng 2011-11-03
  • 打赏
  • 举报
回复
CPicture 类

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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