#include <windows.h> #include <fstream> HWND hwnd; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int roskaa) { SetTimer(hwnd, 1337, 50, (TIMERPROC) NULL); MSG messages; while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_TIMER: { MessageBox(hwnd, "Ajastin toimii", "jee", MB_OK); break; } default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Mikä tossa on vikana? Kääntäjä ei valita mitään, eikä ees anna varotuksia mutta ikinä ei päästä WM_TIMER kohtaan.
EDIT: toi ei myöskään toimi jos laittaa: SetTimer(null, .. .. ..)
Laita nyt edes NULL hwnd:n arvoksi. Nythän siinä voi olla vaikka mitä sotkua. Jos se ei auta, pitää varmaankin luoda ikkuna.
Höh, ei se toiminu. Kai se ikkuna sitten pitää luoda, kiitos kuitenki.
Jaa, olit näköjään NULLia kokeillutkin, enpä huomannut lukea niin tarkasti.
Tarkistapa, palauttaako tuo funktio jotakin muuta kuin nollan eli onnnistuuko luonti ollenkaan.
if (!SetTimer(0, 0, aika, 0)) { // Virhe }
Virheen voi tulostaa MSDN:n esimerkin mukaan.
Ja WndProcin käyttö vaatii ikkunaluokkaa, jolle on asetettu se WndProc. Eihän tuossa ohjelma voi mistään tietää, että viestit pitäisi lähettää edelleen juuri tuolle WndProc-funktiolle. Suosittelen siis TimerProcin käyttöä.
Ehm.. :S en oikein osannu käyttää tota linkin neuvoa
Tuossa koodissahan ei rekisteröidä window-luokkaa ollenkaan eikä ikkunaa luoda. Miten tuo ajastinviesti silloin voisi edes ohjautua tuolle window-proseduurille?
Jos tuon haluaa toimivan ilman ikkunoita, pitää tehdä jotenkin tähän malliin:
#include <windows.h> int WINAPI WinMain(HINSTANCE, HINSTANCE, char *, int) { SetTimer(0, 1337, 5000, 0); MSG msg; while (GetMessage(&msg, 0, 0, 0)) { TranslateMessage(&msg); if (msg.message == WM_TIMER) MessageBox(0, "Toimii!", "Ajastin", MB_OK); DispatchMessage(&msg); } return msg.wParam; }
(Tuo on C++:aa; merkistö on multi-byte, ei wide; GetMessage:n paluuarvo pitäisi tarkastaa kunnolla, se kun voi olla nolla, ei-nolla tai -1; funktiokutsujen paluuarvot pitäisi muutoinkin tarkastaa; eikä ohjelma lopeta vapaaehtoisesti.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.