Ha wxwidget-tel rajzoltam egy panelra, akkor a zoom-olásnál hogyan kell kezelni az eltolást, hogy a kurzor pozícióra zoom-oljon?
Főleg wxwidget megoldások érdekelnének, mert azzal csinálom. Szóval amikor lekezelem pl. a EVT_MOUSEWHEEL eseményt, és beállítom a wxDC SetUserScale-jét (vagy wxGraphicsContext::Scale), akkor hogyan kell hozzá az eltolást számítani, hogy a kurzor alatti pont egy helyben maradjon?
Sokat szenvedtem vele, de egyszerűen nem megy, és ilyen megoldást guglival sem találtam. Sok helyen a DeviceToLogical függvényt használják, de az csak a DC-nek van, viszont az eseménykezelő függvényben nincs DC, csak a Paint függvényben. Szóval ezt sem értem igazán. :(
Közben rájöttem, szóval ha valakinek hasonló gondja van, az új eltolási érték:
offsetX = devpt.x - logpt.x * scale;
offsetY = devpt.y - logpt.y * scale;
offset: eltolás, pl. wxGraphicsContext::Translate(offsetX, offsetY);
devpt: a kurzor device pozíció, pl. amit a wxMouseEvent::GetPosition() visszaad.
logpt: az eltolás és skálázás nélküli pozíció. "log.x = (dev.x - offsetX) / scale"
scale: skálázás/nagyítás. Pl. "wxGraphicsContext::Scale(scale, scale)"
Kár, hogy ezért nem jár zöld mancs. :(
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!