Opprette en sperrende dialogboks

Du oppretter en sperrende dialogboks ved hjelp av funksjonen DialogBox . Du må angi identifikator eller navnet på en ressurs for dialogboksen boksen mal og adressen til dialogboksen boksen prosedyre. Funksjonen DialogBox laster malen, viser dialogboksen og behandler alle inndata fra brukeren før brukeren lukker dialogboksen.

I eksemplet nedenfor viser programmet en sperrende dialogboks når brukeren velger en Slett element-kommando fra en programmenyen. Dialogboksen inneholder en redigeringskontroll (der brukeren angir navnet på et element) og OK og Avbryt-knappene. Kontroll-IDer for disse kontrollene er ID_ITEMNAME, IDOK og IDCANCEL, henholdsvis.

Den første delen av eksemplet består av setninger som oppretter den modale dialogboksen. Disse utsagnene opprette i vinduet fremgangsmåten for programmets hovedvinduet, dialogboksen når systemet mottar en WM_COMMAND melding har kommandoidentifikator IDM_DELETEITEM. Den andre delen av eksemplet er dialogboksen boksen prosedyren, som henter innholdet i redigeringskontrollen og lukker dialogboksen ved mottak av en WM_COMMAND-melding.

De følgende setningene opprette den modale dialogboksen. Dialogboksen boksen malen er en ressurs i programmets kjørbare fil, og har ressursidentifikatoren DLG_DELETEITEM:

case WM_COMMAND: bytte (LOWORD(wParam)) {case IDM_DELETEITEM: Hvis (DialogBox (HINST-, MAKEINTRESOURCE(DLG_DELETEITEM), hwnd, (DLGPROC) DeleteItemProc) == IDOK) {
 
                    / / Fullføre kommandoen; szItemName / / inneholder navnet på elementet til / / delete. 

                }
 
                else 
                {

/ / Avbryte kommandoen. 

                } 
                break; 
        } returnere 0 L 

 

I dette eksemplet identifiserer programmet sin hovedvinduet som eiervinduet for dialogboksen. Når dialogboksen vises først i systemet, er posisjonen forhold til øverste venstre hjørne av eiervinduet klientområdet. Programmet bruker returverdien fra DialogBox for å avgjøre om du vil fortsette med kommandoen eller avbryte den. Følgende utsagn, definere dialogboksen boksen prosedyre.

char szItemName [80]; / / mottar navnet på elementet du vil slette. 
 
TILBAKERINGING BOOL DeleteItemProc (hwndDlg, melding, wParam, lParam) HWND hwndDlg; 
UINT beskjed; 
WPARAM wParam; 
LPARAM lParam; 
{bryteren (meldingen) {case WM_COMMAND: bytte (LOWORD(wParam)) {case IDOK: Hvis (!GetDlgItemText (hwndDlg, ID_ITEMNAME, szItemName, 80)) * szItemName = 0; 
 
                    / / Faller. 
 
                Case IDCANCEL: EndDialog (hwndDlg, wParam); 
                    Returner verdien SANN; 
            }} return FALSE; 
} 

 

I dette eksemplet bruker fremgangsmåten GetDlgItemText til å hente gjeldende teksten fra redigeringskontrollen identifisert av ID_ITEMNAME. Prosedyren deretter kaller funksjonen EndDialog å angi i dialogboksen returverdien til enten IDOK eller IDCANCEL, avhengig av meldingen mottas, og starte prosessen med å lukke dialogboksen. IDOK og IDCANCEL-IDer, tilsvarer knappene OK og Avbryt. Når prosedyren kaller EndDialog, systemet sender flere meldinger til prosedyren for å ødelegge dialogboksen, og returnerer verdien som returneres i dialogboksen tilbake til funksjonen som opprettet dialogboksen.

Index