问题描述

com动态添加工具条设置图标的setBitmaps默认使用bmp图标。如果是bmp图片就需要实际路径,bmp图标需要一个文件夹来管理,如果不慎把图标删除,可能会出现工具条问号问题,这样比较麻烦,所以希望使用资源dll方式来解决,便于管理。

解决思路

第一种思路

,把图标资源打包,然后在使用的时候释放为bmp文件,这样可以避免图标丢失。

第二种思路

,工具条图标实际上是可以使用已经加载好的菜单资源,而菜单资源是在加载菜单的时候会加入到内存中。

思路分析

这里主要分析第二种思路,首先使用资源工具打包bmp图标,ResourceHacker具有这种功能。
image.png
image.png
image.png
image.png
然后构造一个mnu文件,文件名和dll文件名相同,mnu文件可以由代码生成。
image.png
使用menuload命令加载mnu文件,这样dll文件的资源会被加载到cad的菜单组内存中,应该也可以用代码加载。

加载后就可以使用com创建工具条,和cad系统图标一样,直接使用资源图标了,这里用 “LAYEDIT”即可。
使用的前提是创建的工具条的菜单组名和mnu的组名相同。否则找不到图标。
lisp创建工具条测试代码。

  1. (setq acad(vlax-get-acad-object))
  2. (setq menus(vla-get-menugroups acad))
  3. (setq menu(vla-item menus "mymnutest"));菜单要同组
  4. (setq toolbars(vla-get-toolbars menu))
  5. (setq newtab(vla-add toolbars "newtab"))
  6. (setq toolbaritem(vla-AddToolbarButton newtab 0 "aa" "b" "\033\033_.line "))
  7. (vla-setbitmaps toolbaritem "layedit" "layedit")