Zachycení klávesy "Enter" v editboxu win32 api – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zachycení klávesy "Enter" v editboxu win32 api – C / C++ – Fórum – Programujte.comZachycení klávesy "Enter" v editboxu win32 api – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
ProXicT0
Návštěvník
2. 9. 2013   #1
-
0
-

Zdravím, 
nenašel by se tu někdo, kdo by mi mohl poradit, jak zachytit klávesu "Enter", když focus má editbox? Už si vážně nevím rady. Nic z toho, co jsem zkoušel mi nefunguje. 
 

Vvytvoření editboxu:

	edit = CreateWindow(
					  TEXT("EDIT"),
					  TEXT("Command >"),
					  WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL,
					  5, 430,
					  790, 20,
					  hwnd,
					  (HMENU) ID_TEXTBOX,
					  NULL,
					  NULL,
					  );

SendMessage (edit, WM_SETFONT, (WPARAM)font, TRUE);
		}
		return 0;
case WM_KEYDOWN:
if(wParam == VK_RETURN)
{
GetDlgItemText(hwnd, ID_TEXTBOX, buffer, 255);
SendMessage(listbox, LB_ADDSTRING, 0, (LPARAM) buffer);
}
break; // <^ - Toto funguje pouze, když má focus hlavní okno...

Předem díky za pomoc ;)

Nahlásit jako SPAM
IP: 77.240.98.–
liborb
~ Redaktor
+18
Guru
3. 9. 2013   #2
-
0
-

1) Pokud máš hlavní okno typu dialog, tak stačí zachytávat ve WM_COMMAND příchozí IDOK (ani nemusí být na dialogu odpovídající tlačítko) a tam rozhodovat, co uděláš podle toho, kdo má fokus

2) Pokud máš hlavní okno klasické, tak je jedna rychlejší metoda (lze zjistit přes Spy++). Stačí nastavit tomu tvému editačnímu políčku ještě styl ES_MULTILINE a ES_WANTRETURN. Při stisku Enter v tomto editačním políčku ti přijde mimo jiné i notifikace EN_MAXTEXT ... něco ve smyslu: 

switch(nMessage) {
	case(WM_COMMAND):
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		switch(wmId) {
			case(ID_TEXTBOX):
				if (wmEvent == EN_MAXTEXT) {
					// tvoje reakce
				}
				break;
		};
		break;
};
	

3) A jeden z posledních způsobů je subclassing. Prostě tomu editačnímu políčku podstrčíš jinou funkci, která zpracovává zprávy pro něj příchozí. Tam zachytíš WM_KEYDOWN nebo jinou zprávu a pošleš si do hlavního okna vlastní notifikaci. Dokonce můžeš vytvořit speciální typ ovládacího prvku, který si bude držet pozici kurzoru za tím textem "Command >", bude sám mazat potvrzený příkaz a pošle nejenom notifikaci, ale rovnou ten příkaz (třeba jako WM_COMMAND nebo WM_USER). Na oko je to pracnější, ale máš to kompletně pod kontrolou.

Nahlásit jako SPAM
IP: 188.75.135.–
ProXicT0
Návštěvník
3. 9. 2013   #3
-
0
-

#2 liborb
Asi něco dělám špatně, ani jedna metoda mi nefungovala, pokaždé, když něco napíšu do editboxu a stisknu enter, tak to pouze pípne, ale jinak se nic nestane. U té druhé metody navíc nevim, co je wmID a wmEvent, takže tu jsem musel prozatím vypustit...

Nahlásit jako SPAM
IP: 77.240.98.–
liborb
~ Redaktor
+18
Guru
4. 9. 2013   #4
-
+1
-
Zajímavé

Příklad první a druhé možnosti (na aplikaci generované VS). První možnost je schovaná v dialogu O aplikaci a druhá je v hlavním okně (i s minimální reakcí).

Nahlásit jako SPAM
IP: 188.75.135.–
ProXicT0
Návštěvník
4. 9. 2013   #5
-
0
-

#4 liborb
Super, moc mi to pomohlo, jsi boss!

Nahlásit jako SPAM
IP: 77.240.98.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 80 hostů

Podobná vlákna

Enter v editboxu — založil Tom9k

Win32 API — založil survik1

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý