Почему функция IsWindow() (winuser.h) не распознает WindowPtr OpenTK как действительный дескриптор окна?C#

Место общения программистов C#
Ответить
Anonymous
 Почему функция IsWindow() (winuser.h) не распознает WindowPtr OpenTK как действительный дескриптор окна?

Сообщение Anonymous »

Я работаю над проектом OpenTK на C#, чтобы создать прозрачное окно, пропускающее события мыши. Я хочу сделать это окно OpenTK кликабельным, настроив его расширенные стили окна. Однако я столкнулся с проблемой, из-за которой функция IsWindow не распознает WindowPtr из OpenTK как действительный дескриптор окна.
Вот соответствующая часть моего кода:

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

[DllImport("user32.dll", SetLastError = true)]
private static extern bool IsWindow(IntPtr hWnd);

public static void MakeWindowClickThrough(IntPtr hWnd)
{
int exStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
SetWindowLong(hWnd, GWL_EXSTYLE, exStyle | WS_EX_LAYERED | WS_EX_TRANSPARENT);
}

protected override void OnRenderFrame(FrameEventArgs e)
{
base.OnRenderFrame(e);

if (!_clickThroughSet)
{
IntPtr hWnd = (nint)WindowPtr;
if (IsWindow(hWnd))
{
MakeWindowClickThrough(hWnd);
_clickThroughSet = true;
Console.WriteLine("Click-through style set.");
}
else
{
Console.WriteLine("Waiting for a valid window handle...");
}
}

// ... rest of the rendering code
}
В OnRenderFrame я пытаюсь проверить, является ли WindowPtr допустимым дескриптором окна, используя IsWindow(hWnd). Однако IsWindow постоянно возвращает false, и консоль печатает «Ожидание допустимого дескриптора окна...».
Мои вопросы:
  • Почему IsWindow не распознает WindowPtr из OpenTK как действительный дескриптор окна?
  • Есть ли другой способ получить действительный дескриптор, который распознает IsWindow, или я неправильно использую WindowPtr?
  • Кто-нибудь сталкивался с этой проблемой при работе с OpenTK и существует ли альтернативный подход для настройки перехода по клику в окне OpenTK?


Подробнее здесь: https://stackoverflow.com/questions/791 ... ptr-as-a-v
Ответить

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

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

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

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

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