Использование SetWindowPos из user32.dll приводит к тому, что раскрывающийся список ComboBox отображается за объектами сC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Использование SetWindowPos из user32.dll приводит к тому, что раскрывающийся список ComboBox отображается за объектами с

Сообщение Anonymous »

ВВЕДЕНИЕ И СООТВЕТСТВУЮЩАЯ ИНФОРМАЦИЯ:
Я создаю приложение-виджет с графическим интерфейсом пользователя в WPF, которое будет отображаться поверх игры. Я пытаюсь добавить ComboBox, который будет отображаться перед фоном виджета. Перемещение ComboBox под изображением в XAML просто исправляет это, но всплывающее окно из ComboBox отображается позади изображения, что бы я ни делал. Я пытался установить z-индекс ComboBox, z-индекс элементов ComboBox, я пытался переместить ComboBox в другую сетку, но ничего не помогло. После нескольких попыток я понял, что является причиной этого. Это был код, который я использую в самом верху/внизу моего виджета:

Код: Выделить всё

IntPtr windowHandle = new System.Windows.Interop.WindowInteropHelper(overlayWindow).Handle;
if (foregroundWindowHandle == targetGameProcessHandle) {
SetWindowPos(windowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
} else {
SetWindowPos(windowHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
}
Замена этого кодового блока на этот решает проблему:

Код: Выделить всё

overlayWindow.Topmost = true;
if (foregroundWindowHandle == targetGameProcessHandle) {
overlayWindow.Visibility = Visibility.Visible;
} else {
overlayWindow.Visibility = Visibility.Hidden;
}
ВОПРОС:
Как я уже сказал, это решило мою проблему, поэтому я не ищу лучший код, который ее исправит (хотя это и помогло бы быть оценен по достоинству). Я просто хочу знать, почему или что вызывает сбой при использовании SetWindowPos.
Спасибо за ваше время и усилия, чтобы помочь.

Подробнее здесь: https://stackoverflow.com/questions/788 ... red-behind
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»