SendMessage -funksjonen brukes til å sende en melding direkte til en vindusprosedyre for. SendMessage kaller opp en vindusprosedyre i, og venter på at prosedyren for å behandle meldingen og returnere et resultat.
En melding kan bli sendt til alle vinduer i systemet; alt som kreves er en vindusreferanse. Systemet bruker håndtaket for å finne ut hvilke vindusprosedyre skal motta meldingen.
Før behandling av en melding som sendes fra en annen tråd, må en vindusprosedyre først kalle funksjonen InSendMessage . Hvis denne funksjonen returnerer SANN, må vinduet prosedyren kalle ReplyMessage før noen funksjon som gjør at tråden å gi kontroll, som vist i eksemplet nedenfor.
case WM_USER + 5: Hvis (InSendMessage()) ReplyMessage(TRUE);
DialogBox (HINST-, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC));
pause
En rekke meldinger kan sendes til kontroller i en dialogboks. Disse kontrollmeldinger angi utseende, virkemåte og innholdet i kontroller eller hente informasjon om kontroller. For eksempel CB_ADDSTRING meldingen kan legge en streng til en kombinasjonsboks, og BM_SETCHECK meldingen kan angi sjekk status for en avmerkingsboks eller alternativknapp.
Bruke SendDlgItemMessage -funksjonen for å sende en melding til en kontroll, for å angi identifikatoren for kontrollen og håndtak av dialogvindauget for boksen som inneholder kontrollen. Eksemplet nedenfor, tatt fra en dialog boks prosedyre, kopierer en streng fra en kombinasjonsboks edit-kontrollen til sin liste. Eksemplet bruker SendDlgItemMessage til å sende en CB_ADDSTRING melding til kombinasjonsboksen.
HWND hwndCombo;
Int cTxtLen;
PSTR pszMem;
bryteren (uMsg) {case WM_COMMAND: bytte (LOWORD(wParam)) {case IDD_ADDCBITEM: / / få hånd av kombinasjonsboksen og den / / kontroll av lengden av strengen i boksen Rediger / / av kombinasjonsboksen.
hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO);
cTxtLen = GetWindowTextLength(hwndCombo);
/ / Tildele minne for spørringsstrengen og kopierer / / strengen i minnet.
pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE);
GetWindowText (hwndCombo, pszMem, cTxtLen + 1);
/ / Legge til strengen i listeboksen av den / / kombinasjonsboksen boksen og fjerne strengen fra den / / redigere kontroll av kombinasjonsboksen.
Hvis (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR)));
SetWindowText (hwndCombo, NULL (LPSTR));
} / / Gratis minnet og tilbake.
VirtualFree (pszMem, 0, MEM_RELEASE);
Returner verdien SANN;
/ / / / Behandle andre dialogboksen boksen kommandoer.
/ /} / / / / Behandle andre dialogboksmeldinger.
//
}