Как сделать форму topmost только для приложения?

Я делаю надстройку excel, в которой при нажатии на пункт меню или кнопку панели инструментов открывается форма. Я установил верхнюю форму в true, но она остается Верхней для всех приложений windows xp. Мне просто нужно оставаться на вершине только для Microsoft Excel.

Я выбрал проект в Visual Studio 2008, в Excel - > 2003.

пожалуйста, скажите мне, как это сделать любым способом ........

2 ответов


вы можете установить владельца формы в качестве окна Microsoft Excel. В Windows принадлежит windows всегда отображаются над их владельцем. Диалоги и такие вещи, как окно поиска в Excel, принадлежат windows, что позволяет им отображаться над их владельцем.

есть несколько способов, которыми вы можете установить родителя формы:

  1. на форма.Владелец свойство (хотя владельцем должна быть другая форма)
  2. использовать форма.Показать (владелец IWin32Window) перегрузка. (См. блоге Как перевести оконную ручку в IWin32Window).
  3. использовать SetWindowLong() с параметром GWLP_HWNDPARENT.
  4. использовать ShowDialog () как предложил Микаэль Свенсон.

Это требует, чтобы вы знали дескриптор окна приложений Excel.


[Edit-changed code]

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

void func()
{
   Form1 f = new Form1();
   SetParent(f.Handle, (IntPtr)ThisAddIn.ExcelApplication.Hwnd);
   f.Show();
}