Как сделать форму самой верхней только для приложения? - PullRequest
6 голосов
/ 10 апреля 2010

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

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

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

Ответы [ 2 ]

9 голосов
/ 10 апреля 2010

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

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

  1. Свойство Form.Owner (хотя владельцем должна быть другая форма)
  2. Использовать Form.Show (владелец IWin32Window) перегрузка. (См. Это сообщение в блоге о том, как преобразовать дескриптор окна в IWin32Window).
  3. Использовать SetWindowLong () с параметром GWLP_HWNDPARENT.
  4. Используйте ShowDialog () , как предложил Микаэль Свенсон.

Для этого необходимо знать дескриптор окна приложений Excel.

1 голос
/ 10 апреля 2010

[Правка - измененный код]

[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();
}
...