Sende en melding

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. 
    // 
 
} 

 

Index