Pieni esimerkki, joka näyttää pyörivän neliön tyhjässä ikkunassa käyttäen GDI:tä. Kääntyy ainakin Visual C++:lla, saattaa jopa Borlandilla. Pienenä plussana nuolinäppäillä voi muuttaa neliön paksuutta, ja kokoa. Mitäpä tässä enää muuta sepostamaan.. No ainkin että http://koti.mbnet.fi/~haraa/files/nelio.exe löytyy valmiiksi käännetty versio, jos et jaksa kääntäjää availla/jotain muuta.
// Neliö By:HtH /* Todella paska demo, joka näyttää pyörivän neliön, joka tosin välkkyy pahasti. Koodi kääntyy ainakin Visual C++:lla, ehkäpä jopa Borlandilla. Koodista löytyy varmasti optimoimisen varaa, eikä GDI:llä piirtäminen ei ole nopeata. */ #define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <windows.h> #include <windowsx.h> #include <stdlib.h> #include <math.h> #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) /* pieni makro, joka katsoo näpin painallusta */ int WINDOW_WIDTH = 400; int WINDOW_HEIGHT = 300; LRESULT CALLBACK WindowProc(HWND hwnd, // Tapahtuma käsittelijä, joka hoitaa taloustyöt. UINT msg, WPARAM wparam, LPARAM lparam) { HDC gdc; switch(msg) { case WM_ACTIVATE: { return(0); } break; case WM_DESTROY: { PostQuitMessage(0); return(0); } break; case WM_SIZE: { WINDOW_WIDTH = LOWORD(lparam); WINDOW_HEIGHT = HIWORD(lparam); return(0); } break; default:break; } return(DefWindowProc(hwnd, msg, wparam, lparam)); } // End WindowProc int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int nshowcmd) { WNDCLASSEX winclass; // Luodaan wndclassex winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinstance; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_CROSS); winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = "MainMenu"; winclass.lpszClassName = "mainwin"; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); HWND hwnd; MSG msg; HDC gdc; RegisterClassEx(&winclass); //Kerrotaan luokasta myös Windowsille. srand(10); int jr = 0, jg=0, jb=0; double p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y, k=0; int thickness=2; int pyyhithickness = thickness; int size=100; int piirra=0; unsigned char r = 0, g = 0, b = 0; if(!(hwnd = CreateWindowEx(NULL, "mainwin", "Yet another GDI test", /*Luodaan ikkuna*/ WS_OVERLAPPEDWINDOW | WS_VISIBLE, 10,10,WINDOW_WIDTH,WINDOW_HEIGHT,NULL,NULL,hinstance, NULL))) return(0); DWORD alku = GetTickCount(); DWORD juttu = alku; while(TRUE) { if(!PeekMessage(&msg , NULL, 0, 0, PM_REMOVE)) { if(msg.message == WM_QUIT) {break;} } // End If TranslateMessage(&msg); gdc = GetDC(hwnd); alku=GetTickCount(); COLORREF vari = RGB(127,127,255); HPEN pen_thick = CreatePen(PS_SOLID, thickness, vari); // Tehdään piirto, ja pyyhinkynä. HPEN pen_pyyhi = CreatePen(PS_SOLID, pyyhithickness, RGB(0, 0, 0)); HPEN old_pen = (HPEN)SelectObject(gdc, pen_pyyhi); MoveToEx(gdc, p1x, p1y, NULL); // Pyyhitään neliö LineTo(gdc, p2x, p2y); LineTo(gdc, p3x, p3y); LineTo(gdc, p4x, p4y); LineTo(gdc, p1x, p1y); p1x = WINDOW_WIDTH / 2 + sin(k) * size; p2x = WINDOW_WIDTH / 2 + sin(k + (3.14/2)) * size; p3x = WINDOW_WIDTH / 2 + sin(k + 3.14) * size; p4x = WINDOW_WIDTH / 2 + sin(k + 3.14 + (3.14/2)) * size; p1y = WINDOW_HEIGHT / 2 + cos(k) * size; p2y = WINDOW_HEIGHT / 2 + cos(k + (3.14/2)) * size; p3y = WINDOW_HEIGHT / 2 + cos(k + 3.14) * size; p4y = WINDOW_HEIGHT / 2 + cos(k + 3.14 + (3.14/2)) * size; SelectObject(gdc, pen_thick); MoveToEx(gdc, p1x, p1y, NULL); // ... ja piirretään LineTo(gdc, p2x, p2y); LineTo(gdc, p3x, p3y); LineTo(gdc, p4x, p4y); LineTo(gdc, p1x, p1y); ReleaseDC(hwnd, gdc); k+=0.1; SelectObject(gdc, old_pen); DeleteObject(pen_thick); DeleteObject(pen_pyyhi); DispatchMessage(&msg); while((GetTickCount() - alku) < 33); pyyhithickness = thickness; if(!KEYDOWN(VK_UP) && thickness < 100) thickness+=3; if(!KEYDOWN(VK_DOWN) && thickness > 1) {pyyhithickness = thickness; thickness-=3;} if(!KEYDOWN(VK_LEFT) && size > 1) size-=3; if(!KEYDOWN(VK_RIGHT) && size < 500) size+=3; } //End While return(msg.wParam); } // End WinMain
ohoh... sisennys mennyt vähän perseelleen... >:(
jeah. way to go harripoi!
jeah. way to go harripoi!
jeah. way to go harripoi!
Hieno...
Kyllähän se siinä pyörii
HITON SIISTI OHJELMA!!!!
Tyylikäs ohjelma, enempää ei tarvitse vaatia windows-koodivinkistä :)
Ei toimi, kaatuu kokoajan :'(
aijai! kommentti alussa auki...
ihan hyvä mut huomaa heti et ei oo kaksois puskurointii, ai ai!
ihan hyvä mut huomaa heti et ei oo kaksois puskurointii, ai ai!
Mazku, teeppäs sä se kaksoispuskurointi tohon jos semmosen haluut ;>
tosta oli hyötyä mun autopeliin :D kiitti! tein samal kaksoispuskurointi version sdlläl... sen löytää tuolta koodivinkeistä kans :P
Hienoo! Kääntyy ainakin Borlandin C++BuilderX:llä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.