Lors de la programmation sous Windows, nous constatons souvent que le système Windows a déjà implémenté de nombreuses fonctions. Si elles peuvent être appelées directement, cela peut économiser beaucoup d'écriture de programme et améliorer l'efficacité de son exécution. Dans de nombreux cas, nous pouvons utiliser "Ctrl +". Pouvoir appeler ces fonctions du système dans un programme élimine le besoin de se soucier de la manière de mettre en œuvre ces opérations. Après une exploration constante, j'ai finalement découvert que SendMessage et PostMessage pouvaient assumer cette tâche importante, c'est un trésor, j'ai donc hâte de les présenter à tous mes amis.
Ces deux fonctions API peuvent être facilement trouvées à l'aide du « Navigateur API » de VB5 :
DeclareFunctionSendMessageLib "user32" Alias "SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_lParamAsAny)AsLong
DeclareFunctionPostMessageLib "user32" Alias "PostMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_ByVallParamAsLong)AsLong
Les fonctions de ces deux fonctions sont presque les mêmes, sauf que SendMessage appelle directement la fonction Windows pour envoyer le message. Cette fonction ne revient qu'une fois le message complètement traité, tandis que PostMessage ajoute un message à la file d'attente des messages du formulaire. sera traité lors de la gestion normale des événements à un moment donné dans le futur. Ce qui suit prend uniquement SendMessage comme exemple.
Bien qu'il y ait quatre paramètres dans la fonction, les plus importants sont les deux premiers : hwnd et wMsg. Hwnd est un handle. Chaque formulaire et contrôle dans une application Microsoft Windows possède un handle peut indiquer l'objet d'opération de la fonction ; wMsg est un nombre hexadécimal qui représente le message spécifique à envoyer par la fonction.
Ce qui suit utilise des exemples spécifiques pour illustrer comment utiliser SendMessage pour implémenter les fonctions « couper », « copier », « coller », « annuler » et « supprimer » :
Placez une zone de texte Text1 et cinq boutons dans le formulaire pour exécuter respectivement les cinq fonctions ci-dessus et écrivez le programme suivant.
OptionExplicite
PRivateDeclareFunctionSendMessageLib "user32" Alias "SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
ConstWM_CUT=&H300
ConstWM_COPY=&H301
ConstWM_PAST=&H302
ConstWM_CLEAR=&H303
ConstWM_UNDO=&H304
DimfbAsLong
PrivateSubcmdClear_Click()
fb=PostMessage(Texte1.hwnd,WM_CLEAR,0,0)
FinSub
PrivateSubcmdCopy_Click()
fb=EnvoyerMessage(Texte1.hwnd,WM_COPY,0,0)
FinSub
PrivateSubcmdCut_Click()
fb=EnvoyerMessage(Texte1.hwnd,WM_CUT,0,0)
FinSub
PrivateSubcmdPast_Click()
fb=EnvoyerMessage(Texte1.hwnd,WM_PAST,0,0)
FinSub
PrivateSubcmdUndo_Click()
fb=EnvoyerMessage(Texte1.hwnd,WM_UNDO,0,0)
FinSub
En plus de TextBox, SendMessage peut également fonctionner sur RitchTextBox et ComboBox, etc., à condition que le paramètre hwnd soit modifié en conséquence. ->