winapi — C ++ CreateWindow: позиция кнопки смещается при увеличении окна

У меня здесь странная проблема. Я создал прокси DLL для Spotify, чтобы я мог «наложить» на него кнопку. По сути, вот как это работает:

DllMain
-> Creates CMain class
-> Creates CToggleButton class
-> Hooks the button onto the Spotify window

У него есть два метода, один статический, который я использую для потока, поскольку потоки не могут вызывать функции-члены, и один нестатический, который вызывается функцией-членом.
После этого я создаю поток и передаю экземпляр класса CToggleButton через lpParam:

CreateThread(0, NULL, WindowThreadStatic, (void*)this, NULL, NULL);

Затем функция WindowThreadStatic:

DWORD WINAPI CToggleButton::WindowThreadStatic(void* lpParam)
{
return ((CToggleButton*)lpParam)->WindowThread();
}

И функция основного окна потока внутри класса:

DWORD CToggleButton::WindowThread()
{
MSG msg;
hButton = CreateWindowA("BUTTON", "Test", (WS_VISIBLE | WS_CHILD), 0, 0, 100, 20, parenthWnd, NULL, hInst, NULL);

bool bQueueRunning = true;
while (bQueueRunning)
{
if (PeekMessage(&msg, parenthWnd, 0, 0, PM_REMOVE))
{
switch (msg.message)
{
case WM_QUIT:
bQueueRunning = false;
break;
case WM_LBUTTONDOWN:
if (msg.hwnd == hButton)
{
MessageBoxA(parenthWnd, "Button!", "Button", MB_OK);
continue;
}
}

TranslateMessage(&msg);
DispatchMessage(&msg);
}
Sleep(10);
}

return 0;
}

Как видите, здесь также есть цикл сообщений для кнопки (здесь я не использовал GetMessage (), потому что он очень не отвечал, поэтому я решил использовать PeekMessage () вместе с задержкой в ​​10 мс, что прекрасно работает).
Маленькая картинка, чтобы показать, как это выглядит:
введите описание изображения здесь

Все отлично, но если я разверну окно, кнопка исчезнет. Когда я минимизирую и увеличиваю окно несколько раз, кнопку можно увидеть снова, но с очень странными координатами (а не с оригинальными 0,0, которые я ему дал).
введите описание изображения здесь
Так в чем моя проблема здесь? Почему координаты смещены?
Спасибо за чтение моего длинного поста 🙂

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]