ADN Open CIS
Сообщество программистов Autodesk в СНГ

22/02/2016

Полное подавление пользовательского интерфейса AutoCAD из .NET

В первой статье из этой серии, мы видели, как отключить AutoCAD ленту. Во второй статье мы увидели как скрыть панели AutoCAD (с некоторыми оговорками). В этом посте мы собираемся показать как сделать всё намного лучше и проще при помощи одной строки кода.

Но прежде всего, хотелось бы сказать большое спасибо что большой "спасибо" James Meading и Alexander Rivilis, которые помогли нам.

James заметил существенную проблему во вчерашней статье, связанную с многострочными панелями, для которых требуется поместить на то же самое место, когда делаем их видимыми.

Но к полуночи, Alexander показал MFC код, который полностью подавляет пользовательский интерфейс AutoCAD но более низком уровне: подавляет полностью окно AutoCAD со всеми элементами интерфейса без необходимости скрывать что-либо.

Я посмотрел на код Alexander’а и обнаружил, что его несложно сделать работающим и в C# при помощи P/Invoke. И вот так этот код выглядит сейчас:

Код - C#: [Выделить]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.Runtime;
  3. using System;
  4. using System.Runtime.InteropServices;
  5.  
  6. namespace UserInterfaceManipulation
  7. {
  8.   public class Commands
  9.   {
  10.     [DllImport("user32.dll")]
  11.     static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
  12.  
  13.     [CommandMethod("DU")]
  14.     public static void DisableUICommand()
  15.     {
  16.       EnableUI(false);
  17.     }
  18.  
  19.     [CommandMethod("EU")]
  20.     public static void EnableUICommand()
  21.     {
  22.       EnableUI(true);
  23.     }
  24.  
  25.     public static void EnableUI(bool enable)
  26.     {
  27.       EnableWindow(Application.MainWindow.Handle, enable);
  28.     }
  29.   }
  30. }

 

Вот обновлённые команды DU и EU в действии:

Вы можете заметить, что панели остаются на месте и даже не становятся серыми, но при этом становятся недоступными.

Замечание переводчика: Командная строка при этом остаётся доступной для ввода с клавиатуры, но только если она пристыкована. Если же она остаётся плавающей, то ввод в неё становится недоступным.

Источник: http://through-the-interface.typepad.com/through_the_interface/2016/02/disabling-autocads-complete-ui-using-net.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=4289

Опубликовано 22.02.2016
Отредактировано 25.02.2016 в 16:29:31