Следующий код в вашем существующем классе получает существующие стили окна (GetWindowLong
) и добавляет флаг стиля WS_EX_TRANSPARENT
к этим существующим стилям окна:
// Change the extended window style to include WS_EX_TRANSPARENT
int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
Win32.SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
Когда вы хотитечтобы вернуть его к нормальному поведению, вам нужно удалить флаг WS_EX_TRANSPARENT
, который вы добавили из стилей окна. Вы делаете это, выполняя побитовую операцию И НЕ (в отличие отИЛИ операция, которую вы выполнили для добавления флага).Совершенно не нужно помнить ранее извлеченный расширенный стиль, как предполагает ответ deltreme , поскольку все, что вам нужно сделать, это сбросить флаг WS_EX_TRANSPARENT
.
Код будет выглядеть примерно так:
public static void makeNormal(IntPtr hwnd)
{
//Remove the WS_EX_TRANSPARENT flag from the extended window style
int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
Win32.SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle & ~WS_EX_TRANSPARENT);
}