Advertisement
Guest User

Untitled

a guest
Dec 19th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. // http://tdm-gcc.tdragon.net/download
  2. //msys2 mingw64: gcc -O3 -march=native -Wall -Wextra -pedantic limited.cpp -o limited.exe -O3 -mconsole -DUNICODE -ld3d9
  3.  
  4. #define WINVER 0x0501
  5. #define _WIN32_WINNT 0x0501
  6.  
  7. #include <windows.h>
  8. #include <d3d9.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12. int click = 0;
  13. int stop = 0;
  14.  
  15. LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  16. {
  17.     switch(message) {
  18.     case WM_CLOSE:
  19.         DestroyWindow(hWnd);
  20.         stop = 1;
  21.         break;
  22.     case WM_DESTROY:
  23.         PostQuitMessage(0);
  24.         stop = 1;
  25.         break;
  26.     case WM_INPUT: {
  27.         UINT dwSize;
  28.         GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
  29.         LPBYTE lpb = (LPBYTE)malloc(dwSize * sizeof(BYTE));
  30.         if (lpb == NULL) return 0;
  31.         GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));
  32.         RAWINPUT* raw = (RAWINPUT*)lpb;
  33.         if (raw->header.dwType == RIM_TYPEMOUSE) {
  34.             USHORT b = raw->data.mouse.usButtonFlags;
  35.             if (b & RI_MOUSE_RIGHT_BUTTON_DOWN)
  36.                 click = 1;
  37.             else if (b & RI_MOUSE_LEFT_BUTTON_DOWN)
  38.                 click = 0;
  39.         }
  40.         free(lpb);
  41.     }
  42.     default:
  43.         return DefWindowProc(hWnd, message, wParam, lParam);
  44.     }
  45.     return 0;
  46. }
  47.  
  48. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  49. {
  50.     HWND hWnd;
  51.     WNDCLASSEX wc;
  52.     MSG msg;
  53.  
  54.     DEVMODE dm;
  55.     dm.dmSize = sizeof(DEVMODE);
  56.     EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
  57.     UINT width = dm.dmPelsWidth;
  58.     UINT height = dm.dmPelsHeight;
  59.     UINT refresh_rate = dm.dmDisplayFrequency;
  60.  
  61.     ZeroMemory(&wc, sizeof(WNDCLASSEX));
  62.  
  63.     wc.cbSize = sizeof(WNDCLASSEX);
  64.     wc.style = CS_HREDRAW | CS_VREDRAW;
  65.     wc.lpfnWndProc = WindowProc;
  66.     wc.hInstance = hInstance;
  67.     wc.lpszClassName = L"somewindowclass";
  68.  
  69.     RegisterClassEx(&wc);
  70.  
  71.     hWnd = CreateWindowEx(0, L"somewindowclass", L"test",
  72.                 WS_EX_TOPMOST | WS_POPUP,
  73.                 0, 0, width, height,
  74.                 NULL, NULL, hInstance, NULL);
  75.     ShowWindow(hWnd, nCmdShow);
  76.  
  77.     LPDIRECT3D9 d3d;
  78.     LPDIRECT3DDEVICE9 d3ddev;
  79.  
  80.     d3d = Direct3DCreate9(D3D_SDK_VERSION);
  81.  
  82.     D3DPRESENT_PARAMETERS d3dpp;
  83.  
  84.     ZeroMemory(&d3dpp, sizeof(d3dpp));
  85.     d3dpp.Windowed = FALSE;
  86.    
  87.     d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // изначально
  88.     d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // моё добавление
  89.        
  90.     d3dpp.hDeviceWindow = hWnd;
  91.     d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
  92.     d3dpp.BackBufferWidth = width;
  93.     d3dpp.BackBufferHeight = height;
  94.     d3dpp.FullScreen_RefreshRateInHz = refresh_rate;
  95.  
  96.     d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
  97.                 D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
  98.  
  99.     RAWINPUTDEVICE Rid[1];
  100.     Rid[0].usUsagePage = 0x01;
  101.     Rid[0].usUsage = 0x02;
  102.     Rid[0].dwFlags = RIDEV_NOLEGACY;
  103.     Rid[0].hwndTarget = 0;
  104.     RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]));
  105.  
  106.     SetCursor( NULL );
  107.     d3ddev->ShowCursor( FALSE );
  108.  
  109.     int fps = 0;
  110.     DWORD n, p;
  111.     p = (1 + GetTickCount()/1000) * 1000;
  112.    
  113.     while(!stop) {
  114.         while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
  115.             TranslateMessage(&msg);
  116.             DispatchMessage(&msg);
  117.         }
  118.         d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(click * 255, click * 255, click * 255), 1.0f, 0);
  119.         d3ddev->Present(NULL, NULL, NULL, NULL);
  120.         fps++;
  121.         if ((n=GetTickCount()) > p) {
  122.             p = (1 + n/1000) * 1000;
  123.             printf("%d\n", fps);
  124.             fps = 0;
  125.         }
  126.     }
  127.  
  128.     d3ddev->Release();
  129.     d3d->Release();
  130.  
  131.     return msg.wParam;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement