Messages (C++)
Contents
Description
This is an example demonstrating the usage of the SendGetIntMessage, SendStructMessage, SendGetStructMessage, and SendTextMessage message functions. This example uses four buttons and six text edit boxes, as follows:
- Button1 SendGetIntMessage
- Button2 SendStructMessage
- Button3 SendGetStructMessage
- Button4 SendTextMessage
- IntEdit For int inputs
- StructEdit1 & StructEdit2 For struct inputs (ints)
- GetStructEdit1 & GetStructEdit2 For struct inputs (ints)
- TextEdit for text input
Note: This example works correctly when the default STRICT conditional define is set. However, the example generates unresolved external errors with the NO_STRICT conditional define set.
This example uses three custom message structures defined in the header:
struct TMyIntMessage { Cardinal Msg; int* wparam; int* lparam; LRESULT Result; };
struct TMyTextMessage { Cardinal Msg; int wparam; String lparam; LRESULT Result; };
struct MStruct { int m_a; int m_b; };
struct TMyStruct { Cardinal Msg; int wparam; MStruct* lparam; LRESULT Result; };
Furthermore it uses four message handling functions described in the header, along with a message map:
Code
MESSAGE void __fastcall UserIntHandler(TMyIntMessage &msg);
MESSAGE void __fastcall UserStructHandler(TMyStruct &msg);
MESSAGE void __fastcall UserGetStructHandler(TMyStruct &msg);
MESSAGE void __fastcall UserTextHandler(TMyTextMessage &msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_INTMESSAGE, TMyIntMessage, UserIntHandler);
MESSAGE_HANDLER(WM_GETSTRUCTMESSAGE, TMyStruct, UserGetStructHandler);
MESSAGE_HANDLER(WM_STRUCTMESSAGE, TMyStruct, UserStructHandler);
MESSAGE_HANDLER(WM_TEXTMESSAGE, TMyTextMessage, UserTextHandler);
END_MESSAGE_MAP(TComponent)
*/
void __fastcall TForm4::UserIntHandler(TMyIntMessage &msg){
MessageDlg("Int message received: " + IntToStr(*msg.lparam),
mtInformation, TMsgDlgButtons() << mbOK, 0);
*msg.lparam = *msg.lparam + 50;
}
void __fastcall TForm4::UserStructHandler(TMyStruct &msg){
MessageDlg("Struct received: " + IntToStr(msg.lparam->m_a) +
" " + IntToStr(msg.lparam->m_b),
mtInformation, TMsgDlgButtons() << mbOK, 0);
}
void __fastcall TForm4::UserGetStructHandler(TMyStruct &msg){
MessageDlg("Struct received: " + IntToStr(msg.lparam->m_a) +
"" + IntToStr(msg.lparam->m_b),
mtInformation, TMsgDlgButtons() << mbOK, 0);
msg.lparam->m_a = msg.lparam->m_a + 50;
msg.lparam->m_b = msg.lparam->m_b + 50;
}
void __fastcall TForm4::UserTextHandler(TMyTextMessage &msg){
MessageDlg("Text received: " + msg.lparam,
mtInformation, TMsgDlgButtons() << mbOK, 0);
}
void __fastcall TForm4::Button1Click(TObject *Sender)
{
int wparam = 0;
int lparam = StrToIntDef(IntEdit->Text,0);
int lbase = lparam;
SendGetIntMessage(Handle,WM_INTMESSAGE,wparam,lparam);
if (lbase != lparam)
{
MessageDlg("Value modified by handler function: " +
IntToStr(lparam),
mtInformation, TMsgDlgButtons() << mbOK, 0);
IntEdit->Text = IntToStr(lparam);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button2Click(TObject *Sender){
int wparam = 0;
String lparam = TextEdit->Text;
SendTextMessage(Handle,WM_TEXTMESSAGE,wparam,lparam);
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button3Click(TObject *Sender)
{
int wparam = 0;
MStruct lparam;
lparam.m_a = StrToIntDef(StructEdit1->Text,0);
lparam.m_b = StrToIntDef(StructEdit2->Text,0);
SendStructMessage(Handle, WM_STRUCTMESSAGE, wparam, &lparam);
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button4Click(TObject *Sender)
{
int wparam = 0;
MStruct lparam, lbase;
lparam.m_a = StrToIntDef(GetStructEdit1->Text,0);
lparam.m_b = StrToIntDef(GetStructEdit2->Text,0);
lbase = lparam;
SendStructMessage(Handle, WM_GETSTRUCTMESSAGE, wparam, &lparam);
if (lbase.m_a != lparam.m_a) {
MessageDlg("Struct modified by handler function: " +
IntToStr(lparam.m_a) + " " + IntToStr(lparam.m_b),
mtInformation, TMsgDlgButtons() << mbOK, 0);
GetStructEdit1->Text = IntToStr(lparam.m_a);
GetStructEdit2->Text = IntToStr(lparam.m_b);
}
}
//---------------------------------------------------------------------------
Uses
- Winapi.Messages.SendGetIntMessage ( fr | de | ja )
- Winapi.Messages.SendStructMessage ( fr | de | ja )
- Winapi.Messages.SendGetStructMessage ( fr | de | ja )
- Winapi.Messages.SendTextMessage ( fr | de | ja )