По сути, я делаю что-то, что имитирует эффект плавления экрана, но я могу заставить его работать только на моем основном мониторе. Я посмотрел столько, сколько мог, и был только один форум по GetDC для всех мониторов, но это было бесполезно, все, что он сделал, это сделал прямоугольник от моего основного монитора до моего дополнительного монитора с эффектом, все еще работающим только на мой основной монитор. Это тема, которую я прочитал: GetDC (NULL) получает основной монитор или виртуальный экран?
LRESULT CALLBACK Melter(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch (Message) {
case WM_CREATE: {
HDC Desktop = GetDC(HWND_DESKTOP);
HDC Window = GetDC(hWnd);
BitBlt(Window, 0, 0, ScreenWidth, ScreenHeight, Desktop, 0, 0, SRCCOPY);
ReleaseDC(hWnd, Window);
ReleaseDC(HWND_DESKTOP, Desktop);
SetTimer(hWnd, 0, Interval, 0);
ShowWindow(hWnd, SW_SHOW);
break;
}
case WM_PAINT: {
ValidateRect(hWnd, 0);
break;
}
case WM_TIMER: {
HDC Window = GetDC(hWnd);
int uX = (rand() % ScreenWidth) - (150 / 2), uY = (rand() % 15), Width = (rand() % 150);
BitBlt(Window, uX, uY, Width, ScreenHeight, Window, uX, 0, SRCCOPY);
ReleaseDC(hWnd, Window);
break;
}
case WM_DESTROY: {
KillTimer(hWnd, 0);
PostQuitMessage(EXIT_SUCCESS);
break;
}
return EXIT_SUCCESS;
}
return DefWindowProc(hWnd, Message, wParam, lParam);
}
Строка, которую я изменил, была HDC Window = GetDC(Window) to HDC Window = GetDC(NULL)
, а затем некоторые другие вещи, такие как RECT
. Было бы здорово, если бы кто-то мог мне помочь, спасибо:)
PS, ScreenWidth = 3600, ScreenHeight = 1080, в то время как PMScreenWidth = 1920, PMScreenHeight = 1080. PM, как и в основном мониторе, поэтому все элементы этой функции настроены на ScreenWidth / ScreenHeight, так что это ширина / высота все мониторы. Все еще не работает, хотя.