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、运行结果,如下图所示。