UpdateWindow(FALSE) - funktioniert nicht.
-
estartu schrieb:
Warum machst du das mit einem Zeiger?

Nochmal Anfänger Vermutung... Da es nicht funktioniert hat, dachte ich wäre es weil der aktuelle Wert von m_comp nicht in OnLButtonDown zur Verfügung stand. Das war ein Versuch m_comp Wert für alle Funktionen zu ändern... Falsch??
Im Konstruktor habe ich das geschrieben:
m_comp = false; pComp = &m_comp;Naja... Aber egal was ich tue, mit oder ohne pointer, funktioniert nicht...
-
connan schrieb:
Da hast Du eine gute Intuition
Du setzt natürlich die ganze Nachrichtenbehandlung mit dem Sleep/for außer Kraft. Du könntest also mit einem Thread arbeiten oder mit einem Timer, aber die For-Schleife mit dem Sleep ist tödlich.Oh, das hatte ich übersehen. Das ist wohl die wahrscheinlichere Ursache.
Ich würde es nun mit einem Timer versuchen.
-
connan schrieb:
Da hast Du eine gute Intuition
Du setzt natürlich die ganze Nachrichtenbehandlung mit dem Sleep/for außer Kraft. Du könntest also mit einem Thread arbeiten oder mit einem Timer, aber die For-Schleife mit dem Sleep ist tödlich.Hallo connan und estartu,
Die folgende Intuition nach dieser Intuition
war die Sleep() Funktion...Ich habe dann versucht mit SetTimer() zu arbeiten. Die Blinke Funktion habe ich hingekriegt, aber die CompSpiele(), mit der For-Schleife scheint mir unmöglich zu realisieren...
-
Unmöglich ist nichts. Du kannst mit Threads arbeiten oder du bearbeitest die Messageloop selbst. Siehe FAQ.
-
ShareBird schrieb:
Ich habe dann versucht mit SetTimer() zu arbeiten. Die Blinke Funktion habe ich hingekriegt, aber die CompSpiele(), mit der For-Schleife scheint mir unmöglich zu realisieren...
Das geht schon

1. Du kannst mehrere Timer setzen und per ID in OnTimer reagieren (also für blink UND compute).
2. Kannst Du, statt der For-Schleife, in einer Funktion einen Timer immer wieder neu setzen und z.B. über eine statische Variable den Zähler(=Abruchbedingung=>KillTimer) realisieren.
Wenn Du aber einfach nur Spaß am Programmieren und Lernen hast, schau Dir Threads an
-
Das einfachste ist es ein durchsichtiges Fenster über Deine eigentlichen Fenster zu legen. Dort werden die entsprechenden Mausklicks behandelt und werden dann in entsprechende MoveWndow/SetWindowPos auf die eigentlichen Objekte unter diesem Control ausgeführt.
-
Martin Richter schrieb:
Das einfachste ist es ein durchsichtiges Fenster über Deine eigentlichen Fenster zu legen. Dort werden die entsprechenden Mausklicks behandelt und werden dann in entsprechende MoveWndow/SetWindowPos auf die eigentlichen Objekte unter diesem Control ausgeführt.
Hmmm... Das war meine erste Idee, einer Art "Schutz" Ebene drauf zu legen, aber wie?? Wenn ich ein neues Fenster innerhalb dieses Fenster erzeuge, werden trotzdem Mausklicks wahrgenommen... (ich habe Testweise ein CEdit Objekt erzeugt, ich weiß nicht wie man ein neues Fenster CWindow innerhalb dieses Fenster erzeugt...).
Ich bin sehr dankbar für alle Tips die ich bis jetzt bekommen habe, aber ich schildere kurz meine Schwierigkeiten: Das erste mal dass ich einer Schleife, einer if Anweisung begegnet bin, war vor 30 Jahren!! Damals hat es nicht gefunkt, also, ich habe mich nicht weiter gekümmert.
Das zweite mal ist gerade 8 Monate her gewesen im Rahmen einer Reihe von "Blitz" Kurse: HTML, PHP, JavaScript, Flash, ActionScript, C++ und MFC, jeweils 15 Tage Theorie und 5 Tage Projekt. Bevor hatte ich keine Idee was ein "Array" zu bedeuten hätte... Ich habe Schwierigkeiten mit der Logik (ich habe Stunden gebraucht um die Spieler Funktion zu realisieren), Flow-Charts, etc., etc., etc...
Egal.. Irgendwie hat es diesmal gefunkt, ich lerne weiter.
Danke für die Geduld

-
Du musst das "obere" Fenster in der Z-Order so legen, dass es wirklich "über" den anderen Fenstern liegt.
Aber wenn Du so viele Schwieirgkeiten mit den Grundlagen hast. Würde ich mit etwas simpleren anfangen... Just my 2 cents.
-
Tja... Ich habe alles versucht...
Ich setze hier eine Sleep(ne Weile)...
Vielen Dank an alle für den Tips! Echt nett hier

Gruß
-
Hmm... Anscheinend habe ich das Problem gelöst. Ich werde sicherlich (besser, hoffentlich) sehr darüber lachen was für Lösungen ich in dieser Zeit gefunden habe.
Ich habe diesen Code in der Funktion CompSpiele() eingefügt:
MSG message;if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}void CMemoryTrainingView::CompSpiele() { //Verbindung zur Documenten-Klasse herstellen CMemoryTrainingDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(pDoc->GetSpielStatus()) { CString str; str.Format("%i",m_feldZ); m_Textfeld.SetWindowText(str); m_comp = true; InvalidateRect(m_background); UpdateWindow(); for( int i = 0; i<m_feldZ; ++i) { ID = m_feldReihe[i] * 2; Sleep(pDoc->m_iRadio); MSG message; if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&message); ::DispatchMessage(&message); } Blinke(ID); } m_runde = 0; m_comp = false; InvalidateRect(m_background); UpdateWindow(); } }Irgendwann werde ich verstehen warum es geklappt hat...

Gruß
bird