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

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

下面是我的测试代码:
.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图片。。。
相关推荐
MFC背景图片实现:WM_ERASEBKGND、OnPaint与CBrush三种绘制方法
在Windows图形界面开发中,窗口背景的自定义是提升应用视觉体验的常见需求。其底层实现依赖消息循环中的背景擦除与重绘机制,通过WM_ERASEBKGND、OnPaint等消息处理函数,开发者可以控制窗口背景的绘制逻辑。合理运用这些技术能有效避免闪烁,并支持图片拉伸、平铺等多样化显示效果。在MFC框架中,背景图片通常不是独立控件,而是通过CBitmap加载位图资源,再结合BitBlt、StretchBlt或CBrush画刷完成绘制。面向维护老工程或初次在MFC对话框添加背景的开发者,从工程配置、图片资源导入
SKINSHARP皮肤引擎:MFC界面个性化定制
SKINSHARP是一个专为开发者设计的皮肤引擎,它提供了强大的自定义UI元素和视觉效果的能力。开发者可以利用SKINSHARP来实现高度可定制的用户界面,使得应用能够更好地融入用户的个性化需求中。引擎底层支持多种渲染技术,确保在不同平台和设备上均有良好的兼容性和表现力。接下来,我们将深入探讨其文件格式解析、布局信息设置、字体样式定义、动画效果展示以及优化和设计原则。
基于树莓派与SDL2的交互式雪花球:嵌入式图形应用开发实践
在嵌入式系统开发中,图形用户界面(GUI)和实时交互是实现丰富用户体验的关键技术。其核心原理在于通过图形库(如SDL2)进行帧缓冲区的绘制与更新,并结合输入事件处理库(如libevdev)捕获用户操作,从而在资源受限的设备上实现流畅的动画与响应。这项技术的价值在于能够将复杂的视觉反馈与用户输入紧密结合,为智能家居、工业控制面板、信息终端等场景提供直观的人机交互界面。本文以“交互式雪花球”这一具体项目为例,详细阐述了如何在树莓派(Raspberry Pi)平台上,利用SDL2图形库进行雪花飘落动画的渲染,并通
政府科技管理者如何提升区域科技成果转化成功率?.docx
政府科技管理者如何提升区域科技成果转化成功率?
LangGraph与Graphviz集成:生成高质量静态图
内容概要:展示如何将LangGraph图导出为Graphviz DOT格式,生成PNG/SVG。通过自定义布局和样式,呈现清晰的流程图。对比Mermaid,讨论适用场景。 0533zbyy.com 0595ty.cn www.zh-casting.com yobest2.com 10cd.cn


界面
