Children-окно в ArcGIS

0 голосов
спросил 09 Апр, 10 от 2008sean (1,020 баллов) в категории Программные продукты Esri
Открываю в ArcMap свою форму из dll-ки(С#), как правильно указать для него родительское окно ArcMap-а? (Чтобы оно сворачивалось вместе с ArcMap-ом, не висело в трее и т.п.)

На оф. форуме нашел трюк с SetWindowLongA, так и сделал:

//объявляю
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SetWindowLong")]
public static extern int SetWindowLongA(int hwnd, int nIndex, int dwNewLong);
...
pMainForm = new MainForm();
SetWindowLongA(pMainForm.Handle.ToInt32(), GWL_HWNDPARENT, m_application.hWnd);
pMainForm.ShowDialog();

где m_application это хук IApplication в ArcMap, а pMainForm - сама моя форма.

Проблема в том что в 1 из 10 случаев при открытии формы срабатывает неперехватываемое исключение:
Попытка чтения или записи в защищённую память. Это часто свидетельствует о том, что другая память повреждена
и ArcGIS приходится "снимать" в диспетчере задач.

Подскажите пожайлуста где я ошибся 8-)

С# 2008 Express SP1, ArcGIS 9.3 SP1, WinXP

5 Ответы

0 голосов
ответил 09 Апр, 10 от TDenis (42,620 баллов)
А стандартное Dockable Window не подходит?
0 голосов
ответил 13 Апр, 10 от 2008sean (1,020 баллов)
А должно?) Помоемуэто немного не то)
0 голосов
ответил 13 Апр, 10 от TDenis (42,620 баллов)
Откуда ж я знаю, должно или нет. Я ведь не знаю, с какой целью это окошко в дллку положено, может можно его переделать в dockable window, с которым проблем точно нет.
0 голосов
ответил 13 Апр, 10 от pooperec (10,820 баллов)
2008sean

В делфи это делаеться переопределением системного класса TApplication  (задаешь хендл Application равным хендлу отцовского компонента)...
0 голосов
ответил 19 Апр, 10 от TDenis (42,620 баллов)
Не уверен, подойдёт ли, но вот ещё вариант:
http://blog.davebouwman.com/index.php/2007/09/parenting-forms-to-arcmap-the-easy-way/


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