首先把ImageStatic.h和ImageStatic.cpp导入工程
再给对话框添加Picture控件和Group Box控件,分别添加变量m_pic和m_Frame;
注意::要m_pic类改为ImageStatic,m_Frame改为CStatic;
然后 把ShowJpgGif()拷到主程序中,
/*
函数功能:显示JPG和GIF图片
参数说明:
pDC:设备环境对象
strPath:要显示的图片路径
x:要显示的X位置
y:要显示的Y位置
bAdjust:为true表示调整图像大小
w:调整后宽度,高度按比例调整
*/
BOOL ShowJpgGif(CDC*pDC,CString str_Path, int x, int y, bool bAdjust, int w, int h)
{
IStream *pStm;
CFileStatus fstatus;
CFile file;
LONG cb;
//打开文件并检测文件的有效性
if (file.Open(str_Path,CFile::modeRead)&&
file.GetStatus(str_Path,fstatus)&&
((cb = fstatus.m_size) != -1))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
pvData = GlobalLock(hGlobal);
if (pvData != NULL)
{
file.Read(pvData, cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
}
}
file.Close();
}
else
{
return false;
} //打开文件结束
//显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,
//要显示动画GIF请使用ACTIVE控//件。
IPicture *pPic;
//load image from file stream
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
double fX,fY;
//get image height and width
fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/
((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/
((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
int width = fX;
int height = fY;
if (bAdjust)
{
width = w;
if (0 != h)
{
height = h;
}
else
{
height = w/fX*fY;
}
}
//use render function display image
if(FAILED(pPic->Render(*pDC,x,y,(DWORD)width,(DWORD)height,0,
hmHeight,hmWidth,-hmHeight,NULL)))
{
pPic->Release();
return false;
}
pPic->Release();
}
else
{
return false;
}
return true;
}
再把void nitPicture()拷到OnPaint中
void nitPicture()//贴图
{
CRect tempRect;
m_pic.GetWindowRect(tempRect);
ScreenToClient(tempRect); //转换到在对话框中的位置
char CDstr[MAX_PATH];
TCHAR IniFilePath[MAX_PATH];
GetModuleFileName(NULL,IniFilePath,MAX_PATH);
m_strFileName = CString(IniFilePath);
m_strFileName = m_strFileName.Left(m_strFileName.ReverseFind('\\'));///得到初始化文件的全路径
m_strFileName = m_strFileName.Left(m_strFileName.ReverseFind('\\')+1);
m_strFileName +="LOGO\\logo3.bmp";
//获取图片信息,按照图片比例显示图片
HDC hdc;
BITMAP bmp;
HBITMAP hPic;
// hdc=CreateCompatibleDC(m_hdc);
hPic=(HBITMAP)LoadImage(NULL,m_strFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
GetObject(hPic,sizeof(BITMAP),&bmp);
float dx = bmp.bmHeight*1.0/bmp.bmWidth;//height*.1.0/width;
int wDest = tempRect.Width();
int hDest = wDest * dx;
m_pic.SetImageWidth(wDest);
m_pic.SetImageHeight(hDest);
m_pic.SetImagePath(m_strFileName);
m_frame.ShowWindow(FALSE);
}
ImageStatic.h//代码
#pragma once
// ImageStatic
class ImageStatic : public CStatic
{
DECLARE_DYNAMIC(ImageStatic)
public:
void SetImagePath(CString imagePath);
CString GetImagePath();
void SetImageWidth(int width);
void SetImageHeight(int height);
void ClearImage();
ImageStatic();
virtual ~ImageStatic();
protected:
DECLARE_MESSAGE_MAP()
private:
CString m_ImagePath;
int m_ImageWidth;
int m_ImageHeight;
afx_msg void OnPaint();
};
ImageStatic.cpp//代码
// ImageStatic.cpp : 实现文件
//
#include "stdafx.h"
#include "ImageStatic.h"
BOOL ShowJpgGif(CDC*pDC,CString str_Path, int x, int y, bool bAdjust, int w, int h) ;
// ImageStatic
IMPLEMENT_DYNAMIC(ImageStatic, CStatic)
ImageStatic::ImageStatic()
{
m_ImageWidth = 0;
m_ImageHeight = 0;
}
ImageStatic::~ImageStatic()
{
}
BEGIN_MESSAGE_MAP(ImageStatic, CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()
// ImageStatic 消息处理程序
void ImageStatic::SetImagePath(CString imagePath)
{
m_ImagePath = imagePath;
this->RedrawWindow();
}
CString ImageStatic::GetImagePath()
{
return m_ImagePath;
}
void ImageStatic::SetImageWidth(int width)
{
m_ImageWidth = width;
}
void ImageStatic::SetImageHeight(int height)
{
m_ImageHeight = height;
}
void ImageStatic::ClearImage()
{
m_ImagePath = "";
this->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_ERASE);
}
void ImageStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
bool bAdjust = m_ImageWidth > 0;
ShowJpgGif(this->GetDC(), m_ImagePath, 0, 0, bAdjust, m_ImageWidth, m_ImageHeight);
}