[ Predrag Damnjanovic @ 11.01.2004. 17:25 ] @
Imam iritirajuci problem sa WinAPI funkcijom SetCursor().

Na pocetku ucitam kurzor:
hCursor1 = LoadCursor (hInst, MAKEINTRESOURCE(CURSOR_ID1));

i, dok se mis pomera, pozivam:
SetCursor (hCursor1);


Medjutim, problem je sto Windows pri svakom pomeranju misa, vrati standardni kurzor (stelica), pa onda moj sors ponovo vrati moj kurzor, i tako kurzor treperi :(
Zapravo, kao da Windows ima neki clock, pa ako ne set-ujes kurzor dovoljno brzo - on vrati standardni kurzor.
Na brzim kompjuterima jedva da se vidi da treperi - jer program stigne da set-uje kurzor pre nego sto Windows to uradi, ali na starim kompjuterima bas treperi :(

Da li je normalno to sto Windows vraca standardni kurzor?
U pitanju je FLTK aplikacija, i moguce je da FLTK vraca standardni kurzor, ali ovo nisam siguran, ne verujem da je FLTK krivac, mada, sve je moguce...

U Win32-SDK sam nasao ovo:
If your application must set the cursor while it is in a window, make sure the class cursor for the specified window's class is set to NULL. If the class cursor is not NULL, the system restores the class cursor each time the mouse is moved.

Sta je cursor class?
HCURSOR hCursor1 ?

Sta je window's class?
hInstance?

ako stavim NULL umesto hInst:
hCursor1 = LoadCursor (NULL, MAKEINTRESOURCE(CURSOR_ID1));
kurzor se uopste ne ucita, nema ga...


Mozda ja na pogresan nacin set-ujem kurzor.
Sta radi funkcija ShowCursor? Tamo se pominju neki counteri...
Probao sam i sa tom funkcijom (mada je moguce da sam je probao na pogresan nacin) - nista se nije promenilo.

Gledao sam FLTK sors, i FLTK koristi samo LoadCursor i SetCursor, na isti nacin na koji ga ja koristim.
Cak sta vise - i kada koristim FLTK-ovu funkciju - kurzor isto hoce da zatreperi.

Problem me izludjuje danima, kopam po dokumentaciji, sorsevima, isprobavam svasta... bezuspesno.
Stvarno me stisla muka, nemam vise vreme za ovo, poslodavac ce me bije jos malo :)
[ darkosos @ 11.01.2004. 18:08 ] @
Citat:
If your application must set the cursor while it is in a window, make sure the class cursor for the specified window's class is set to NULL. If the class cursor is not NULL, the system restores the class cursor each time the mouse is moved.


Pri registrovanju klase prozora treba navesti handle za kursor koji ce aplikacija da koristi. Treba na tom mestu postaviti NULL, tako da posle mozes slobodno da menjas kursor, bez pokusaja win da vrati stari.
Mozda je jos bolje da odmah tu stavis handle na svoj kursor koji ces koristiti.
[ Predrag Damnjanovic @ 11.01.2004. 19:52 ] @
Code:

((WNDCLASS *)(window->xclass()))->hCursor = hCursor1;

ili NULL, kako vam vise odgovara.

vidi se da je setovao moj kurzor za default (dakle - radi)

e, sada je program poceo da puca, bilo sta da uradim.
isto i kad stavim hCursor = NULL.

imao li je neko slican problem?
[ Predrag Damnjanovic @ 12.01.2004. 02:28 ] @
izmenio sam FLTK sors, stavio sam tamo hCursor=0, i rekompajlirao...
nisam nasao drugo resenje...
[ darkosos @ 12.01.2004. 08:46 ] @
Koja je standardna procedura za registrovanje prozora u FLTK?
Ako koristis nesto u fazonu :
Code:

WNDCLASS wc; // :)
..
wc.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_...));
...
RegisterClass(&wc);

onda prosto na tom mestu stavis handle za kursor koji ces koristiti, ili NULL ako ces kasnije sam setovati kursor.
[ Predrag Damnjanovic @ 13.01.2004. 11:02 ] @
to sam i uradio, ali u sors-u FLTK-a, pa posle rekompajlirao FLTK - i radi to lepo.

ali, ako probam da iz mog programa izvucem pointer na wc, i da stavim hCursor - program puca kada kliknem negde (a vidi se da je set-ovan moj kurzor).
Vrag ce ga znati zasto puca...

nebitno... vazno da radi kad izmenim FLTK sors...