[Win32/C++] Keypress in editbox

Pagina: 1
Acties:

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Hoe ben ik in staat om een keypress in een editbox op te vangen? Ik wil namelijk per toetsaanslag van het keyboard een bepaalde actie uitvoeren (ik moet de character-code ook weten daarvoor).
Ik heb zelf het idee dat het moet kunnen met WM_CHAR o.i.d. maar ik kan het niet voor elkaar krijgen dat hij ook daadwerkelijk de code hierachter uitvoerd, het lijkt wel dat hij het WM_CHAR -msg niet lijkt te ontvangen.
Ik heb ook ff spy++ gebruikt om te kijken welke berichten de edit-box ontvangt, maar hier staat WM_CHAR wel bij, doe ik wat verkeerd? Alvast bedankt!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Heb je je edit box wel gesubclassed? Dwz, heb je de window proc wel veranderd naar je eigen wndproc?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Nope, ik heb het ff nagezocht en ik snap wat je bedoeld. Alleen nu krijg ik het niet voor elkaar om voor de editbox een subclass aan te maken omdat ik de edit-box aanmaak met via een .rc file. Dus ik denk dat ik dan achteraf een subproc aan deze edit box moet toevoegen alleen ik weet nog niet hoe ik dat moet doen...

Edit:
C++:
1
2
3
hWndSendEdit = (HWND)SendDlgItemMessage(hWnd,IDC_SEND_EDIT,EM_GETHANDLE,0,0);
lpSubClassProc=MakeProcInstance((FARPROC)SubEditWndProc,hInstance);
SetWindowLong(hWndSendEdit, GWL_WNDPROC, (LONG)lpSubClassProc);
lijkt niet te werken :(

Edit2:
C++:
1
2
hWndSendEdit = GetDlgItem(hWnd, IDC_SEND_EDIT);
g_OldEdit = (WNDPROC)SetWindowLong(hWndSendEdit, GWL_WNDPROC, (LONG)NewEditProc);
Deze werkt wel... Bedankt voor de hulp!

[ Voor 45% gewijzigd door PKP B-Man op 20-10-2003 21:15 ]


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

EM_GETHANDLE doet heel wat anders dan de handle opvragen van een edit control:
The EM_GETHANDLE message retrieves a handle of the memory currently allocated for a multiline edit control's text.
En MakeProcInstance is obsolete, hoef je niet meer te gebruiken.

Terwijl ik dit typ zie ik dat je de oplossing al gevonden hebt, maar ik post het toch maar, weet je ook meteen waarom het eerste niet werkte..

www.madwizard.org


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Idd, gewoon de windowproc aanpassen mbv SetWindowLong. Vergeet niet om de oude wndproc eerst op te vragen en die aan te roepen vanuit je eigen windowproc mbv CallWindowProc () (nooit direct de functiepointer zelf aanroepen, het hoeft niet per se naar een geldige functie te wijzen!). Die gebruik je dus ipv de DefWindowProc () aanroep

sidenote: nu vraag ik me eigenlijk af of dat in het geval van een standaard control echt nodig is. Het is natuurlijk wel zo netjes om het zo te doen, maar zou DefWindowProc detecteren dat het een edit control is, en daardoor de juiste windowproc aanroepen?

[ Voor 36% gewijzigd door .oisyn op 20-10-2003 22:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

.oisyn schreef op 20 October 2003 @ 22:25:
sidenote: nu vraag ik me eigenlijk af of dat in het geval van een standaard control echt nodig is. Het is natuurlijk wel zo netjes om het zo te doen, maar zou DefWindowProc detecteren dat het een edit control is, en daardoor de juiste windowproc aanroepen?
Nee, DefWindowProc zit in user32.dll, en de custom controls in diverse andere DLL's. Windows zou dus een upside-down dependency genereren als DefWindowProc kennis de common controls zou hebben. Daarnaast zou het buggy zijn als de tyfus, er zijn in de tijd van NT/95 nog wel eens common controls toegevoegd met IE-updates, wat nooit een user32.dll update met zich meebracht.

Professionele website nodig?

Pagina: 1