MFC Dialog 显示静态、动态图片(基础入门)

MFC Dialog 显示静态、动态图片

步骤
1、新建一个工程,如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、在资源视图(ResourceView)中新建一个对话框,右击“Dialog”,选择“插入Dialog”,并更改其ID号。如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、拖动右侧控件中的“图像”到对话框中,如下图所示。
在这里插入图片描述
4、选中边框,右击,选择“属性§”,如下图所示。
在这里插入图片描述
5、在“常规”里选择其类型为“位图”,图像“IDR_MAINFRAME”(此时还没有图像资源),并勾选上“可见(S)”;“样式”中勾选上“凹陷(S)”、“图像居中©”;“扩展样式”中勾选上“模式框架(M)”,如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、可在百度上下载一张图片。注意一下图片格式,MFC中图片格式比较少,“.jpg”不行,我们可将其换成“.bmp”。一般将图片放到“res”里面,如下图所示。
在这里插入图片描述
7、右击“Chapter resources *”,选择“插入(I)”,在“资源类型(T)”中选择“Bitmap”“引入(M)”,如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8、右击“IDB BITMAP1”,在属性中更改其ID为“IDB_Funny”,如下图所示。
在这里插入图片描述
9、如果此时图片还没有显示,可右击Picture属性,在“图像(M):”后选“IDB_Funny”,如下图所示。
在这里插入图片描述
在这里插入图片描述
10、然后在“Dialog”中再建一个对话框,如下图所示。
在这里插入图片描述
11、双击对话框空白处,添加一个类,取类名“CDlg_ShowPicDynamic”,如下图所示。
在这里插入图片描述
在这里插入图片描述
12、同理,我们给静态的也添加一个类,取类名“CDlg_ShowPicStatic”。

13、再做个菜单,显示图片,如下图所示。
在这里插入图片描述
14、然后建立它们的消息映射,如下图所示。
在这里插入图片描述
15、再把这两个类嵌入进来,如下图所示。
在这里插入图片描述
在这里插入图片描述

void CChapterView::OnMShowPicStatic() 
{
	// TODO: Add your command handler code here
	CDlg_ShowPicStatic dlg_ShowPicStatic;
	dlg_ShowPicStatic.DoModal();
}

void CChapterView::OnMShowPicDynamic() 
{
	// TODO: Add your command handler code here
	CDlg_ShowPicDynamic dlg_ShowPicDynamic;
	dlg_ShowPicDynamic.DoModal();
}

16、在CDlg ShowPicDynamic里面添加消息句柄“WM_PAINT”(对话框里是通过OnPaint(),在这里面编写代码,类似于视图中的OnDraw()),如下图所示。
在这里插入图片描述
在这里插入图片描述
17、最后在OnPaint()里面编写代码,如下图所示。
在这里插入图片描述

void CDlg_ShowPicDynamic::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	CBitmap bmp; //建立一个位图对象
	bmp.LoadBitmap(IDB_Funny); //把图片信息复制进来
	BITMAP bmpinfo; //定义一个bmp结构体
	bmp.GetBitmap(&bmpinfo); //获取图像的相关信息
	CDC MemDC;
	MemDC.CreateCompatibleDC(&dc); //建立一个兼容的设备上下文
	CBitmap *poldBitmap = MemDC.SelectObject(&bmp);
	//dc.BitBlt(0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,&MemDC,0,0,SRCCOPY); //BitBlt是原封不动的拷贝
	dc.StretchBlt(0,0,500,500,&MemDC,0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,SRCCOPY);
	MemDC.SelectObject(poldBitmap);
	MemDC.DeleteDC();

	// Do not call CDialog::OnPaint() for painting messages
}

18、运行结果,如下图所示。
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值