Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // http://tdm-gcc.tdragon.net/download
- //msys2 mingw64: gcc -O3 -march=native -Wall -Wextra -pedantic limited.cpp -o limited.exe -O3 -mconsole -DUNICODE -ld3d9
- #define WINVER 0x0501
- #define _WIN32_WINNT 0x0501
- #include <windows.h>
- #include <d3d9.h>
- #include <stdio.h>
- #include <stdlib.h>
- int click = 0;
- int stop = 0;
- LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch(message) {
- case WM_CLOSE:
- DestroyWindow(hWnd);
- stop = 1;
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- stop = 1;
- break;
- case WM_INPUT: {
- UINT dwSize;
- GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
- LPBYTE lpb = (LPBYTE)malloc(dwSize * sizeof(BYTE));
- if (lpb == NULL) return 0;
- GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));
- RAWINPUT* raw = (RAWINPUT*)lpb;
- if (raw->header.dwType == RIM_TYPEMOUSE) {
- USHORT b = raw->data.mouse.usButtonFlags;
- if (b & RI_MOUSE_RIGHT_BUTTON_DOWN)
- click = 1;
- else if (b & RI_MOUSE_LEFT_BUTTON_DOWN)
- click = 0;
- }
- free(lpb);
- }
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- HWND hWnd;
- WNDCLASSEX wc;
- MSG msg;
- DEVMODE dm;
- dm.dmSize = sizeof(DEVMODE);
- EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
- UINT width = dm.dmPelsWidth;
- UINT height = dm.dmPelsHeight;
- UINT refresh_rate = dm.dmDisplayFrequency;
- ZeroMemory(&wc, sizeof(WNDCLASSEX));
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WindowProc;
- wc.hInstance = hInstance;
- wc.lpszClassName = L"somewindowclass";
- RegisterClassEx(&wc);
- hWnd = CreateWindowEx(0, L"somewindowclass", L"test",
- WS_EX_TOPMOST | WS_POPUP,
- 0, 0, width, height,
- NULL, NULL, hInstance, NULL);
- ShowWindow(hWnd, nCmdShow);
- LPDIRECT3D9 d3d;
- LPDIRECT3DDEVICE9 d3ddev;
- d3d = Direct3DCreate9(D3D_SDK_VERSION);
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory(&d3dpp, sizeof(d3dpp));
- d3dpp.Windowed = FALSE;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // изначально
- d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // моё добавление
- d3dpp.hDeviceWindow = hWnd;
- d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
- d3dpp.BackBufferWidth = width;
- d3dpp.BackBufferHeight = height;
- d3dpp.FullScreen_RefreshRateInHz = refresh_rate;
- d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
- D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
- RAWINPUTDEVICE Rid[1];
- Rid[0].usUsagePage = 0x01;
- Rid[0].usUsage = 0x02;
- Rid[0].dwFlags = RIDEV_NOLEGACY;
- Rid[0].hwndTarget = 0;
- RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]));
- SetCursor( NULL );
- d3ddev->ShowCursor( FALSE );
- int fps = 0;
- DWORD n, p;
- p = (1 + GetTickCount()/1000) * 1000;
- while(!stop) {
- while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(click * 255, click * 255, click * 255), 1.0f, 0);
- d3ddev->Present(NULL, NULL, NULL, NULL);
- fps++;
- if ((n=GetTickCount()) > p) {
- p = (1 + n/1000) * 1000;
- printf("%d\n", fps);
- fps = 0;
- }
- }
- d3ddev->Release();
- d3d->Release();
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement