以上是源碼及演示程序下載地址
Introduction 介紹
這篇文章描述的是一個(gè)可以用于在對(duì)話(huà)框上顯示各種主流類(lèi)型圖片 (如 BMP, GIF, JPEG...) 的MFC控件
Background 背景
我花了一些時(shí)間去搜索可以用于顯示圖片的MFC控件, 但卻沒(méi)有發(fā)現(xiàn)合適的。 所以我決定自己做一個(gè)輕量級(jí),靈活度高的圖片控件(Picture control)去顯示各種類(lèi)型的圖片。
Using the code 如何使用
這個(gè)控件內(nèi)部使用的是GDI+庫(kù),所以請(qǐng)?jiān)谑褂脮r(shí)把GdiPlus.lib加入到你的工程中(include libraries)。
使用這個(gè)控件時(shí),先用VC++對(duì)話(huà)框設(shè)計(jì)器創(chuàng)建一個(gè)靜態(tài)文字控件(static text control) 。之后用MFC向?qū)檫@個(gè)控件分配一個(gè)控件變量,類(lèi)型定義為CPictureCtrl。
現(xiàn)在你可以用你的控件裝載顯示圖片了,你只需要在這幾個(gè)CPictureCtrl::LoadFrom...
函數(shù), 選擇合適你需要的的進(jìn)行調(diào)用。裝載后控件會(huì)自動(dòng)更新并顯示圖片。
要清除掉控件中顯示的圖片,調(diào)用CPictureCtrl::FreeImage
即可。
你的圖片會(huì)被自動(dòng)調(diào)整到控件的大小,這可能會(huì)改變圖片原先的長(zhǎng)寬比例。
Collapse |
Copy Codeclass 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);
BOOL Load(IStream* piStream);
BOOL Load(BYTE* pData, size_t nSize);
// 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);
private:
//Internal image stream buffer
IStream* m_pStream;
//Control flag if a pic is loaded
BOOL m_bIsPicLoaded;
//GDI Plus Token
ULONG_PTR m_gdiplusToken; };
Points of interest
這個(gè)控件是基于
CStatic
control 設(shè)計(jì)的(基類(lèi)使用的是CStatic)。所以你可以使用CStatic control的各種功能,但它并不會(huì)顯示任何文字。對(duì)GDI+庫(kù)的使用使其可以支持各種主流類(lèi)型的圖片。
History 歷史