2008-09-25 2 views
8

Я хочу, чтобы форма .NET была формой TopMost для другого внешнего приложения (не связанного с .NET, чистого Win32), поэтому он остается выше этого Win32App, но не остальная часть приложений.Как изменить владельца окна с помощью его дескриптора

У меня есть ручку Win32App (при условии самой Win32App), и я попытался Win32 SetParent() function через P/Invoke in C#, но тогда мой .NET форма получает приурочены в Win32App, и это не то, что я хочу.

ответ

12

Я думаю, что вы ищете является P/Invoke SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)

Google Search

+1

Проблема заключается в том, что я искал слово «change windows owner» вместо поиска «change windows parent». :) – 2008-09-25 14:00:34

2

Да! У меня уже есть импорт P/Invoke из SetWindowLongPtr (который является x64 безопасным). А с помощью отражателя я искал на имущество Form.Owner (т.е. get_Owner (форма стоимости) метод) и сумел изменить владельца с

SetWindowLongPtr(childHdl, -8, OwnerHdl) 

Я искал то, что -8 (0xFFFFFFFFFFFFFFF8) имел в виду, прежде чем я мог отправьте решение здесь, но Джоэл уже указал на это.

Спасибо!

Смежные вопросы