Verzenden van een bericht

De SendMessage -functie wordt gebruikt om een bericht direct verzenden in een venster procedure. SendMessage roept een venster procedure en wacht tot deze procedure om het bericht te verwerken en een resultaat te retourneren.

Een bericht kan worden verzonden naar een venster in het systeem; dat alles wordt vereist is een window handle. Het systeem gebruikt het handvat om te bepalen welke venster procedure moet het bericht.

Voordat een bericht dat kan zijn verzonden vanaf een andere thread wordt verwerkt, moet een procedure venster eerst de InSendMessage functie aanroepen. Als deze functie waar als resultaat geeft, moet de procedure venster ReplyMessage aanroepen voor een functie waardoor de draad om de opbrengst van controle, zoals in het volgende voorbeeld.

geval WM_USER + 5: als (InSendMessage()) ReplyMessage(TRUE); 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, (DLGPROC) MyDlgProc); 
    pauze 
 

Een aantal berichten kan worden verzonden naar besturingselementen in het dialoogvenster. Deze besturingsberichten verschijning, gedrag en inhoud van besturingselementen instellen of ophalen van informatie over besturingselementen. Bijvoorbeeld, het bericht CB_ADDSTRING kunt een tekenreeks toevoegen aan een keuzelijst met invoervak, en het bericht BM_SETCHECK de check-state van een selectievakje of keuzerondje kunt instellen.

De functie SendDlgItemMessage een bericht verzenden naar een besturingselement, opgeven van het id van het besturingselement en de greep van het dialoogvenster vak venster die het besturingselement bevat. In het volgende voorbeeld, ontleend aan een dialoogvenster vak procedure, gekopieerd van een keuzelijst met invoervak invoervak een tekenreeks in de keuzelijst. In het voorbeeld wordt SendDlgItemMessage een CB_ADDSTRING-bericht verzenden naar de keuzelijst met invoervak.

HWND hwndCombo; 
int cTxtLen; 
PSTR pszMem; 
 
schakelaar (uMsg) {geval WM_COMMAND: schakelen (LOWORD(wParam)) {geval IDD_ADDCBITEM: / / Get het handvat van de keuzelijst met invoervak en de / / lengte van de tekenreeks in de edit control / / van de keuzelijst met invoervak. 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo); 
 
                / / Geheugen toewijzen voor de tekenreeks en kopie / / de tekenreeks in het geheugen. 
 
                pszMem = NULL (PSTR) VirtualAlloc((LPVOID), (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / / De tekenreeks toevoegen aan de keuzelijst van de / / combo box en verwijder de tekenreeks van de / / bewerken besturingselement van de keuzelijst met invoervak. 
 
                Als (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR))); 
                    SetWindowText (hwndCombo, (LPSTR) NULL); 
                } / / Het geheugen vrij te maken en terug te keren. 
 
                VirtualFree (pszMem, 0, MEM_RELEASE); 
                return TRUE; 
            / / / / Andere dialoogvenster vak opdrachten proces. 
            / /} / / / / Andere dialoogvensterberichten proces. 
    // 
 
} 
 

Index