Messages (C++)
Language:
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 )