⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array2d.h

📁 面向软件工程的Visual C++网络程序开发
💻 H
字号:
// ====== File : Array2d.h =========
#ifndef ARRAY2D_H
#define ARRAY2D_H
#include "afxtempl.h"

//  IMAGE 类, 可作为灰度图象的数组用; 
template<class T>
class AFX_EXT_CLASS CArray2d {
	int m_Width;
	int m_Height;
	T* pChar;
public:
	CArray2d() : m_Width(0), m_Height(0), pChar(NULL){}
	CArray2d(int nWidth, int nHeight, T* ptr) {
		m_Width = nWidth;
		m_Height = nHeight;
		pChar = ptr;
	}

	CArray2d(int nWidth, int nHeight)
	{
		if(!ArrayAlloc(nWidth, nHeight)){
			AfxMessageBox("Cannot allocate enough memory");
		}
	}

	BOOL ArrayAlloc(int nWidth, int nHeight)
	{
		m_Width = nWidth;
		m_Height = nHeight;
		if((nWidth == 0) || (nHeight == 0)){
			pChar = (T*)NULL;
			return TRUE;
		}
		long nSize = nWidth * nHeight * sizeof(T);
		if(nSize < 1024L) nSize = 1024;
		HGLOBAL h = GlobalAlloc(GHND, nSize);
		if(!h) return FALSE;
		pChar = (T*)GlobalLock(h);
		if(!pChar){
			AfxMessageBox("pause!");
			GlobalFree(h);
			return FALSE;
		}
		return TRUE;
	}

	void ArrayFree()
	{
		m_Width = 0;
		m_Height = 0;
		HGLOBAL h = GlobalHandle((void*)pChar);
		GlobalUnlock(h);
		GlobalFree(h);
		pChar = NULL;
	}

	void SetWidth(int nWidth) {
		m_Width = nWidth;
	}
	void SetHeight(int nHeight) {
		m_Height = nHeight;
	}
	
	int Attach(T* ptr)
	{
		if(pChar != NULL) return -1;
		pChar = ptr;
		return 0;
	}

	T* Detach() {
		m_Width = 0;
		m_Height = 0;
		T* p = pChar;
		pChar = NULL;
		return p;
	}

	T* operator[](int n)
	{
		return (T*)(pChar+n*m_Width);
	}

	int GetWidth()
	{
		return m_Width;
	}

	int GetHeight()
	{
		return m_Height;
	}

	BOOL IsEmpty()
	{
		if((m_Width != 0) || (m_Height != 0))
			return FALSE;
		if(pChar != NULL)
			return FALSE;
		return TRUE;
	}

	~CArray2d()
	{
		if((m_Width != 0) && (m_Height != 0))
			ArrayFree();
	}


};
/*
template<class T> inline
CArray2d<T>::CArray2d()

template<class T> inline
CArray2d<T>::CArray2d(int nWidth, int nHeight)
{
	if(!ArrayAlloc(nWidth, nHeight)){
		AfxMessageBox("Cannot allocate enough memory");
	}
}

template<class T> inline
BOOL CArray2d<T>::ArrayAlloc(int nWidth, int nHeight)
{
	m_Width = nWidth;
	m_Height = nHeight;
	if((nWidth == 0) || (nHeight == 0)){
		pChar = (T*)NULL;
		return TRUE;
	}
	long nSize = nWidth * nHeight * sizeof(T);
	if(nSize < 1024L) nSize = 1024;
	HGLOBAL h = GlobalAlloc(GHND, nSize);
	if(!h) return FALSE;
	pChar = (T*)GlobalLock(h);
	if(!pChar){
		AfxMessageBox("pause!");
		GlobalFree(h);
		return FALSE;
	}
	return TRUE;
}

template<class T> inline
void CArray2d<T>::ArrayFree()
{
	m_Width = 0;
	m_Height = 0;
	HGLOBAL h = GlobalHandle((void*)pChar);
	GlobalUnlock(h);
	GlobalFree(h);
	pChar = NULL;
}

template<class T> inline
CArray2d<T>::~CArray2d()
{
	if(pChar != NULL)
		ArrayFree();
}

template<class T> inline
T* CArray2d<T>::operator [](int n)
{
	return (pChar+n*m_Width);
}

template<class T> inline
int CArray2d<T>::GetHeight()
{
	return m_Height;
}

template<class T> inline
int CArray2d<T> ::GetWidth()
{
	return m_Width;
}

template<class T> inline
BOOL CArray2d<T>::IsEmpty()
{
	if((m_Width != 0) || (m_Height != 0))
		return FALSE;
	if(pChar != NULL)
		return FALSE;
	return TRUE;
}

*/
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -