Полное подавление пользовательского интерфейса AutoCAD из .NET
В первой статье из этой серии, мы видели, как отключить AutoCAD ленту. Во второй статье мы увидели как скрыть панели AutoCAD (с некоторыми оговорками). В этом посте мы собираемся показать как сделать всё намного лучше и проще при помощи одной строки кода.
Но прежде всего, хотелось бы сказать большое спасибо что большой "спасибо" James Meading и Alexander Rivilis, которые помогли нам.
James заметил существенную проблему во вчерашней статье, связанную с многострочными панелями, для которых требуется поместить на то же самое место, когда делаем их видимыми.
Но к полуночи, Alexander показал MFC код, который полностью подавляет пользовательский интерфейс AutoCAD но более низком уровне: подавляет полностью окно AutoCAD со всеми элементами интерфейса без необходимости скрывать что-либо.
Я посмотрел на код Alexander’а и обнаружил, что его несложно сделать работающим и в C# при помощи P/Invoke. И вот так этот код выглядит сейчас:
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.Runtime;
- using System;
- using System.Runtime.InteropServices;
- namespace UserInterfaceManipulation
- {
- public class Commands
- {
- [DllImport("user32.dll")]
- static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
- [CommandMethod("DU")]
- public static void DisableUICommand()
- {
- EnableUI(false);
- }
- [CommandMethod("EU")]
- public static void EnableUICommand()
- {
- EnableUI(true);
- }
- public static void EnableUI(bool enable)
- {
- EnableWindow(Application.MainWindow.Handle, enable);
- }
- }
- }
Вот обновлённые команды DU и EU в действии:
Вы можете заметить, что панели остаются на месте и даже не становятся серыми, но при этом становятся недоступными.
Замечание переводчика: Командная строка при этом остаётся доступной для ввода с клавиатуры, но только если она пристыкована. Если же она остаётся плавающей, то ввод в неё становится недоступным.
Обсуждение: http://adn-cis.org/forum/index.php?topic=4289
Опубликовано 22.02.2016Отредактировано 25.02.2016 в 16:29:31