Существует ли метод WINAPI или P / Invoke для обрезки / маскирования окна в C #? - PullRequest
0 голосов
/ 04 июня 2019

Мой C # проект запускает некоторые другие процессы, которые создают свои собственные окна. Отображать все эти окна беспорядочно - есть ли способ обрезать / замаскировать эти окна (которые не принадлежат моему проекту), поэтому отображается только небольшая их часть и с ней можно взаимодействовать?

например. что-то, что можно передать вместе с прямоугольником.

Это существующая вещь?

1 Ответ

0 голосов
/ 05 июня 2019

Очень, очень большое спасибо @Michael Gunter, MDI действительно позволяет создавать такие конструкции!

Для тех, кто сталкивается с этим вопросом спустя годы, вот что работает:

IntPtr finalhWnd; // the window to clip's handle

Form mdiP = new MDIParent(); // MDIParent is custom, just a simple form without a border
mdiP.Show();

SetParent(finalhWnd, mdiP.Handle); // set the target form as a child of our own
SetWindowPos(finalhWnd, (IntPtr)0, -30, -50, 100, 100, 0x0200); // clip a 100x100 block, starting at (30,50)

Application.Run();

Вот пример использования его для обрезки границ экземпляра Chrome:

enter image description here

...