Le message #WM_KEYDOWN
Publié : jeu. 29/oct./2009 18:31
Il y a un truc que je ne comprend pas avec ce message, apparemment on ne peut pas l'intercepter.
Dans le programme qui suit, un click sur le bouton "Afficher Lettre" envoie la lettre a(=65); je modifie le paramètre wParam par 66 dans le message #WM_KEYDOWN et ça m'affiche toujours un a et si je met un ProcedureReturn 0, le message est quand même traité et me renvoie un a quoi qui se passe.
Quelqu'un sait pourquoi?
Dans le programme qui suit, un click sur le bouton "Afficher Lettre" envoie la lettre a(=65); je modifie le paramètre wParam par 66 dans le message #WM_KEYDOWN et ça m'affiche toujours un a et si je met un ProcedureReturn 0, le message est quand même traité et me renvoie un a quoi qui se passe.
Quelqu'un sait pourquoi?
Code : Tout sélectionner
Global Quit.l
LoadFont(0, "Courier", 10)
Procedure NouvelleProc(Hwnd.l, msg.l, wParam.l, lParam.l)
Protected OriginProc.l
OriginProc.l = GetProp_(Hwnd, "OriginProc")
Select msg
Case #WM_KEYDOWN
Debug "#WM_KEYDOWN="+Str(wParam)
wParam = 66
;ProcedureReturn 0
Case #WM_NCDESTROY
SetWindowLong_(Hwnd, #GWL_WNDPROC, OriginProc)
RemoveProp_(Hwnd, "OriginProc")
EndSelect
ProcedureReturn CallWindowProc_(OriginProc, Hwnd, msg, wParam, lParam)
EndProcedure
If OpenWindow(0, 100, 200, 400, 200, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
StringGadget(0, 10, 10, 380, 40, "", #ES_MULTILINE)
SetGadgetFont(0, FontID(0))
ButtonGadget(1, 50, 160, 100, 30, "Quitter")
ButtonGadget(2, 180, 160, 100, 30, "Afficher Lettre")
StickyWindow(0, 1)
OriginProc = SetWindowLong_(GadgetID(0), #GWL_WNDPROC, @NouvelleProc())
SetProp_(GadgetID(0), "OriginProc", OriginProc)
Repeat
Event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Quit = 1
Case 2
PostMessage_(GadgetID(0), #WM_KEYDOWN, 65, 0)
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndIf