2024年4月28日发(作者:)

最近项目中要用到图片显示,有现成的不过用起来感觉不是很好.主要原因:(一)都是读取的本地文

件 (二)显示的效率不是很好 (三)不符合项目要求.于是上codeproject上找了一个类CPictureCtrl,使

用很方便,但是vc6下不支持,并且不能根据图片大小调整显示大小,于是对其进行了改进.

1.源代码

CPictureCtrl.h文件:

///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////

// PictureCtrl.h

//

// Author: Tobias Eiseler

//

// E-Mail: r@

//

// Function: A MFC Picture Control to display

// an image on a Dialog, etc.

///////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////

#pragma once

#include "afxwin.h"

#ifndef ULONG_PTR

#define ULONG_PTR unsigned long *

#endif

#include "GdiPlus.h"

using namespace Gdiplus;

#pragma comment(lib,"") //以上部分是gdi说明

class CPictureCtrl :

public CStatic

{

public:

//Constructor

CPictureCtrl(void);

//Destructor

~CPictureCtrl(void);

public:

//Loads an image from a file

BOOL LoadFromFile(CString &szFilePath);

//Loads an image from an IStream interface

BOOL LoadFromStream(IStream* piStream);

//Loads an image from a byte stream;

BOOL LoadFromStream(BYTE* pData, size_t nSize);

//Loads an image from a Resource

// BOOL LoadFromResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType);

//Overload - Single load function

BOOL Load(CString &szFilePath,int nWidth = 0,int nHeight = 0);

BOOL Load(IStream* piStream,int nWidth = 0,int nHeight = 0);

BOOL Load(BYTE* pData, size_t nSize,int nWidth = 0,int nHeight = 0);

// BOOL Load(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType);

//Frees the image data

void FreeData();

protected:

virtual void PreSubclassWindow();

//Draws the Control

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

virtual BOOL OnEraseBkgnd(CDC* pDC);

afx_msg void OnPaint();

DECLARE_MESSAGE_MAP()

private:

- 2 -