- 积分
- 3349
- 明经币
- 个
- 注册时间
- 2016-6-12
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 zjh2785 于 2018-12-8 23:01 编辑
有更新版本,请各位移步
【源码】仿天正屏幕菜单(更新)
发个贴吧,顺便等大神回答我刚发的请求贴,闲来没事做了个类似天正的屏幕菜单,类已经封装好了,见附件
使用的时候直接new一个MyPanel就可以用了。
但目前获取资源中的图标还在做,前面做的一个好像在CAD中不能用,注释掉了。
下面是最终效果:
以下是具体步骤,适合新手
========================================
第一步:用Visual Studio新建一个CAD插件(基础的命令创建方法就不阐述了)
第二部:添加自定义控件类到项目中(下面附件有文件)
第三步:文件-添加-新项目,选择VisualC#下的windows,在右侧选择windows 窗体控件库,项目名称为DockDrag
双击控件进入到代码,实例化一个MyPanel ,在Load下直接添加需要加入的命令,
第四步:添加代码
由于自己本人使用,没有写什么注释,看不懂的新手朋友可以发帖提问,我也是新手,我能力范围内的我会经全力解答。下那个部分压缩吧就可以了
=====================================================================
=====================================================================
=====================================================================
有些朋友说东西不全,这样好了,我把所有其他的代码全部提出来,只留下需要用到的,剩下的代码在窗口中使用就行了
顺便把图标处理好了:
使用方法:- using System;
- using System. Drawing;
- using System. Windows. Forms;
- using Autodesk. AutoCAD. Windows;
- using Autodesk. AutoCAD. ApplicationServices;
- using Autodesk. AutoCAD. Runtime;
- using Autodesk. AutoCAD. Geometry;
- using DotNetARX;
- using System. Collections. Generic;
- using System. Runtime. InteropServices;
- namespace CADToolBox
- {
- public partial class DockDrag : UserControl
- {
- //初始化
- SimplePanel sp;
- public DockDrag ( )
- {
- InitializeComponent( );
- sp = new SimplePanel(this, Resource1.PanelDefaultIcon, Resource1.PanelClickedIcon );
- sp. SubButtonClick += new EventHandler(sp_SubButtonClick);
- sp. SubButtonMouseLeave += new EventHandler(sp_SubButtonMouseLeave);
- }
- //因为单击命令后系统焦点在工具条上,
- //所以执行完命令之后鼠标回到CAD绘图区会出现不能响应的现行,
- //因此需要手动把焦点设置到CAD
- [DllImport("user32.dll")]
- private static extern bool SetForegroundWindow (IntPtr hWnd);
- private void sp_SubButtonMouseLeave (object sender, EventArgs e)
- {
- SimpleButton btn = sender as SimpleButton;
- if (btn != null)
- {
- Document doc = Autodesk. AutoCAD. ApplicationServices. Application. DocumentManager. MdiActiveDocument;
- SetForegroundWindow(doc. Window. Handle);
- }
- }
- //执行命令
- private void sp_SubButtonClick (object sender, EventArgs e)
- {
- SimpleButton btn = sender as SimpleButton;
- if (btn != null)
- {
- Document doc = Autodesk. AutoCAD. ApplicationServices. Application. DocumentManager. MdiActiveDocument;
- doc. SendStringToExecute(btn.Tag.ToString() + "\n", true, false, true);
- }
- }
- //添加命令
- private void DockDrag_Load (object sender, EventArgs e)
- {
- IntPtr index = sp. AddItem("系统设置");
- sp. AddItem(index, "批量打印", "CNJ_BatchPlot", Resource1.IM_BATCHPLOT);
- sp. AddItem(index, "插参照块", "CNJ_InsertBlocks", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "绘制直线", "Line", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "标高标注", "BG", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "坡度标注", "PD", Resource1. IM_EASYBLOCK);
- index = sp. AddItem("常用命令");
- sp. AddItem(index, "绘等高线", "DGX", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "标等高线", "bdgx", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "超级偏移", "SO", Resource1. IM_EASYBLOCK);
- index = sp. AddItem("系统设置");
- sp. AddItem(index, "批量打印", "CNJ_BatchPlot", Resource1. IM_BATCHPLOT);
- sp. AddItem(index, "插参照块", "CNJ_InsertBlocks", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "绘制直线", "Line", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "标高标注", "BG", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "坡度标注", "PD", Resource1. IM_EASYBLOCK);
- index = sp. AddItem("常用命令");
- sp. AddItem(index, "绘等高线", "DGX", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "标等高线", "bdgx", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "超级偏移", "SO", Resource1. IM_EASYBLOCK);
- index = sp. AddItem("系统设置");
- sp. AddItem(index, "批量打印", "CNJ_BatchPlot", Resource1. IM_BATCHPLOT);
- sp. AddItem(index, "插参照块", "CNJ_InsertBlocks", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "绘制直线", "Line", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "标高标注", "BG", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "坡度标注", "PD", Resource1. IM_EASYBLOCK);
- index = sp. AddItem("常用命令");
- sp. AddItem(index, "绘等高线", "DGX", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "标等高线", "bdgx", Resource1. IM_EASYBLOCK);
- sp. AddItem(index, "超级偏移", "SO", Resource1. IM_EASYBLOCK);
- }
- }
- }
=======================================
代码中获取图标的方法我再啰嗦几句, 简单说就是
1 在工程中新建一个资源文件,
2 把需要加入到资源中的图标全部添加进去(注意,上面所用的全是ICO格式的),系统会自动生成相关的代码
3 然后就可以使用Resource1.图标名 来直接访问资源了,
PS. 最重要的一点,要把所有资源的 生成操作 选项设置成 嵌入的资源, 否则会提示实例为NULL;
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|