Дочерняя форма от ArcMap в C#

0 голосов
спросил 01 Сен, 05 от grdmn (240 баллов) в категории Программные продукты Esri
Не могу создать дочернюю форму от ArcMap  в C# image.
Т.е. необходим инструмент (в виде кнопки (ICommand, ITool) в ArcMap), при нажатии которой появляется окно самого инструмента.
Нужно чтобы, окно инструмента было всегда поверх ArcMap, при этом чтобы можно было работать с самим ArcMap.

Я уже повсякому пытался это сделать, но ни как не получается.image

В Delphi это делается очень просто. 
Пример:

function TCommandTest.OnCreate(
  const hook: IDispatch): HResult;
begin
  pApplic := hook as IApplication;
  Application.Handle := pApplic.Get_hWnd;
end;

function TCommandTest.OnClick: HResult;
begin
  if not assigned(Form1) then Form1 := TForm1.Create(Application);
end;


Подскажите как это сделать в C#. 

4 Ответы

0 голосов
ответил 01 Сен, 05 от DenSer1 (660 баллов)

не пробовал ни в си ни в дэлфи, но точно знаю одно

поможет idockablewindow + itool (+ icommand)

в developer helpe есть отличный пример использования этих интерфейсов

для 9ки по умолчанию каталог с примерами на эту тему:

C:\Program Files\ArcGIS\DeveloperKit\samples\Application_Framework\Dock able_Window\...

0 голосов
ответил 05 Сен, 05 от grdmn (240 баллов)
Этот вариант мне не подходит, но всё равно спасибо.
0 голосов
ответил 08 Сен, 05 от Гость (210,080 баллов)
Скорее всего Вам поможет только такой вариант (через вызов WinAPI функции перед вызовом Form.Show()) Объявите в классе: [DllImport("user32.dll")] public static extern int SetWindowLong(int hwnd, int attr, int lVal); public static readonly int GWL_HWNDPARENT = (-8); Используйте перед показом формы (можно сделать базовый класс для немодальных форм и в его конструкторе вызывать эту функцию): SetWindowLong(myForm.Handle.ToInt32(), GWL_HWNDPARENT, m_app.hWnd);

Здесь m_app - это ссылка на ArcMap приложение

0 голосов
ответил 06 Окт, 05 от grdmn (240 баллов)
Урррраааа, заработалоimageimageimageimage.
Только я еще добавил пару строк:

public static readonly int GWL_EXSTYLE = (-20);
public static readonly int WS_EX_MDICHILD = 0x00000040;

SetWindowLong(this.Handle.ToInt32(), GWL_EXSTYLE, WS_EX_MDICHILD);

и получилось, то что, хотел.

novomax большое тебе СПАСИБО.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...