Ao programar no Windows, muitas vezes descobrimos que há muitas funções que o sistema Windows já implementou. Se elas puderem ser chamadas diretamente, isso pode economizar muita gravação de programas e melhorar a eficiência de execução do programa. Em muitos casos, podemos usar "Ctrl + Ser capaz de chamar essas funções do sistema em um programa elimina a necessidade de se preocupar em como implementar essas operações. Após exploração constante, finalmente descobri que SendMessage e PostMessage podem assumir esta importante tarefa. É um tesouro, então mal posso esperar para apresentá-los a todos os meus amigos.
Essas duas funções de API podem ser facilmente encontradas usando o "API Browser" do VB5:
DeclareFunctionSendMessageLib "user32" Alias "SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_lParamAsAny)AsLong
DeclareFunctionPostMessageLib "user32" Alias "PostMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_ByVallParamAsLong)AsLong
As funções dessas duas funções são quase as mesmas, exceto que SendMessage chama diretamente a função do Windows para enviar a mensagem. Esta função retorna somente após a mensagem ser completamente processada, enquanto PostMessage adiciona uma mensagem à fila de mensagens do formulário. will será tratado durante o tratamento normal de eventos em algum momento no futuro. O seguinte toma SendMessage apenas como exemplo.
Embora existam quatro parâmetros na função, os principais são os dois primeiros: hwnd e wMsg. Hwnd é um identificador. Cada formulário e controle em um aplicativo do Microsoft Windows possui um identificador. O identificador pode indicar que o objeto de operação da função é um número hexadecimal que representa a mensagem específica a ser enviada pela função.
A seguir são usados exemplos específicos para ilustrar como usar SendMessage para implementar as funções "cortar", "copiar", "colar", "desfazer" e "excluir":
Coloque uma caixa de texto Text1 e cinco botões no formulário para executar as cinco funções acima, respectivamente, e escreva o seguinte programa.
OpçãoExplícita
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(Text1.hwnd,WM_CLEAR,0,0)
Fim Sub
PrivateSubcmdCopy_Click()
fb=EnviarMensagem(Text1.hwnd,WM_COPY,0,0)
Fim Sub
PrivateSubcmdCut_Click()
fb=EnviarMensagem(Text1.hwnd,WM_CUT,0,0)
Fim Sub
PrivateSubcmdPast_Click()
fb=EnviarMensagem(Text1.hwnd,WM_PAST,0,0)
Fim Sub
PrivateSubcmdUndo_Click()
fb=EnviarMensagem(Text1.hwnd,WM_UNDO,0,0)
Fim Sub
Além do TextBox, SendMessage também pode operar em RitchTextBox e ComboBox, etc., desde que o parâmetro hwnd seja alterado de acordo. ->