[ darkosos @ 29.09.2004. 07:20 ] @
Ako sam napravio thread koji ima svoj message loop, da li poruke koje stižu za prozore koji su napravljeni u okviru tog thread-a, prolaze kroz taj loop?

Još jedno pitanje: pri registraciji prozora (RegisterClass) prijavljuje se i handler za taj prozor (WndProc). Ako želim da prozor bude zapakovan u klasu, onda i handler treba da bude u njoj. Ali samo za static funkciju mogu da dobijem adresu, što mi ne znači previše...

Moja ideja je da u thread loop-u kupim poruke za prozore (uspeo sam da napravim non static funkciju članicu moje thred klase u koju sam smestio loop). Da li je to OK?
[ chupcko @ 29.09.2004. 07:50 ] @
Ops, ovo su neke nove grane matematike za koju ja ne znam :(

Mada mislim da ima malo vise veze sa programiranjem, neko objeknto orjentisano, pa jos za Win, pa se spominju klase :).

Ali lepo kada si zapoceo temu, da li postoje klase u matematici, kao i da li postoji nasledjivanje ?
[ darkosos @ 29.09.2004. 19:31 ] @
Hm, zamor materijala :)

Aj nek' neki moderator (alooo, moderatoreeee) prebači ovo u C++

Izvinjavam se nedužnim posetiocima mat. foruma na ovim prostaklucima :)
[ yooyo @ 30.09.2004. 10:35 ] @
Ako u pozivima GetMessage i PeekMessage umesto hwnd-a prosledis NULL funkcije ce sakupljati poruke od svih prozora koji su kreirani u tom threadu.

Sto se static WinProc metode tice, MS je i na to mislio... Za svaki prozor mozes da zakacis proizvoljan podatak a u tvom slicaju this pointer. Kasnije u WinProc-u procitas taj podataj, castujes ga u pointer na tvoju klasu i radi sta ti je zelja.

Code:

posle kreiranja prozora:

SetWindowLongPtr(hWnd, GWLP_USERDATA, this); // umesto this-a moze i pointer na primerak klase

a u WinProc:
CMyClass* c = (CMyClass*) GetWindowLongPtr(hWnd,  GWLP_USERDATA);



btw... SVE PISE U MSDN-u. Samo treba citati...

yooyo
[ darkosos @ 13.10.2004. 07:54 ] @
Hvala na odgovoru, tako sam i rešio.
Mada sam usput saznao dosta o porukama. Npr. da mnogo poruka zaobilazi thread loop, naročito pri inicijalizaciji prozora, ali i kasnije, iz nepoznatog meni razloga. To znači da treba biti posebno obazriv šta ti stiže u WndProc.
Ako uradiš ::GetWindowLongPtr i "slepo" kastuješ možeš dobiti bogtepitašta. A opet, ne možeš u static-u da pitaš ništa specifično za prozor. Ipak sam i to rešio, ali ima previše stvari koje nisu type safe.