Initialiserer en dialogboks

Du initialisere dialogboksen og innholdet under behandling av WM_INITDIALOG -melding. Det er den vanligste oppgaven som initialiserer kontrollene for å gjenspeile gjeldende dialogboksinnstillingene. En annen vanlig oppgave er å midtstille en dialogboks på skjermen eller i sin eiervinduet. En nyttig oppgave for noen dialogbokser er å angi inndata fokus til en bestemt kontroll i stedet for å godta standard inndata fokus.

I følgende eksempel dialogboksen boksen prosedyre sentre i dialogboksen og angir inndata fokus under behandling av WM_INITDIALOG-melding. Hvis du vil midtstille dialogboksen, prosedyren henter vinduet rektangler for dialogboksen og eiervinduet og beregner en ny plassering for dialogboksen. Hvis du vil angi inndata fokus, kontrollerer prosedyren wParam -parameter for å fastsette identifikator for standard inndata fokus:

HWND hwndOwner; 
RECT rc, rcDlg, rcOwner; 
 
    Case WM_INITDIALOG: / / få eieren vinduet og dialogboksen boksen rektangler. 
 
        Hvis ((hwndOwner = GetParent(hwndDlg)) == NULL) {
            hwndOwner = GetDesktopWindow(); 
        }

GetWindowRect (hwndOwner, amp, rcOwner); 
        GetWindowRect (hwndDlg & rcDlg); 
        CopyRect (& rc, & rcOwner); 
 
         / / Forskyvning eieren og dialogboksen boksen rektangler slik at / / høyre og nedre verdiene representerer bredden og / / høyde og deretter Forskyvning eieren på nytt for å forkaste / / mellomrom tatt av dialogboksen. 
 
        OffsetRect (& rcDlg,-rcDlg.left, -rcDlg.top); 
        OffsetRect (& rc,-rc.left, -rc.top); 
        OffsetRect (& rc,-rcDlg.right, -rcDlg.bottom); 
 
         / / Den nye posisjonen er summen av halv gjenværende / / plass og eieren 's opprinnelige posisjon. 
 
        SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / ignorerer størrelse argumenter SWP_NOSIZE); 
 
        Hvis (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME)); 
            Return FALSE; 
        } Returnerer verdien SANN 

 

I de foregående setningene bruker prosedyren GetParent -funksjonen til å hente vindusreferansen eieren for en dialogboks. Vindus-handle for dialogbokser, og overordnede vindusreferansen for underordnede vinduer, returnerer funksjonen eieren. Fordi et program kan opprette en dialogboks som har ingen eier, prosedyren kontrollerer returnerte håndtaket og bruker GetDesktopWindow -funksjonen for å hente vindusreferansen stasjonære, om nødvendig. Når du har beregnet på den nye plasseringen, bruker prosedyren funksjonen SetWindowPos til å flytte dialogboksen, angir HWND_TOP-verdien for å sikre at dialogboksen forblir på toppen av eiervinduet.

Før du angir inndata fokus, kontrollerer prosedyren du kontroll-IDen for standard inndata fokus. Systemet sender vindusreferansen av standard inndata fokus i wParam -parameteren. Funksjonen GetDlgCtrlID returnerer identifikatoren for kontrollen som er identifisert av vindusreferansen. Hvis identifikatoren ikke samsvarer med den riktige identifikatoren, bruker prosedyren SetFocus -funksjonen til å angi inndata fokus. Funksjonen GetDlgItem kreves for å hente vindusreferansen for kontrollen ønsket.

Index