Sending a Message
The
SendMessage function is used to send a message directly to a window procedure.
SendMessage calls a window procedure and waits for that procedure to process the message
and return a result.
A message can be sent to any window in the system; all that is required is a
window handle. Windows uses the handle to determine which window procedure
should receive the message.
Before processing a message that may have been sent from another thread, a
window procedure should first call the
InSendMessage function. If this function returns TRUE, the window procedure should call
ReplyMessage before any function that causes the thread to yield control, as shown in the
following example.
case WM_USER + 5:
if (InSendMessage())
ReplyMessage(TRUE);
DialogBox(hInst, "MyDialogBox", hwndMain, (DLGPROC) MyDlgProc);
break;
A number of messages can be sent to controls in a dialog box. These control
messages set the appearance, behavior, and content of controls or retrieve
information about controls. For example, the
CB_ADDSTRING message can add a string to a combo box, and the
BM_SETCHECK message can set the check state of a check box or radio button.
Use the
SendDlgItemMessage function to send a message to a control, specifying the identifier of the
control and the handle of the dialog box window that contains the control. The
following example, taken from a dialog box procedure, copies a string from a combo
box's edit control into its list box. The example uses
SendDlgItemMessage to send a CB_ADDSTRING message to the combo box.
HWND hwndCombo;
int cTxtLen;
PSTR pszMem;
switch (uMsg)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDD_ADDCBITEM:
// Get the handle of the combo box and the
// length of the string in the edit control
// of the combo box.
hwndCombo = GetDlgItem(hwndDlg, IDD_COMBO);
cTxtLen = GetWindowTextLength(hwndCombo);
// Allocate memory for the string and copy
// the string into the memory.
pszMem = (PSTR) VirtualAlloc((LPVOID) NULL,
(DWORD) (cTxtLen + 1), MEM_COMMIT,
PAGE_READWRITE);
GetWindowText(hwndCombo, pszMem,
cTxtLen + 1);
// Add the string to the list box of the
// combo box and remove the string from the
// edit control of the combo box.
if (*pszMem != NULL)
{
SendDlgItemMessage(hwndDlg, IDD_COMBO,
CB_ADDSTRING, 0,
(DWORD) ((LPSTR) pszMem));
SetWindowText(hwndCombo, (LPSTR) NULL);
}
// Free the memory and return.
VirtualFree(pszMem, 0, MEM_RELEASE);
return TRUE;
//
// Process other dialog box commands.
//
}
//
// Process other dialog box messages.
//
}
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database