| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Поддержка WPF в ObjectARX.NET 2010?

Поддержка WPF в ObjectARX.NET 2010?

Ответ
Поиск в этой теме
Непрочитано 17.04.2010, 15:26 #1
Поддержка WPF в ObjectARX.NET 2010?
Pastor
 
это только кличка
 
Москва
Регистрация: 22.10.2006
Сообщений: 252

Библиотека ObjectAX.NET 2010 официально требует вызывать модальные диалоговые окна с помощью "фирменного" метода Application.ShowModalDialog(Form) и не пользоваться штатным Form.ShowDialog(), при этом пугая нас непредсказуемым поведением. А именно:
Цитата:
You must use this method instead of Form.ShowDialog, which may lead to unexpected behavior.
При этом перегруженного варианта метода, принимающего ссылку на объект класа Window (для диалогов написанных на WPF) я не обнаружил.
Означает ли это, что WPF пока официально не поддерживается?
И кто знает, что подразумевается под "непредсказуемым поведением" ?
__________________
...в шее моей жилы железные, и лоб мой - медный...
Просмотров: 5147
 
Непрочитано 19.04.2010, 17:53
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Form.ShowDialog != Window.ShowDialog;
Возможно это относится только к WinForms (утверждать не буду).

Я до сих пор проблем не замечал никаких.
hwd вне форума  
 
Автор темы   Непрочитано 19.04.2010, 21:28
#3
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Цитата:
Form.ShowDialog != Window.ShowDialog;
Я как раз уверен в обратном: на глубинном уровне Form.ShowDialog == Window.ShowDialog, поскольку за тем и другим стоит одно и то же - Win32 API.
Потому, собственно, вопрос и возник.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 20.04.2010, 08:26
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Я как раз уверен в обратном: на глубинном уровне Form.ShowDialog == Window.ShowDialog, поскольку за тем и другим стоит одно и то же - Win32 API.
Потому, собственно, вопрос и возник.
А вот это, батенька, ложное утверждение... Почитайте внимательней о технологии WPF (например Макконнелла - он в самом начале книги чётко показывает, что WPF - это совсем не Win32 API и объясняет различия).
hwd вне форума  
 
Автор темы   Непрочитано 20.04.2010, 11:00
#5
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Трудов Макконелла по WPF не нашёл.
Зато нашел в книге Matthew MacDonald'a "WPF in C#2008" (стр. 2):
Цитата:
One component that’s still in the picture (to a limited extent) is User32. That’s because WPF still relies on User32 for certain services, such as handling and routing input and sorting out which application owns which portion of screen real estate.
Что в переводе означает примерно следующее:
"Один компонент который все ещё остается в силе (определенная его часть) - это User32 (dll-библиотека - уточнение моё). И это по тому, что WPF полагается на неё при маршрутизации и обработке пользовательского ввода и при определении того, какое приложение какой частью пощади экрана владеет...."
Т.е. по-прежнему в силе "старый фундамент" - очереди потоков, циклы выборки сообщений из этих очередей, отношения владения между окнами... И именно это я имел в виду, говоря об отсутствии разницы между Windows Forms и WPF. Только я и без Макдональда об этом догадывался, потому как в OS Windows по другому и быть не может.
__________________
...в шее моей жилы железные, и лоб мой - медный...

Последний раз редактировалось Pastor, 20.04.2010 в 12:50.
Pastor вне форума  
 
Непрочитано 20.04.2010, 11:36
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Трудов Макконелла по WPF не нашёл.
Зато нашел в книге Matthew MacDonald'a "WPF in C#2008":

Что в переводе означает примерно следующее:
"Один компонент который все ещё остается в силе (определенная его часть) - это User32 (dll-библиотека - уточнение моё)". И это по тому, что WPF полагается на неё при маршрутизации и обработке пользовательского ввода и при определении того, какое приложение какой частью пощади экрана владеет...."
Т.е. по-прежнему в силе "старый фундамент" - очереди потоков, циклы выборки сообщений из этих очередей, отношения владения между окнами... И именно это я имел в виду, говоря об отсутствии разницы между Windows Forms и WPF. Только я и без Макдональда об этом догадывался, потому как в OS Windows по другому и быть не может.
Тьфу ты... Макдональда конечно же... Это я авторов перепутал.
Об этой книге я и говорил.
Цитата:
Один из компонентов, который всё ещё находится в поле зрения (в ограниченных пределах) - это User32.
И далее вы не привели в цитате следующее важно предложение:
Цитата:
Однако всё рисование осуществляется с помощью DirectX.
А так же следующий блок "на заметку!", присутствующий там же:
Цитата:
Это самое кардинальное изменение в WPF. WPF не является оболочкой для GDI/GDI+. Скорее это замещение - отдельный уровень, который работает через DirectX.
hwd вне форума  
 
