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

📄 imglist.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
字号:
/******************************************************
Copyright(c) 版权所有,1998-2003微逻辑。保留所有权利。
******************************************************/
/*****************************************************
文件说明:图形列式
版本号:1.0.0
开发时期:2003-03-18
作者:陈建明 Jami chen
修改记录:
******************************************************/

#include "eImgList.h"
#include "eptrList.h"
#include "egdi.h"

#define IMAGELIST_ICON		0x0001
#define IMAGELIST_BITMAP	0x0002


typedef struct {
		LPPTRLIST lpImage;
		int cx;
		int cy;
		DWORD dwImageStyle;  // be Icon Image (IMAGELIST_ICON)or Bitmap Image(IMAGELIST_BITMAP)
}IMAGELIST,*LPIMAGELIST;

// **************************************************
// 声明:int ImageList_Add(HIMAGELIST himl,HBITMAP hbmImage,HBITMAP hbmMask)
// 参数:
// 	IN himl -- 图象列表句柄
//	 IN hbmImage -- 位图句柄
//	 IN hbmMask -- MASK 位图句柄
// 
// 返回值:返回当前图象列表中的图象个数
// 功能描述:插入一个图象到图象列表。
// 引用: 
// **************************************************
int ImageList_Add(
    HIMAGELIST himl,
    HBITMAP hbmImage,
    HBITMAP hbmMask
   )
{
	LPIMAGELIST lpImageList;
	int count;
		
		lpImageList=(LPIMAGELIST)himl; // 得到图象列表句柄

		if (lpImageList == NULL)
			return -1;

		if (lpImageList->dwImageStyle!=IMAGELIST_BITMAP)
			return -1; // 当前只能处理位图

		PtrListInsert(lpImageList->lpImage,hbmImage); // 将位图插入到图象句柄中
		count=lpImageList->lpImage->count; // 得到当前图象列表中的图象个数
		return count; 
}



// **************************************************
// 声明:HIMAGELIST ImageList_Create(int cx,int cy,UINT flags,int cInitial,int cGrow)
// 参数:
// 	IN cx -- 图象宽度
// 	IN cy -- 图象高度
// 	IN flags -- 图象性质
// 	IN cInitial -- 初始化个数
// 	IN cGrow -- 增长个数
// 
// 返回值:返回图象列表的句柄
// 功能描述:创建一个图象列表。
// 引用: 
// **************************************************
HIMAGELIST ImageList_Create(
    int cx, 	
    int cy, 	
    UINT flags, 	
    int cInitial, 	
    int cGrow	
   )
{
//	HIMAGELIST hImageList;
	LPIMAGELIST lpImageList;


		lpImageList=(LPIMAGELIST)malloc(sizeof(IMAGELIST)); // 分配一个图象列表的数据结构
		if (lpImageList==NULL)
			return NULL;
		lpImageList->lpImage=(LPPTRLIST)malloc(sizeof(PTRLIST)); // 分配一个存放图象的指针列表
		if (lpImageList->lpImage==NULL)
		{
			free(lpImageList);
			return NULL;
		}
		PtrListCreate(lpImageList->lpImage,cInitial,cGrow); // 初始化指针列表

		// 设置图象类型
		if (flags&ICL_ICON)
		{
			lpImageList->dwImageStyle=IMAGELIST_ICON;
		}
		else
		{
			lpImageList->dwImageStyle=IMAGELIST_BITMAP;
		}
		return lpImageList; // 返回图象列表句柄
}


// **************************************************
// 声明:BOOL ImageList_Destroy(HIMAGELIST himl)
// 参数:
// 	IN himl -- 图象列表句柄
// 
// 返回值:成功返回TRUE,否则返回FALSE
// 功能描述:破坏图象列表
// 引用: 
// **************************************************
BOOL ImageList_Destroy(
    HIMAGELIST himl 	
   )
{
	LPIMAGELIST lpImageList;
	int i;
		lpImageList=(LPIMAGELIST)himl; // 得到图象列表数据结构
		if (lpImageList==NULL)
			return FALSE;
		if (lpImageList->lpImage)
		{
			if (lpImageList->dwImageStyle==IMAGELIST_ICON)
			{ // 当前的图象是ICON
				for(i=0;i<lpImageList->lpImage->count;i++)
				{
					HICON hIcon;
// !!! Modified By  Jami chen in 2003.08.07
//					DestroyIcon(PtrListAt(lpImageList->lpImage,i));
					hIcon = (HICON)PtrListAt(lpImageList->lpImage,i); // 得到ICON句柄
					if (hIcon)
						DestroyIcon(hIcon); // 破坏ICON
// !!! Modified End By  Jami chen in 2003.08.07
				}
			}
			else
			{ // 当前图象是BITMAP
				for(i=0;i<lpImageList->lpImage->count;i++)
				{
					HBITMAP hBitmap;
// !!! Modified By  Jami chen in 2003.08.07
//					DeleteObject(PtrListAt(lpImageList->lpImage,i));
					hBitmap = (HBITMAP)PtrListAt(lpImageList->lpImage,i); // 得到BITMAP句柄
					if (hBitmap)
						DeleteObject(hBitmap); // 破坏BITMAP
// !!! Modified End By jami chen in 2003.08.07
				}
			}
			PtrListDestroy(lpImageList->lpImage); // 破坏指针列表
			free(lpImageList->lpImage); // 释放指针列表
		}
		free(lpImageList); // 释放图象结构
		return TRUE;
}

// **************************************************
// 声明:BOOL ImageList_DrawEx(HIMAGELIST himl,int i,HDC hdcDst,int x,int y,int dx,int dy,COLORREF rgbBk,COLORREF rgbFg,UINT fStyle)
// 参数:
// 	IN himl -- 图象列表句柄
// 	IN i -- 图象索引
// 	IN hdcDst -- 目标设备句柄
// 	IN x -- X 坐标
// 	IN y -- Y 坐标
// 	IN dx -- 宽度
// 	IN dy -- 高度
// 	IN rgbBk -- 背景颜色
// 	IN rgbFg -- 前景颜色
// 	IN fStyle -- 风格
// 
// 返回值:
// 功能描述:
// 引用: 
// **************************************************
BOOL ImageList_DrawEx(
    HIMAGELIST himl,
    int i,
    HDC hdcDst,
    int x,
    int y,
    int dx,
    int dy,
    COLORREF rgbBk,
    COLORREF rgbFg,
    UINT fStyle
   )
{ // 目前没有提供此功能
	return TRUE;
}

// **************************************************
// 声明:HICON ImageList_GetIcon( HIMAGELIST himl,int i,UINT flags )
// 参数:
// 	IN himl -- 图象列表句柄
// 	IN i -- 图象索引
// 	IN flags -- 风格
// 
// 返回值:返回得到的ICON句柄
// 功能描述:得到指定索引的ICON句柄
// 引用: 
// **************************************************
HICON ImageList_GetIcon(
    HIMAGELIST himl,
    int i,  	
    UINT flags 	
   )
{
	LPIMAGELIST lpImageList;

		lpImageList=(LPIMAGELIST)himl; // 得到图象列表数据结构
		if (lpImageList == NULL)
			return NULL;
		return PtrListAt(lpImageList->lpImage,i); // 得到指定索引的图象
}

// **************************************************
// 声明:int ImageList_GetImageCount(HIMAGELIST himl)
// 参数:
// 	IN himl -- 图象列表句柄
// 
// 返回值:返回当前图象的个数
// 功能描述:得到当前图象列表中的图象个数。
// 引用: 
// **************************************************
int ImageList_GetImageCount(
    HIMAGELIST himl	
   )
{
	LPIMAGELIST lpImageList;

		lpImageList=(LPIMAGELIST)himl;// 得到图象列表数据结构
		if (lpImageList == NULL)
			return 0;
		return lpImageList->lpImage->count; // 返回图象个数
}

// **************************************************
// 声明:BOOL ImageList_Remove( HIMAGELIST himl, int i)
// 参数:
// 	IN himl -- 图象列表句柄
// 	IN i -- 图象索引
// 
// 返回值:成功返回TRUE,否则返回FALSE
// 功能描述:删除指定索引的图象。
// 引用: 
// **************************************************
BOOL ImageList_Remove(
    HIMAGELIST himl, 	
    int i	
   )
{
	LPIMAGELIST lpImageList;
		lpImageList=(LPIMAGELIST)himl; // 得到图象列表数据结构
		if (lpImageList == NULL)
			return FALSE;
		
		PtrListAtRemove(lpImageList->lpImage,i); // 删除指定索引的图象
		return TRUE;
}

// **************************************************
// 声明:BOOL ImageList_RemoveAll(HIMAGELIST himl)
// 参数:
// 	IN himl -- 图象列表句柄
// 
// 返回值:成功返回TRUE,否则返回FALSE
// 功能描述:删除图象列表中的所有图象
// 引用: 
// **************************************************
BOOL ImageList_RemoveAll(
    HIMAGELIST himl 	
   )
{
	LPIMAGELIST lpImageList;
//	int i;
		lpImageList=(LPIMAGELIST)himl; // 得到图象列表数据结构
		if (lpImageList == NULL)
			return FALSE;
		
		PtrListRemoveAll(lpImageList->lpImage); // 删除所有的图象
		return TRUE;
}

// **************************************************
// 声明:int ImageList_ReplaceIcon(HIMAGELIST himl,int i,HICON hicon)
// 参数:
// 	IN himl -- 图象列表句柄
// 	IN  i -- 要替换的ICON的索引
// 	IN hicon -- 要替换成的ICON句柄
// 
// 返回值:返回被替换的索引值
// 功能描述:替换指定索引的ICON
// 引用: 
// **************************************************
int ImageList_ReplaceIcon(
    HIMAGELIST himl, 	
    int i, 	
    HICON hicon	
   )
{
	LPIMAGELIST lpImageList;

		lpImageList=(LPIMAGELIST)himl; // 得到图象列表数据结构
		if (lpImageList == NULL)
			return FALSE;
		if (i=-1)
		{ // 要插入一个ICON
			PtrListInsert(lpImageList->lpImage,hicon); // 插入当前的ICON
// Modified by Jami chen in 2002.04.24
// returns The index of the image if success,-1 otherwise.
//			i=lpImageList->lpImage->count;
// Modified to
			i=lpImageList->lpImage->count-1;
// Modified End By  Jami chen in 2002.04.24
		}
		else
		{
			PtrListAtPut( lpImageList->lpImage,i, hicon); // 设置指定的ICON为当前值
		}
		return i;
}


// **************************************************
// 声明:BOOL ImageList_Destroy(HIMAGELIST himl)
// 参数:
// 	IN himl -- 图象列表句柄
//  OUT cx -- 返回图象列表中图象的宽度
//  OUT cy -- 返回图象列表中图象的高度
// 
// 返回值:成功返回TRUE,否则返回FALSE
// 功能描述:破坏图象列表
// 引用: 
// **************************************************
BOOL ImageList_GetIconSize(
    HIMAGELIST himl, 	
    int FAR *cx, 	
    int FAR *cy 	
   )
{
	LPIMAGELIST lpImageList;

		lpImageList=(LPIMAGELIST)himl;
		if (lpImageList == NULL)
			return FALSE;
		*cx = lpImageList->cx;
		*cy = lpImageList->cy;
		return TRUE;
}

⌨️ 快捷键说明

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