Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 08.05.2008, 20:30 Titel: [WinApi]editbox->schreiben->Mauszeiger verschwindet ;( |
|
|
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 .
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 09.05.2008, 05:23 Titel: |
|
|
Du hast vermutlich irgendwo einen ShowCursor-Aufruf für ein Fenster. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 09.05.2008, 13:59 Titel: |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 09.05.2008, 14:56 Titel: |
|
|
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 |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 09.05.2008, 15:00 Titel: |
|
|
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
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 |
|
|
User_User JLI'ler
Anmeldedatum: 05.08.2004 Beiträge: 137
Medaillen: Keine
|
Verfasst am: 09.05.2008, 19:45 Titel: |
|
|
RebornX: Hast du schon einmal versucht, die exe-Datei im Ordner Debug direkt per Doppelklick zu starten? |
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 09.05.2008, 20:14 Titel: |
|
|
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 |
|
|
User_User JLI'ler
Anmeldedatum: 05.08.2004 Beiträge: 137
Medaillen: Keine
|
Verfasst am: 09.05.2008, 21:45 Titel: |
|
|
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 |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 10.05.2008, 09:17 Titel: |
|
|
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 |
|
|
User_User JLI'ler
Anmeldedatum: 05.08.2004 Beiträge: 137
Medaillen: Keine
|
Verfasst am: 10.05.2008, 09:57 Titel: |
|
|
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 |
|
|
User_User JLI'ler
Anmeldedatum: 05.08.2004 Beiträge: 137
Medaillen: Keine
|
Verfasst am: 10.05.2008, 12:15 Titel: |
|
|
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 |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
|
Nach oben |
|
|
User_User JLI'ler
Anmeldedatum: 05.08.2004 Beiträge: 137
Medaillen: Keine
|
Verfasst am: 11.05.2008, 11:31 Titel: |
|
|
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 |
|
|
User_User JLI'ler
Anmeldedatum: 05.08.2004 Beiträge: 137
Medaillen: Keine
|
Verfasst am: 12.05.2008, 20:42 Titel: |
|
|
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 |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 12.05.2008, 21:04 Titel: |
|
|
ups ... habe gar nicht gemerkt das du geantwortet hast
Ich teste das morgen ma ^^
Dann editiere ich das hier rein^... _________________ Besucht meine Seite:
www.cpparchiv.dl.am |
|
Nach oben |
|
|
|