Автор темы   Непрочитано 20.04.2010, 12:42
#7
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Цитата:
Однако всё рисование осуществляется с помощью DirectX.
Я не привел это предложение, потому что собственно "рисование" меня не беспокоит.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 20.04.2010, 13:16
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Я не привел это предложение, потому что собственно "рисование" меня не беспокоит.
Механизмы отображения на экране визуального контента иные чему у WinForms (насколько я понял из прочитанного ранее в книгах). Спорить не буду, поскольку сам "чайник" в WPF, просто повторюсь, что у меня проблем не возникало. Я, не понимаю почему вообще должны возникать проблемы, ведь обе технологии используют однопоточность ([STAThread]), и модальные окна блокируя поток (до закрытия окна) возвращают результаты обратно, т.е. вроде бы проблем с синхронизацией возникнуть не должно вообще (во всяком случае мне так видится). Почему "lead to unexpected behavior" - не понимаю, хотя наверняка что-то происходит, раз пишут такое, вот только распространяется ли это на WPF - под вопросом... (((
hwd вне форума  
 
Непрочитано 20.04.2010, 14:48
#9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
Я, не понимаю почему вообще должны возникать проблемы, ведь обе технологии используют однопоточность ([STAThread]), и модальные окна блокируя поток (до закрытия окна) возвращают результаты обратно, т.е. вроде бы проблем с синхронизацией возникнуть не должно вообще (во всяком случае мне так видится)
Ошибаешься, т.к. забываешь, что каждый из документов - это отдельная нить (thread) и плюс еще нить для контекста приложения. Так вот в контекстах документов (если мне не изменяет память) без разницы что использовать Application.ShowModalDialog(Form) или Form.ShowDialog(), а вот в контексте приложения нарушается синхронизация. На discussion.autodesk.com когда-то этот момент обсуждался, но сейчас с ходу не нашел.

P.S.: Зато нашел другое обсуждение этого вопроса: http://through-the-interface.typepad...ght-way-t.html
Александр Ривилис вне форума  
 
Непрочитано 20.04.2010, 14:53
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Ошибаешься, т.к. забываешь, что каждый из документов - это отдельная нить (thread) и плюс еще нить для контекста приложения. Так вот в контекстах документов (если мне не изменяет память) без разницы что использовать Application.ShowModalDialog(Form) или Form.ShowDialog(), а вот в контексте приложения нарушается синхронизация. На discussion.autodesk.com когда-то этот момент обсуждался, но сейчас с ходу не нашел.
Относится это как к WinForms, так и к WPF?
В таком случае вообще сей момент не является ли попросту задокументированным багом?
hwd вне форума  
 
Непрочитано 20.04.2010, 15:04
#11
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
Относится это как к WinForms, так и к WPF?
Ко всему, что работает на платформе Win32/Win64. Никакой разницы нет, т.к. с точки зрения ядра системы ни WinForms, ни WPF ничего нового не внесли - они лишь "оболочки" над низкоуровневым оконным интерфейсом.
Цитата:
Сообщение от hwd Посмотреть сообщение
В таком случае вообще сей момент не является ли попросту задокументированным багом?
Причем здесь баг? Обычное ограничение.
Александр Ривилис вне форума  
 
Непрочитано 20.04.2010, 15:21
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Я посмотрел ваш линк. Хочу понять насколько существенны те пункты, которые там перечислены:

1. Dialogs will automatically pick up the icon of the host product
Отображённое через метод ShowDialog окно имеет иконку автокада (во всяком случае в WPF) и не вижу в этом криминала.
Но при желании можно назначить любую:
Код:
[Выделить все]
Window win = new Window() { Title = "WPF modal dialog", WindowStartupLocation = WindowStartupLocation.CenterScreen };
BitmapImage img = new BitmapImage(new Uri(@"Z:\Картинки\Пригодится в программировании\Изображения СУБД\server_database.ico"));
win.Icon = img;
win.ShowDialog();
Результат:



2. Dialog size and position will be persisted automatically
Настройку размеров и позиции модального окна можно выполнить без проблем, задав предварительно этому окну свойства Width, Height и WindowStartupLocation (установив последнее в значение WindowStartupLocation.CenterScreen - самый часто встречающийся вариант, поскольку AutoCAD развёрнут, как правило, на весь экран) - тоже ничего криминального не вижу.
Но при желании можно чётко разместить диалоговое окно относительно основного окна приложения или же относительно окна документа, воспользовавшись для этого информацией, полученной
из основного окна приложения:
Autodesk.AutoCAD.ApplicationServices.Application.MainWindow.Location;
Autodesk.AutoCAD.ApplicationServices.Application.MainWindow.Size;


или же из окна документа:

Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Location;
Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Size;


3. Other floating AutoCAD windows (e.g. the Properties palette) will be disabled, as needed
Они и так недоступны в режиме модального окна, отображённого через через метод ShowDialog (я проверял).
4. The DIASTAT system variable will be set properly with the exit status of the dialog
Для того, чтобы получить информацию о том, с помощью какой клавиши было закрыто модальное окно, совершенно не обязательно использовать системную переменную DIASTAT.

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

Поправьте меня, если я не прав.

Цитата:
Pastor
При этом перегруженного варианта метода, принимающего ссылку на объект класа Window (для диалогов написанных на WPF) я не обнаружил.
з.ы. Кстати, Autodesk.AutoCAD.ApplicationServices.Application имеет методы ShowModalWindow и ShowModelessWindow, которые принимают в качестве параметров WPF-окна. Так что... Проблем-то с WPF нет...

Последний раз редактировалось hwd, 20.04.2010 в 16:35.
hwd вне форума  
 
Автор темы   Непрочитано 20.04.2010, 18:03
#13
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Цитата:
з.ы. Кстати, Autodesk.AutoCAD.ApplicationServices.Application имеет методы ShowModalWindow и ShowModelessWindow, которые принимают в качестве параметров WPF-окна. Так что... Проблем-то с WPF нет...
Передо мной открытая справка из дистрибутива ObjectARX 2010. Нет там таких методов!
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 20.04.2010, 18:15
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Передо мной открытая справка из дистрибутива ObjectARX 2010. Нет там таких методов!
Зато в Object Browser есть. :-)
Александр Ривилис вне форума  
 
Непрочитано 20.04.2010, 18:16
#15
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Передо мной открытая справка из дистрибутива ObjectARX 2010. Нет там таких методов!
Только давайте без истерики, пожалуйста... Передо мной открытая MS VS 2010:


и всё работает без проблем.

из двух последних методов, отображающих окно, следует оставить только один, а второй - закомментировать, т.к. при закрытии окна вызывается Dispose() и второй раз оно уже не откроется. Я не комментировал на скрине, дабы показать, что ошибок нет и присутствует 2 варианта.

Последний раз редактировалось Кулик Алексей aka kpblc, 20.04.2010 в 22:17.
hwd вне форума  
 
Автор темы   Непрочитано 20.04.2010, 18:38
#16
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Цитата:
Только давайте без истерики, пожалуйста...
Это не истерика, а легкое раздражение.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 20.04.2010, 18:40
#17
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Это не истерика, а легкое раздражение.
Проверяйте сначала и уже потом "раздражайтесь"... (рекомендация на будущее).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 20.04.2010, 21:00
#18
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Ну, раз в справке нет, то значит официально не поддерживается.
На этом и порешим.

p.s.
Чтобы давать рекомендации, надо сначала стать человеком авторитетным и набраться возрасту, хотя бы годков сорок.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 20.04.2010, 21:09
#19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Ну, раз в справке нет, то значит официально не поддерживается.
На этом и порешим.
Да ради Бога, можете хоть в блокноте вместо VS работать - это ваше личное дело. )

Цитата:
Сообщение от Pastor Посмотреть сообщение
Чтобы давать рекомендации, надо сначала стать человеком авторитетным и набраться возрасту, хотя бы годков сорок.
Ну вот и договорились - более в ваши топики не суюсь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 20.04.2010, 22:13
#20
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Ну, раз в справке нет, то значит официально не поддерживается.
Это значит лишь, что не успели (забыли - можно выбрать по вкусу) задокументировать. Пример тому документация ObjectARX SDK 2011. Вот если бы на протежении хотябы 5 версий не было описания каких-то возможностей (как было с рядом функций ObjectARX), вот тогда можно было бы сказать "Недокументировано, официально не поддерживается".

Offtop: Pastor, hwd - Ей Богу смешно смотреть как два взрослых мужика играются в песочнице. Нас (т.е. тех, кто отвечает на вопросы по ObjectARX и .NET) тут всего ничего. А вы еще и соритесь.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Поддержка WPF в ObjectARX.NET 2010?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу переустановить Autocad 2010 Ignatych AutoCAD 51 27.08.2021 18:24
Проблемы совместимости при чтении чертежей в AutoCAD 2004 сделанных в AutoCAD 2010 (сохраненных в формате AutoCAD 2000) GL0Ri0US AutoCAD 12 13.03.2010 22:48
AutoCAD 2010 ИЛИ AutoCAD Architecture 2010 Bat AutoCAD 2 25.11.2009 07:17
Серьезная проблема с Autocad Architecture 2010 moroz_nastya Вертикальные решения на базе AutoCAD 12 20.10.2009 20:27
автокад 2010 MEP,kak риббонс перевезти в классические тоолбарс GECK Вертикальные решения на базе AutoCAD 2 28.04.2009 19:02