
GDIで画面を変える方法!
これのコードを書きます。
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;
}
いいなと思ったら応援しよう!
