Dúvida SendMessage()

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida SendMessage()

Mensagem por JoséQuintas »

As LIBs gráficas fazem muito uso da função do Windows SendMessage().
Mas existe também a PostMessage().
PostMessage() - envia a mensagem, sem aguardar resposta
SendMessage() - envia a mensagem, e aguarda resposta
À primeira vista, tudo funcionaria mais rápido com PostMessage().
Não é seguro?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida SendMessage()

Mensagem por JoséQuintas »

Esqueçam a pergunta.
No teste prático, não é válido pra todas as situações, e gera problema de atualização de tela.
SendMesssage() garante certas atualizações sequenciais.
Além disso, ficar testando cada situação onde pode ou não pode, ocupa tempo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Dúvida SendMessage()

Mensagem por alxsts »

Olá!

Creio que dependa da necessidade. Uma serve para operações síncronas (tem que aguardar o retorno) e a outra para operações assíncronas, onde não se precise aguardar o retorno.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida SendMessage()

Mensagem por JoséQuintas »

Pois é, foi o que pensei, mas não é só isso.

por exemplo, pra obter algum valor do controle seria SendMessage()

Código: Selecionar todos

nPosicao := SendMessage( hWnd, WM_GETVALUE, 0, 0 )
pra colocar uma imagem de fundo, poderia ser PostMessage()

Código: Selecionar todos

PostMessage( hWnd, WM_SETIMAGE, xx, xx )
Foi isso que pensei, mas o button ficou sem imagem usando PostMessage.
Provavelmente a tela foi atualizada antes do controle terminar de receber a imagem, ou algo assim.
Então, pra não testar cada situação, voltei tudo pra SendMessage() ... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Dúvida SendMessage()

Mensagem por Claudio Soto »

Windows trabaja en base a una cola de mensajes, es decir que cuando se envía un msg este se adiciona al final de la fila, claro existen algunas excepciones y algunos msg tienen más prioridad que otros, pero de eso se encarga el SO.

Las aplica tienen dos formas de comunicarse con una ventana, Send y Postmessage

Sendmessage envía inmediatamente el mensaje saltándose la fila y retorna recién cuando el SO termina de procesar el msg.

Postmessage envía el msg pero este se almacena al final de la fila y retorna inmediatamente sin esperar a que el msg se procese.

En general se usa Sendmessage, son muy pocas las situaciones en que se debe usar Postmessage
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida SendMessage()

Mensagem por JoséQuintas »

Esse é o tipo de coisa que só descobrimos quando tentamos colocar em prática.

Obrigado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder