Проблема с прозрачностью в Windows Forms C # - PullRequest
2 голосов
/ 04 мая 2011

Я пытаюсь получить в .NET 2.0 прозрачную форму, которая сверху, невидимая для щелчков мышью, но на ней можно рисовать.Я могу легко достичь этого, установив TransparencyKey в цвет фона формы.Но есть одна очень легко воспроизводимая проблема во всех Java-программах (например, JDownloader, Vuze, Open Office): иногда, когда отображается контекстное меню, оно оставляет часть (или целое) меню все еще видимой после того, как я щелкаю где-то еще.Он физически закрыт, потому что не может щелкнуть ни по одному элементу, но его изображение остается в моей верхней невидимой форме - возможно, возникла некоторая проблема с перерисовкой.Я буду очень благодарен за любую помощь.

Хьюго

1 Ответ

1 голос
/ 04 мая 2011

Обычное приложение Windows реализует контекстные меню как настоящие окна, поэтому, когда пользователь закрывает их, все окна, расположенные внизу, должным образом получают уведомления и перерисовываются, поэтому изображение меню нигде не «остается позади».

Java-приложения, с которыми у вас возникают проблемы, скорее всего, реализуют контекстные меню, рисуя их прямо на экране, а когда меню закрываются, приложение сворачивается и делает недействительными все окна под ним. Я предполагаю, что этот метод не делает недействительной область, занятую вашим приложением, потому что он думает, что ваше окно находится над ним, и он не понимает, что ваше приложение прозрачно (это предположение - я не знаю точно. контекстные меню для этих приложений выглядят иначе, чем меню для нативного приложения, тогда, вероятно, именно это и происходит).

Если это то, что происходит, вы мало что можете с этим поделать. Одна вещь, которую вы могли бы сделать, это нарисовать на экране самостоятельно, вместо использования прозрачного окна. Или вы могли бы просто иметь таймер в вашей форме периодически вызывать обновление / аннулировать.

...