Double Klick Problem

CodeFatal

Erfahrenes Mitglied
nAbend zusammen,

ich weiss blöde Frage aber wie kann ich den DoubleKlick auf einen Button noch erzeugen als über den Wizard bzw manuellen Eintrag? Ich müh mich unter WinCe ab. Da gibt es das tolle Phänomen das man alles über den Wizard erstellen kann, aber anschließend kommt der Fehler: error C2065: 'ON_BN_DOUBLECLICKED' : undeclared identifier.
Der ist ja für sich klar nur wie kann ich den declarieren?
Freu mich für jeden Tip der mir weiter hilft....
Edit:
Was ich vergessen hab: ich will eigentlich nur den Normalen Klick haben. Aber wenn ich den Button zweimal drücke, kommt nur der erste durch und erzeugt einen Klick.

Gruss Michael
 
Zuletzt bearbeitet:
Ich habe gerade festgestellt, dass die Verzögerung auch dann auftritt, wenn nur ein Button zweimal hintereinander gedrückt wird nicht aber zwei unterschiedliche.
Der Versuch den Focus umszusetzen mit CButton::SetFocus() hat leider nichts bewirkt.

Hilfe!
 
moin


Da Buttons auch Fenster sind, sollte man doch eine entsprechende Nachricht daran senden können? Ist aber eher ne Vermutung.


mfg
umbrasaxum
 
Hi,
ich bin mir zwar nun nicht 100% sicher ob ich dich jetzt richtig verstanden habe aber einen Button deklariert und bestmmt man folgendermaßen in c++ (single-click):

Ich weiß jetzt nicht welchen Compiler du benutzt aber ich verwende VC++ 6.0. Beziehe mich also grundsätzlich auch auf diese Umgebung.

Nachdem du einen Button auf dem entsprechenden Fenster platziert hast, hast du dem ja eine entsprechende ID gegeben. In VC sind die Werte dazu in einer ".rc" Datei aufgelistet. Beispiel zu dem in diesem Post zu behandelnden Button in der Skript2.rc:

Code:
BEGIN
 DEFPUSHBUTTON "Ok", IDOK, 20,70,50,14
END

DEFPUSHBUTTON ist die Klasse des Elements, "Ok" die Beschriftung, IDOK die ID und der Rest die Positions- und Größenangaben.

Bei VC kann kann man sich das natürlich bequemer über die Eigenschaften des Buttons ansehen, aber ich weiß ja wie gesagt nicht was du benutzt.

Nachdem du die ID nun hast musst du den Button in einer sogenannten Nachrichtenbehandlungstabelle mit zugehöriger "Nachricht" bekanntgeben. Das ganze sieht dann etwa so aus:

Zuerst dekla
Code:
class CMyWindow : public CDialog {
......//deklaration des Fensters etc.
DECLARE_MESSAGE_MAP()
};

Anschließend muss die MESSAGE_MAP natürlich noch gefüllt werden:

Code:
BEGIN_MESSAGE_MAP(CMyWindow, CDialog)
  ON_BN_CLICKED(IDOK, OnBtnClick)  
END_MESSAGE_MAP()

ON_BN_CLICKED ist die entsprechende Aktion die Abgefangen werden soll. IDOK ist die bekannte ID und teilt dem System mit auf welches Element die Überwachung stattfinden soll. OnBtnClick ist schließlich die Methode die aufgerufen werden soll wenn das Ereignis eintritt. Jetzt müsste man nur noch die Methode definieren und der Button sollte beim Klick die entsprechenden Schritte ausführen.

Ich hoffe das hilft dir zumindest ein wenig weiter.

Gruß

PS: Ich hab den Identifier Fehler nur nachkonstruieren können indem ich eine falsche ID angegeben habe, solltest vielleicht mal die Übergabe des Bezeichners mit dem Bezeichner vergleichen der deklariert wurde.
 
Zuletzt bearbeitet:
moin


Ich glaube zwar das bis auf den letzten Absatz deine Antwort überflüssig war, aber Recht hast du jedenfalls.


mfg
umbrasaxum
 
Moin moin,
erstmal Danke für eure Antworten, leider konnten sie mir nicht weiterhelfen, da ich die Einträge wie Nospherates sie beschreiben hat gemacht hatte und auch nur so kenne.
Glaube auch, das er mein Problem unter VS6 nur mit Mühen nach konstruieren konnte.
Das Problem ist nur, das ich auf WinCE arbeite und das verspricht viel und hält dann doch wenig...bzw verschweigt die Hälfte.Muss man nicht verstehen ist aber so. Leider! Der Doppelklickt wird vom Wizard zwar erstellt und gemacht aber der Kompiler will den nicht.
Da ich mir ne Grafische Software Tastatur baue habe ich 44 grafische Buttons und kann damit recht einfach die Tastatur aufbauen. wenn ich z.b."e""r"direkt hinter einander drücke klappt es wunderbar aber bei "e""e" leider nicht...Wieso weshalb auch immer.
kann doch eigentlich nur damit zusammenhängen, das da ein DB-Klick erkannt wird ohne das der zum Zuge kommt.
Mir ist jetzt noch die Idee gekommen die Button ganz zu vergessen und einfach die Bildchen auf den Dlg zu malen und dann nur noch den LButtonDown vom Dlg abzufangen, Berechnen welche Taste das ist und dann die Entsprechende KlickFunktion aufrufen. Könnte dadurch sogar noch etwas Performance gewinnen, da ich dann das Button handling ja nicht mehr hab. Falls Ihr noch ne Idee habt. Ich bin Dankbarer Abnehmer.
Gruss Michael
 
moin


Vielleicht ist das Gerät wirklich nicht schnell genug, oder nicht korrekt eingestellt.
Die Tastatur zu Zeichnen wäre wohl auch nicht schlecht, denn viele Button sind sehr rechenaufwendig!


mfg
umbrasaxum
 
Einstellungen sind standard. Und die Verzögerung tritt wie gesagt nur bei Klick auf ein und den selbe Button auf. Wär ne einfache Sache Gewesen aber die Klick Regeions sollten wohl auch kein Problem sein. Gepaart mit ner schönen LUT sollte dann wohl auch noch etwas Platz für andere Spielereien sein.

Gruss Michael
 
moin


Platz für ne menge Spielereien!
Gedrückte Taste aufblinken lassen und Tastenklick sind nur 2 interessante Dinge.


mfg
umbrasaxum
 
hab da eher an nen flüssigeres Alphablending und Transparenz gedacht... alles natürlich nur mit Standard Befehlen... NULL-directX und sonne Spielchen:)
 
Zurück