用未公开的函数acedSetDynInputDisplayMessage来实现动态显示

翻译 2013年12月04日 00:30:14

原文见:http://forums.autodesk.com/t5/NET/Dynamic-Input/td-p/1339772

目前AutoCAD未公开实现Dynamic Input的API,要实现和AutoCAD同样的效果,可以使用一个未公开的函数acedSetDynInputDisplayMessage

以下是C#代码:

using System;
using System.Text;

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;

using System.Threading;
using System.Globalization;
using System.Runtime.InteropServices;

#endregion

namespace RSNNAcadApp.Test
{
public class Test
{
//this is an undocumented api exported from acad.exe. Use it at your 
own risk.
//
// Setting this flag tells AutoCAD to display the last string output 
to the command line
//in the Dynamic Input prompt window (one time only.)
[DllImport("acad.exe", 
EntryPoint="?acedSetDynInputDisplayMessage@@YA_N_N​@Z")]
private static extern bool acedSetDynInputDisplayMessage(bool 
displayMessageOnce);

private double m_dist; //last distance chosen (per-document)
private bool m_firstTime = true; //first invocation of "test"? 
(per-document)
//use a non-static command method so the enclosing class (Test) will 
be instantiated
//for each document
[CommandMethod("test")]
public void DoIt()
{
Editor ed = 
Application.DocumentManager.MdiActiveDocument.Edit​or;
PromptDistanceOptions opt1 = new PromptDistanceOptions("Abstand 
zeigen");

opt1.AllowNegative = false;
opt1.AllowZero = false;
opt1.AllowNone = false;
opt1.UseDashedLine = true;
if (!m_firstTime)
opt1.DefaultValue = m_dist;


PromptDoubleResult res = ed.GetDistance(opt1);

if (res.Status == PromptStatus.OK)
{
m_dist = res.Value;
ed.WriteMessage(String.Format("Abstand = {0}", 
m_dist.ToString()));
acedSetDynInputDisplayMessage(true);
}
m_firstTime = false;
}
void MyPointFilter(object sender, PointFilterEventArgs e)
{
e.Result.ToolTipText = String.Format("Abstand = {0}", 
m_dist.ToString());
}
}
}


CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视

一、需求无论何时,当你在Explorer窗口中创建、删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图。有时候我们的程序中也需要这样的功能,以便当用...

CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视

一、需求无论何时,当你在Explorer窗口中创建、删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图。有时候我们的程序中也需要这样的功能,以便当用...
  • WINCOL
  • WINCOL
  • 2011年03月08日 16:11
  • 2634

利用微软未公开的WindowsAPI函数关闭或注销或重新启动计算机

众所周知,微软公开的用来关闭、注销、重新启动计算机的API是ExitWindowsEx。在Windows95/98下,可直接用ExitWindowsEx,即可正确关闭、注销、重新启动计算机;因Wind...

windows未公开函数NhGetInterfaceNameFromDeviceGuid分析

windows未公开函数NhGetInterfaceNameFromDeviceGuid分析 IPHLPAPI.dll中导出了函数NhGetInterfaceNameFromDeviceGuid,其...
  • yichigo
  • yichigo
  • 2012年03月31日 09:54
  • 1067

使用未公开关键字在 C# 中导入外部 printf 等参数数量可变函数 [1] CLR 支持

http://www.blogcn.com/user8/flier_lu/index.html?id=2602611&run=.09D4C2F C++ 语言因为缺省使用 cdecl 调用方式,故...

ntdll中一些未公开函数

  • 2009年03月03日 08:54
  • 193KB
  • 下载

关于未公开函数ZwQuerySystemInformation的使用

最近看一些关于内核方面的资料,碰到未公开函数,未能在微软官方找到答案,从网上了解到一些信息,摘录下来备用。       我看到驱动程序调用的一段代码的使用: ULONG GetModuleBase(P...

VB5 未公开的函数...

  • 2009年10月08日 01:48
  • 209B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用未公开的函数acedSetDynInputDisplayMessage来实现动态显示
举报原因:
原因补充:

(最多只允许输入30个字)