» »

Klikanje slikic (win32 C)

Klikanje slikic (win32 C)

hatch ::

Obstaja se kak dober nacin za delanje slikic v dolocenem windowu, s tem da bi lahko kontroliral klike na posamezne slikice. (cardgame za primer)
delam v lcc-win32 (podpira ves stuff od Visual C++ 6.0, je pa precej hitrejsi in free)

nacin 1) delanje bitmapov direktno na DC.. problem pri sprejemanju klikov.. je treba oznacit koordinate vsakega bitmapa posebej.. precej zamudno (predvsem zaradi overlappinga)

nacin 2) naredim STATIC control v brezokvirnem CHILD-u.. klike se precej enostavno detecta.. problem nastane pri refreshanju ter tak nacin pobere precej vec pomnilnika

nacin 3) podobno kot nacin 2, samo da se uporabi BUTTON namesto STATIC.. kliki so se bolj enostavni za detectanje.. dodaten problem nastane pri nastavitvi gumba. (se treba precej jebat da normalno zgleda)

Obstaja se kak drug dober nacin za to?

Senitel ::

Kaj pa enostavno GDI??

hatch ::

Ce ni to isto kot DC, potem tega ne znam...

povej kako...

Senitel ::

Procesiraš WM_PAINT od glavnega okna,
HDC hDC=GetWindowDC(hwnd);
Pa rišeš...

hatch ::

Ja ja.. to znam..
samo je fora, ker je treba markirat vsako slikico posebej za detectanje klikov

Senitel ::

Aja, ups...
Kaj pa če probaš navaden WM_POPUP window??

hatch ::

Ja tako imam narejeno, samo je drek pri osvezevanju, ker traja kar nekaj casa... in je efekt grd.

wintermute ::

Po mojem bi slo takole (za prvi nacin):

Vse kar rabis v zvezi z objektom ("slikco") (recimo HBITMAP pa pozicijo in velikost, ce gre za pravokotne oblike) das v strukturo.

Ko postavljas objekte na povrsino, jih (oziroma pointerje na njih) v istem vrstnem redu dodajas v urejen seznam ala std::list iz standardne C++ knjiznice (ekvivalent v C-ju poisci na netu, ali pa implementiraj sam, recimo kot doubly linked list).

Ko handlas npr. WM_LBUTTONDOWN gres, opravljajoc hit-teste, v pravilni smeri (s tem upostevas prekrivanje) skozi listo dokler ne najdes objekta na katerega si kliknil. Ce gre za pravokotnike, je svar zelo preprosta, ce gre za kroge/elipse/poligone/vec poligonov si lahko pomagas z regioni (HRGN), ce gre za sprite nepravilne oblike pa z maskami.

Ko najdes pravi objekt, lahko z njim pocnes razne stvari, na primer move forward/backward (tako da prestavis objekt za mesto naprej/nazaj v listi), bring to front/move to back (tako da postavis objekt na zacetek/konec liste) itd.

BTW, taksnele stvari se da zelo enostavno in pregledno implementirati v C++.

HTH.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

"Dinamicna" sprememba razreda v C++

Oddelek: Programiranje
131790 (1182) Spura
»

kako narediti program ki bere drugi program

Oddelek: Programiranje
465373 (3686) imagodei
»

C++ programirane v Open GL oz. Direct x

Oddelek: Programiranje
242871 (2142) Vesoljc
»

Kje začeti z programiranjem? (strani: 1 2 )

Oddelek: Programiranje
947566 (5170) BigWhale
»

Visual Basic, C#, C++, razlike... (strani: 1 2 3 )

Oddelek: Programiranje
12212091 (9762) 64202

Več podobnih tem