JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=bccd9ac4d301f8b15e088322ce56f125Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

[WinApi]editbox->schreiben->Mauszeiger verschwindet ;(
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 08.05.2008, 20:30    Titel: [WinApi]editbox->schreiben->Mauszeiger verschwindet ;( Antworten mit Zitat

hi,

ich habe ein problem mit meinem WinApi Projekt.
Wenn ich da irgendwas in eine EditBox schreibe:
CPP:
hWndEdit  = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT" , "", ES_AUTOHSCROLL  | WS_VISIBLE | WS_TABSTOP | WS_CHILD , 200,480, 200, 20, hWndParent, (HMENU)ID_EDITBOX1, hInst, NULL);

und der Mauszeiger innerhalb meines parentwindow ist, dann verschwindet der Mauszeiger Crying or Very sad .
Wenn ich den zeiger aba bewege taucht er wieder auf.

Weiß einer woran das liegt?
kann mir da einer weiterhelfen?
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 09.05.2008, 05:23    Titel: Antworten mit Zitat

Du hast vermutlich irgendwo einen ShowCursor-Aufruf für ein Fenster.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 09.05.2008, 13:59    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:
Du hast vermutlich irgendwo einen ShowCursor-Aufruf für ein Fenster.


Hmm ne^^ ich habe da nirgens sone ShowCursor Funktion^^
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.05.2008, 14:56    Titel: Antworten mit Zitat

Ich würde das für ein normales Windowsverhalten deuten, wenn ich bei mir in irgendeiner Editbox etwas schreibe verschwindet mein Mauscursor auch nach einem getippten Zeichen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 09.05.2008, 15:00    Titel: Antworten mit Zitat

komisch, aber bei anderen Programmen, wie qip oder so, ist das nicht so ^^


edit://
oh mist -.-
jetzt habe ich auch noch das problem, dass Tastatureingaben einfach nicht wahrgenommen werde Sad
CPP:
         case WM_KEYDOWN:
           switch(wParam)
           {
             case VK_F1:
                    MessageBox(NULL, "Test", "Test", MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
                 break;

             case VK_ESCAPE:
                     MessageBox(NULL, "Test", "Test", MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
                  break;
           }
         break;


verdammt ! Wo könnte ich den Fehler haben?
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
User_User
JLI'ler



Anmeldedatum: 05.08.2004
Beiträge: 137

Medaillen: Keine

BeitragVerfasst am: 09.05.2008, 19:45    Titel: Antworten mit Zitat

RebornX: Hast du schon einmal versucht, die exe-Datei im Ordner Debug direkt per Doppelklick zu starten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 09.05.2008, 20:14    Titel: Antworten mit Zitat

User_User hat Folgendes geschrieben:
RebornX: Hast du schon einmal versucht, die exe-Datei im Ordner Debug direkt per Doppelklick zu starten?


hm ja^^ bringt aber auch nix ^^
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
User_User
JLI'ler



Anmeldedatum: 05.08.2004
Beiträge: 137

Medaillen: Keine

BeitragVerfasst am: 09.05.2008, 21:45    Titel: Antworten mit Zitat

Ich glaube, dass du das Buch "Windows Porgrammierung" (von Petzold) hast.

Ich würde in Kapitel 6 Die Tastatur das Unterkapitel Im Brennpunkt: Die Eingabe
lesen. Ich vermute mal, dass die Nachrichtenschleife nicht abgefragt wird, da das zugehörige Objekt nicht den Focus hat (Irgend ein anderes Element der Benutzeroberfläche ist aktiv). Das kannst du überprüfen durch abfragen der Ereignisse WM_SETFOCUS und WM_KILLFOCUS feststellen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 10.05.2008, 09:17    Titel: Antworten mit Zitat

User_User hat Folgendes geschrieben:
Ich glaube, dass du das Buch "Windows Porgrammierung" (von Petzold) hast.

Ich würde in Kapitel 6 Die Tastatur das Unterkapitel Im Brennpunkt: Die Eingabe
lesen. Ich vermute mal, dass die Nachrichtenschleife nicht abgefragt wird, da das zugehörige Objekt nicht den Focus hat (Irgend ein anderes Element der Benutzeroberfläche ist aktiv). Das kannst du überprüfen durch abfragen der Ereignisse WM_SETFOCUS und WM_KILLFOCUS feststellen.


Hmm das ist irgendwie komisch^^
Also mit WM_KILLFOCUS funktioniert alles so wie es funktionieren soll (denk ich): Also sobald ich auf ein anderes Chield window klicke, kriegt auch dieses chield window den Focus.

WM_SETFOCUS wird ja gesendet sobald ein fenster den Focus verliert richtig?
Nun ja das funktioniert allerdings irgendwie nicht so wie es funktionieren soll^^
ich habe in meinem Programm eine Listview 9 editboxen und 3 buttons.
Außerdem habe ich noch ein Fenster, eine Statusbox/Eventbox (siehe hier) die ich zum "debuggen" benutze.
Aber irgendwie verliert nur die Listview den Focus, wenn ich den Focus auf der Statusbox habe und dann irgendwo in das Fenster klicke (auch auf die listview!).
Ansonsten kriege ich immer die ID 0 oder gar nix, wenn ich aus firefox ins Programm klicke, oder wenn ich von einem child window zum anderen klicke^^ ....

Die ListView erstelle ich so:
CPP:
HWND CreateListView(HWND hWndParent, HINSTANCE hInst)
{
  INITCOMMONCONTROLSEX icc;
  icc.dwSize = sizeof(icc);
  icc.dwICC = ICC_LISTVIEW_CLASSES;
  InitCommonControlsEx(&icc);

  HWND hwndList;
  hwndList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "",
                    WS_VISIBLE | WS_BORDER | WS_CHILD | WS_VSCROLL | LVS_REPORT,
                    0, 0,
                    894, 450,
                    hWndParent,
                    (HMENU)ID_TABELLE,
                    hInst,
                    0);
  ListView_SetExtendedListViewStyleEx(hwndList, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  return hwndList;
}

_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
User_User
JLI'ler



Anmeldedatum: 05.08.2004
Beiträge: 137

Medaillen: Keine

BeitragVerfasst am: 10.05.2008, 09:57    Titel: Antworten mit Zitat

RebornX: Ich habe noch nie ein Programm mit Child-Fenstern erstellt. Ich weiß nur, dass Oberflächenobjekte den Focus brauchen (gilt auch für Aktive Fenster - Inaktive Fenster), um auf Eingaben reagieren zu können.

Wenn du hier im Forum nicht weiter kommst, würde ich es einmal hier versuchen:

http://www.c-plusplus.de/index.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
User_User
JLI'ler



Anmeldedatum: 05.08.2004
Beiträge: 137

Medaillen: Keine

BeitragVerfasst am: 10.05.2008, 12:15    Titel: Antworten mit Zitat

Mir ist noch etwas eingefallen, was vielleicht funktionieren könnte:

Wenn es dir gelänge, den Ereignishandler der Status-Box abzufragen und eine WM_LBUTTONDOWN-Nachricht abgefragt wird, könntest du mit PostMessage() oder SendMessage() (jli - Kapitel 12.8 Nachrichten) Oberflächenelemente aktivieren oder deaktivieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 10.05.2008, 12:16    Titel: Antworten mit Zitat

edit// User_User: Und was kann ich damit herrausfinden?

hmm naja ich habe das Projekt (Adressbuch) jetzt fertiggestellt.
Allerdings sind da halt immernoch diese Focus-Probleme und key's funktionieren halt auch nicht.

Da dies ein Übungsprojekt ist poste ich hier mal den Source und die exe. Vielleicht findet ja einer den Fehler oder kann mir tipps geben, wie ich was hätte anders machen können^^.



ja ich weiß, es wäre besser gewesen, wenn ich std::strings verwendet hätte.
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
User_User
JLI'ler



Anmeldedatum: 05.08.2004
Beiträge: 137

Medaillen: Keine

BeitragVerfasst am: 11.05.2008, 11:31    Titel: Antworten mit Zitat

Du hast geschrieben:

Zitat:
edit// User_User: Und was kann ich damit herrausfinden?


Nehmen wir an, dass dein Ereignis-Handler StatusFeld ein Click-Ereignis erhält. Bei einem Click-Ereignis kannst du über die übergebenen Parameter (wparam oder lparam) die Mausposition ermitteln.

Wenn du diese Mausposition mit der Position der Oberflächenelemente vergleichst, kanst du feststellen, ob das Click-Ereignis für ein anderes Oberflächen-Element bestimmt war.

Nun kannst du einen Befehl senden, der das Listenfeld wieder aktiviert (leider sind die Befehle meiner Entwicklungsumgebung etwas anders, sodass ich keine Codebeispiele geben kann).

Übrigends, wenn das Statusfeld aktiviert wird, kannst du durch senden eines Click-Events (durch SendMessage()) den Mauszeiger gleich verschwinden lassen. Dabei müssen die Parameter den Parametern entsprechen, die der Ereignishandler erwartet:

Beispiel:
SendMessage(hwnd, msg, wparam, lparam);
Listenfeld.Activate();
(Wie gesagt, sind bei mir die Befehle etwas anders)

Es sollte normal sein, dass dein Listenfeld bei der Auswahl eines Statusfeld die Mauseingabe verliert, da die Mauseingabe für das Statusfeld bestimmt ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
User_User
JLI'ler



Anmeldedatum: 05.08.2004
Beiträge: 137

Medaillen: Keine

BeitragVerfasst am: 12.05.2008, 20:42    Titel: Antworten mit Zitat

Zufällig und aus anderen Gründen fand ich folgendes:

Wenn man die Systemsteuerung öffnet, und dann auf das Maussymbol doppelklickt, finde ich bei mir auf der Registerkarte Zeigeroptionen in der Gruppe Sichtbarkeit die Option Zeiger bei Tastatureingaben ausblenden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 12.05.2008, 21:04    Titel: Antworten mit Zitat

ups ... habe gar nicht gemerkt das du geantwortet hast Laughing

Ich teste das morgen ma ^^
Dann editiere ich das hier rein^...
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum