Button FLÜSSIG von links nach rechts wandern lassen !
-
Spy-Eye schrieb:
Leider klappt das auch nicht, der Button bewegt sich nur einmal und das wars !
poste doch mal bitte den kompletten code, der den button bewegen lassen soll.
Esco
-
Hab ich doch schon oben :
if(nIDEvent == timer) { CRect rect; GetDlgItem(IDC_BUTTON1)->GetClientRect(rect); GetDlgItem(IDC_BUTTON1)->SetWindowPos(NULL, rect.left + 3, 20, 100,50, NULL); }
-
Spy-Eye schrieb:
Hab ich doch schon oben :
if(nIDEvent == timer) { CRect rect; GetDlgItem(IDC_BUTTON1)->GetClientRect(rect); GetDlgItem(IDC_BUTTON1)->SetWindowPos(NULL, rect.left + 3, 20, 100,50, NULL); }
naja, das mit dem timer steht oben noch nich dabie, das hat mich interessiert, vielleciht wird die methode ja nur einmal angesprochen.
ich hab grad zwar echt keine zeit, konnts aber nicht lassen:
also wenn du setwindowpos in einer schleife mit i von 1 bis 100 durchlaufen lässt, dann gehts. es liegt also an rect.left. irgendwie gibt getclientrect immer das gleiche uas, muss jezz aber weg.
behelfsmässig kannste das ja mal auslesen, vor der schleife, und das ganze dann mit ner schleife verschiebenEsco
-
Hallo Spy-Eye!
Also ich würde jetzt an Deiner Stelle zwei Fragen klären:
- Wird SetWindowPos bzw. GetClientRect mehr als einmal aufgerufen?
- Wird rect.left von IDC_BUTTON1 wirklich durch SetWindowPos bei jedem
Aufruf um 3 erhöht?
Geb mal Rückmeldung wenn Du beide Fragen geklärt hast.
Mit besten Grüßen, Lothar.
-
Aloha,
vergeßt SetWindowPos
Nehmt
Sleep(1); GetDlgItem(IDC_BUTTON1)->MoveWindow(r); UpdateWindow();
inner Schleife oder nen Timer, oder sontwo.
r ist natürlich ein CRect.Grüße
BOA
-
Meinst du es so ? Wenn ja, bei mir klappt nicht, Der Button bewegt sich wieder nur einmal !
if(nIDEvent == timer) { for(int i = 0; i < 100; i++) { CRect rect; GetDlgItem(IDC_BUTTON1)->GetClientRect(rect); GetDlgItem(IDC_BUTTON1)->SetWindowPos(NULL, rect.left + 3, 20, 100,50, NULL); } }
@lsowada
Zu 1) Denke schon, da der Timer ja nicht beendet wird !
Zu 2) Denke nicht, da der Button ja nur einmal wandert !Auch wenn ich MoveWindow verwende klappts nicht ! Der Button bewegt sich nur ein mal !
@All
Woran kann das liegen ?Danke
Spy-Eye
-
Sorry lsowada, habe ausversehen dein Nickname Gecopyied & gepasted ! Natürlich habe ich (Spy-Eye) das oben gepostet
Sorry
-
BOA schrieb:
Aloha,
vergeßt SetWindowPos
Nehmt
Sleep(1); GetDlgItem(IDC_BUTTON1)->MoveWindow(r); UpdateWindow();
inner Schleife oder nen Timer, oder sontwo.
r ist natürlich ein CRect.ja gähn, daran liegts ja, wie oben beschriebn nicht.
@wada:
ich meine, dass du das rect nur einmal einlesen sollst, und dann den button immer mit
GetDlgItem(IDC_BUTTON1)->SetWindowPos(NULL, i+rect.left, 20, 100,50, NULL);
rect.left musst du dann einmal, vor der schleife auslesen.
Esco
-
Stimmt Esco, mit einer Schleife geht es ! Doch jetzt ist das Problem, das man während der For-Schleife den Button ja nicht anklicken kann. Und wenn ich den Code in einem Thread packe, dann kann ich von dort aus nicht auf dem Button zugreifen. Es entsteht dann ein (Compiler-)Fehler !
Hast du einen anderen Lösungsvorschlag ?
Danke
Spy-Eye
-
Spy-Eye schrieb:
Stimmt Esco, mit einer Schleife geht es ! Doch jetzt ist das Problem, das man während der For-Schleife den Button ja nicht anklicken kann. Und wenn ich den Code in einem Thread packe, dann kann ich von dort aus nicht auf dem Button zugreifen. Es entsteht dann ein (Compiler-)Fehler !
Hast du einen anderen Lösungsvorschlag ?
Danke
Spy-Eyehallo, was für ein fehler entsteht denn da genau?!
es gibt ja zwei arten von threats: die einen können währenddessen noch benutzeringaben empfangen, die anderen nicht.
Esco
-
Ich meine einen ganz normalen Arbeits-Thread !
//ArbeitsThread : UINT Thread(LPVOID pParam) { ... }
Es entstehen z.B. solche Fehler :
'GetDlgItem' : function does not take 1 parameters
left of '->GetClientRect' must point to class/struct/union
'GetDlgItem' : function does not take 1 parameters
'->SetWindowPos' must point to class/struct/union
Weisst du was ich da machen kann ?
Danke
-
worker threats können keine benutzereingaben empfangen.
das buch, wo ich das damals raus hab hab ich aber nich mehr. musst dich mal erkundigen; es gibt zwei verschiedene threat arten, der nicht_worker_threat kann dann benujtzereingaben empfangen.Esco
-
http://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=CWinThread+purpose&s=1&swc=4
das kannst dir ma anschauen. ich hab immer mit der msdn aufm rechner gearbeitet, und da stehts unter CWinThreat -> purpose of
warum weshalb und wieso du da den andern threat aufmachen musst und wie du das machst. du musst eben ne klasse von CWinthreat ableiten, die dann deinen threat startet.esco
-
Dabke ! Werde ich mir mal anschauen !