KA wie ich das beschreiben soll :(
-
Hallo,
Du hast doch eine Funktion geschrieben die das ganze "malt". Dort hast Du ja schon die Zuweisung [Array mit Daten]->[Pixel]
jetzt must Du das ganze nur Rückwerts rechnen. Oder erstell Dir ein 2. Array wo Du zu jeder Pixel-Spalte den Wert reinschreibst. Ist nicht sehr Elegant.
Nun mußt Du ja noch die Linie verschieben. schau mal mal WM_LButtonDown, Up und MouseMove.
Viel Erfolg
Stefan
-
Mir ist schon klar das ich das ganze dann Rückwärtsrechnen muss, ich weiß nur nicht wie ich diese ver****** Linie zum bewegen bekommme.
Ich weiß das ich dafür WM_MOUSEMOVE brauche aber nicht wie ich das einsetze, den das ganze soll ja bei der Bewegung der Maus ablaufen und dann den Wert wieder geben.
Die Linie habe ich auch schon (wenn nur als test ob das ein und ausschalten funktioniert) hier mal der code
if (pDoc->m_bCursor == FALSE) { CPen linePen (PS_SOLID, 1, RGB(255,0,0)); pDC->SelectObject (&linePen); pDC->MoveTo(11*25,20); pDC->LineTo(11*25,530); }Warum soll ich mir aber WM_LButtonDown und WM_LButtonUp anschauen? Ich brauche noch die Pfeiltasten auf der Tastatur und nicht die Linke und Rechte Maustaste
aber ich denke mal wenn ich es für die Maus hinbekomme dann ist es füe die Pfeiltasten ja nicht anders.Wie gesagt ich mache das noch nicht so lange
EDIT:
Wie ich eben erfahren habe soll das ganze sich erst dann bewegen wenn irgendeine Maustaste gedrückt ist. (ich werd noch wahnsinnig
)MFG
Shona
-
Kann mir den keiner helfen ich weiß nämlich absolute nicht was ich nun machen soll

Habe mir WM_MOUSEMOVE angeschaut aber da steht nicht wirklich viel dazu in der Hilfe drin und das was da drin steht wusste ich auch schon vorher.
Habe es zumindest geschafft das ich die X-Koordinate der Maus speichere (ist die eizigste die ich brauche) und kann damit die Linie auch bewegen aber nicht so wie es sein soll.
Die Linie wird in OnDraw gezeichnet, der Code dafür ist dieser
if (pDoc->m_bCursor == FALSE) { CPen linePen (PS_SOLID, 1, RGB(0,0,0)); pDC->SelectObject (&linePen); pDC->MoveTo(m_iPrevX,20); pDC->LineTo(m_iPrevX,530); }Aber die Linie ändert nur ihre position wenn ich das fenster zu mache und wieder öffne.
MFG
Shona
-
Aktualisierst Du das Fenster nach Änderung der X-Koordinate auch mit InvalidateRect, damit es in OnDraw neugezeichnet werden kann?
-
sri schrieb:
Aktualisierst Du das Fenster nach Änderung der X-Koordinate auch mit InvalidateRect, damit es in OnDraw neugezeichnet werden kann?
Jetzt ja, brauchte nur wieder mal eine Denkhilfe ;), Danke!
Jetzt habe ich nur noch das Problem mit den Pfeiltasten "Links" und "Rechts", wie kann ich das mit denen machen? Habe leider keine funktion gefunden wie ich das machen kann bzw. wie ich die Standarteinstellungen für die Tasten überschreiben kann.
-
WM_KEYDOWN abfangen und pruefen ob es pfeil rechts oder links war {o;
-
Mr Evil schrieb:
WM_KEYDOWN abfangen und pruefen ob es pfeil rechts oder links war {o;
aha und wie soll das funktionieren, weil ich hab das noch nie gemacht
-
schau einfach wie es bei den anderen messages wie WM_PAINT geloest ist - das verhaelt sich aehnlich - schau dazu einfach in die MSDN {=
-
danke aber das half mir auch nicht weiter
-
Shona schrieb:
danke aber das half mir auch nicht weiter
Du nutzt ja die MFC, also:
- In deine Dialog-Klasse gehen (Header).
- Dort auf eine leere Zeile innerhalb der Deklaration klicken.
- Im Eigenschaftenfenster "Meldungen" auswählen.
- Bis WM_KEYDOWN runterscrollen
- Im rechten Feld (ComboBox) "Hinzufügen OnKeyDown" anklicken
- Tada! Du hast einen Event-Handler namens OnKeyDown, der aufgerufen wird, wenn WM_KEYDOWN gesendet wird.Du kannst das natürlich auch manuell machen (Stichwort ON_WM_KEYDOWN() Makro).
-
Das hab ich doch schon längst drin aber ich weiß nicht wie ich die Pfeiltasten abfangen soll bzw. ob es rechts oder links war.
-
Na ja, du sagtest, du hättest das noch nie gemacht...

Dann sieh dir die Doku an (erster Parameter):
http://msdn.microsoft.com/de-de/library/983st27a(VS.80).aspx
(Tipp: VK_LEFT, VK_RIGHT)
-
Ich denke mal du meinst damit "nChar", soweit war ich auch schon aber ich hab keine Ahnung wie ich das schreiben soll.
Habe einfach mal aus dem Bauch heraus wie folgt angefangen aber ich weiß nicht ob das richtig ist und wie es weiter geht bzw. was da noch hin muss
if ((nChar == VK_LEFT || VK_RIGHT) && )
-
Sieht doch schon gut aus, glaube ich. Du musst dann auch nix mehr verunden, wenn du nur die Tasten Links und Rechts abfragen willst. Dass ein Key gedrückt wurde, ist ja schon klar. Und ich vermute, dich interessiert auch nicht, ob STRG, SHIFT oder sonstwas gedrückt ist. Also klatsch deinen Code darunter und sieh, was passiert!
-
_matze schrieb:
Sieht doch schon gut aus, glaube ich. Du musst dann auch nix mehr verunden, wenn du nur die Tasten Links und Rechts abfragen willst. Dass ein Key gedrückt wurde, ist ja schon klar. Und ich vermute, dich interessiert auch nicht, ob STRG, SHIFT oder sonstwas gedrückt ist. Also klatsch deinen Code darunter und sieh, was passiert!
Es funktioniert einwenig zumindest bewegt sich die linie, das problem ist aber das sie sich bei jeder anderen taste auch bewegt.
-

Dann zeig mal deine komplette OnKeyDown.
-
Das ist aber nur provesorisch um zu schauen ob das mit den Pfeiltasten funktioniert.
void CDSOZView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { CPoint mouseXY; if ((nChar == VK_LEFT || VK_RIGHT)) { GetCursorPos(&mouseXY); // Aktuellen Punkt als letzten Punkt speichern m_iPrevX = mouseXY.x; Invalidate(); } CView::OnKeyDown(nChar, nRepCnt, nFlags); }
-
Shona schrieb:
Es funktioniert einwenig zumindest bewegt sich die linie, das problem ist aber das sie sich bei jeder anderen taste auch bewegt.
Das liegt an Deiner Bedingung, die prüft, ob die Ausdrücke
nChar == VK_LEFToder
VK_RIGHTwahr sind. Der erste ist es nur bei der Cursor-links Taste, der zweite aber immer (weil ungleich 0).
Richtig:
if (VK_LEFT == nChar || VK_RIGHT == nChar)
-
Danke jetzt funktioniert es bestens
