見出し画像

GDIで画面を変える方法!

これのコードを書きます。

waveのほうのコードを書きます。ちなみに、ここからダウンロードできます。

wave

             ダウンロード

exeファイルはこれです。

コード(C++):

#include <windows.h>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>

#define MAX_WAVE_HEIGHT 50
#define MIN_WAVE_HEIGHT 5
#define MAX_WAVE_FREQUENCY 0.1
#define MIN_WAVE_FREQUENCY 0.02
#define UPDATE_INTERVAL 100 

void ApplyWaveDistortion(HDC hdc, int width, int height, int waveHeight, double waveFrequency)
{
    HDC memDC = CreateCompatibleDC(hdc);
    HBITMAP memBitmap = CreateCompatibleBitmap(hdc, width, height);
    SelectObject(memDC, memBitmap);

    BitBlt(memDC, 0, 0, width, height, hdc, 0, 0, SRCCOPY);

    for (int y = 0; y < height; ++y)
    {
        int waveOffset = static_cast<int>(waveHeight * sin(y * waveFrequency));
        BitBlt(hdc, waveOffset, y, width - waveOffset, 1, memDC, 0, y, SRCCOPY);
        BitBlt(hdc, 0, y, waveOffset, 1, memDC, width - waveOffset, y, SRCCOPY);
    }

    DeleteObject(memBitmap);
    DeleteDC(memDC);
}

int main()
{
    FreeConsole();

    std::srand(static_cast<unsigned int>(std::time(nullptr)));

    HWND desktopWnd = GetDesktopWindow();
    HDC desktopDC = GetDC(desktopWnd);

    int screenWidth = GetSystemMetrics(SM_CXSCREEN);
    int screenHeight = GetSystemMetrics(SM_CYSCREEN);

    while (true)
    {
        int waveHeight = MIN_WAVE_HEIGHT + std::rand() % (MAX_WAVE_HEIGHT - MIN_WAVE_HEIGHT + 1);
        double waveFrequency = MIN_WAVE_FREQUENCY + static_cast<double>(std::rand()) / RAND_MAX * (MAX_WAVE_FREQUENCY - MIN_WAVE_FREQUENCY);

        ApplyWaveDistortion(desktopDC, screenWidth, screenHeight, waveHeight, waveFrequency);

        Sleep(UPDATE_INTERVAL);
    }

    return 0;
}


いいなと思ったら応援しよう!

Tomo8er|SerialKilller
サポートの代わりに𝕏 シェアお願いします!(かわりにするんかい!SNS𝕏限定かい!)