Ensimmäinen kunnollinen Win32-ohjelmani. :)
Kääntyy ainakin MingW:llä.
Binary, sorsat ja dev-file: http://www.devever.net/akx/dl/Hupisi.zip
/** HUPISITRUUNA AKX 12/08/2004. Uusi versio 16/08/2004: - Ikkunaa ei suljetakaan enää klikkaamalla ;) - Ikkuna pomppii seinistä - Kommentit sorsaan - Ikkuna pysyy etummaisena */ #include <windows.h> char luokka[] = "Hupisitruuna"; WNDCLASSEX wincl; MSG messages; HFONT fnt; UINT ajastin; HWND hwnd,hwLabel; float dx=0; float dy=0; int screenW; int screenH; LRESULT CALLBACK SitruunaProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { POINT cur; RECT win; switch (message) { case WM_DESTROY: PostQuitMessage (0); break; case WM_TIMER: GetCursorPos(&cur); GetWindowRect(hwnd,&win); // Lisätään x- ja y-liikkumisarvoihin murto-osa etäisyydestä kohteeseen dx+=(cur.x-(win.left+96))*0.03; dy+=(cur.y-(win.top+96))*0.04; // Osuuko vasemmalla/oikealla reunoihin? if(win.right>screenW) { win.left=screenW-193; dx*=-0.9; } else if(win.left<0) { win.left=1; dx*=-0.9; } // Entäs ylä/alareunaan? if(win.bottom>screenH) { win.top=screenH-193; dy*=-0.9; } else if(win.top<0) { win.top=1; dy*=-0.9; } // Hidastetaan liikkumista (muuten hiukan holtiton ;) dx*=0.97; dy*=0.96; // Siirretään akkuna SetWindowPos(hwnd,HWND_TOPMOST,win.left+dx,win.top+dy,0,0,SWP_NOSIZE); break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } void luoIkkuna(HINSTANCE itse) { POINT p; GetCursorPos(&p); // Napsitaan näytön korkeus ja leveys talteen screenW=GetSystemMetrics(SM_CXSCREEN); screenH=GetSystemMetrics(SM_CYSCREEN); // Luodaan pääikkuna hwnd=CreateWindow(luokka,"Hupisitruuna 1.1",WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU,p.x-96,p.y-96,192,192,HWND_DESKTOP,NULL,itse,NULL); if(!hwnd) { MessageBox(HWND_DESKTOP,"Ikkunaa ei voitu luoda.","Katsos vaan!",MB_OK|MB_ICONSTOP); return; } // Luodaan teksti hwLabel=CreateWindow ("STATIC","Hupisitruuna\n(C) AKX 2004\n\nLiikuta hiirtä! ;)",SS_CENTER|WS_CHILD,0,40,192,70,hwnd,NULL,itse,NULL); if(!hwLabel) { MessageBox(HWND_DESKTOP,"Tekstilabelia ei voitu luoda.","Ei maar!",MB_OK|MB_ICONEXCLAMATION); } // Ja tekstille fontti fnt=CreateFont(-11,0,0,0,0,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_DONTCARE,"Tahoma"); if(!fnt) { MessageBox(HWND_DESKTOP,"Fontin luonti pissi.","Voi harmi!",MB_OK|MB_ICONEXCLAMATION); } else { PostMessage(hwLabel,WM_SETFONT,(WPARAM)fnt,TRUE); } // Näytetään ikkunat ShowWindow (hwLabel,SW_SHOW); ShowWindow (hwnd,SW_SHOW); // Ja asennetaan ajastin ajastin=SetTimer(hwnd,1,30,NULL); } void luoIkkunaLuokka(HINSTANCE itse) { wincl.hInstance = itse; wincl.lpszClassName = luokka; wincl.lpfnWndProc = SitruunaProc; wincl.style = 0; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = wincl.hIconSm = LoadIcon (NULL, IDI_ASTERISK); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; if (!RegisterClassEx (&wincl)) { MessageBox(HWND_DESKTOP,"Ikkunaluokkaa ei voitu luoda.","Hupsista!",MB_OK|MB_ICONSTOP); return; } } void putsaaPois() { if(!DeleteObject(fnt)) { MessageBox(HWND_DESKTOP,"Fonttia ei saatu putsattua.","Oh-hoh!",MB_OK); } } void pyoritaPumppua() { while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } } int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int wndStyle) { luoIkkunaLuokka(hThisInstance); luoIkkuna(hThisInstance); pyoritaPumppua(); putsaaPois(); return messages.wParam; }
:'( Nyyh! Miks mä en osaa tehä tollasta!
Ei jaksa käännellä. Olisko jossain valmiiksi käännettyä binaryä?
Kuvaukseen yleensä kirjoitetaan myös mitä tällä voi tehdä :)
Ihan hieno joskin vähän koodi sekavaa.
Tosi hauska :D mutta mistä toi nimi tulee.
Gwaur: ikkuna heiluu hiiren mukaan sillee jännästi mitä ei voi selittää.
Myönnetään... Vähän epäselvähän tuo on.
Ei sillä mitään tehdä. :)
Linkki binääriin lisätty.
Kaviaari: ei MingW:llä tule mitään warningeja...
Aika pirun hauska :)
ja koska kommenttia ei voi muokata kirjoitan uuden kommentin:
Olis vielä hauskempi jo ikkuna pomppais ruudun reunasta eikä menisi ruudusta ulos piiloon :)
Hoituu. En vaan jaksanut aiemmin sitä tehdä. :) Hetkinen...
Nuin!
Hieno :D
mieki haluaisin osata tehdä tämmösii... no ehkä ajankanssa.
No ihan kiva.
Oon melko uus ohjelmoija ja en oo varma oppiiks tollasta ikinä tekee.
Aika hieno. Sori tosta äskeisestä tyhjästä kommentista.
Hauska ohjelma! (Ja tällä on todella hyvä käyttötarkoitus)
Taitaa tehdä käynnistäjänsä happamaksi kuin sitruuna eikä lainkaan huvittuneeksi? :P
Ei toimi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.