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