Notepad++源码剖析(四)

本文详细剖析了Notepad++如何在工具栏中显示图标,重点介绍了ImageListSet.h/cpp, ToolBar.h/cpp中的关键类和函数。讲解了IconList类的create函数、Image列表的创建与添加,以及ToolBarIcons类如何设置不同状态的Image列表。通过分析源码,揭示了Notepad++工具栏按钮的初始化、状态控制和响应机制。" 54784131,1399166,CAS Server源码部署Tomcat报错解决方案,"['cas', 'tomcat', '部署', '错误解决', '开发工具']
摘要由CSDN通过智能技术生成

这里说一下Notepad++在工具栏中显示图标的功能源码.与显示图标功能相关的类比较多,主要集中在ImageListSet.h/cpp, ToolBar.h/cpp这几个文件中.至于ToolBar中包含哪些图标由Notepad_plus.cpp部分代码定义.我们从基础开始先看看ImageListSet.h/cpp里面的内容,了解其底层的一些机制后.再说一下ToolBar.h/cpp的定义.然后就很容易看懂Notepad_plus.cpp中代码的意思了.

 

ImageListSet.h中首先定义了IconList类,源码如下

class IconList
{
public :
	IconList() : _hImglst(NULL) {};

	void create(HINSTANCE hInst, int iconSize) {_iconSize = iconSize;
		_hInst = hInst;
		InitCommonControls(); 
		_hImglst = ImageList_Create(iconSize, iconSize, ILC_COLOR32 | ILC_MASK, 0, nbMax);
		if (!_hImglst)
			throw int(25);
	};

	void create(int iconSize, HINSTANCE hInst, int *iconIDArray, int iconIDArraySize) {
		create(hInst, iconSize);
		for (int i = 0 ; i < iconIDArraySize ; i++)
			addIcon(iconIDArray[i]);
	};

	void destroy() {
		ImageList_Destroy(_hImglst);
	};

	HIMAGELIST getHandle() const {return _hImglst;};

	void addIcon(int iconID) const {
		HICON hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(iconID));
		//HBITMAP hBmp = (HBITMAP)::LoadImage(_hInst, MAKEINTRESOURCE(iconID), IMAGE_ICON, _iconSize, _iconSize, LR_LOADMAP3DCOLORS);
		if (!hIcon)
			throw int(26);
		ImageList_AddIcon(_hImglst, hIcon);
		//ImageList_AddMasked(_hImglst, (HBITMAP)hBmp, RGB(0, 0, 0));
		::DeleteObject(hIcon);
		//::DeleteObject(hBmp);
	};

private :
	HIMAGELIST _hImglst;
	HINSTANCE _hInst;
	int _iconSize;
};

这个类中主要定义了一下几个功能:

a. 首先定义了两个create函数,第一个create主要的功能为创建了image list对象,并将image list handle保存在类型为HIMAGELIST的_hImglit变量中,用_iconSize变量保存图标大小,_hInst保存传入的一个实例句柄.第二个create函数的主要的功能不经初始化IconList类中的三个私有变量(_hImglst, _hInst, _iconSize),而且用图标标号数组来往Image list对象中添加icon对象.这个工作有addIcon函数完成,不过值得注意的是LoadIcon函数,以及被作者注释掉的LoadImage函数.

b. 实现获取image list hand

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值