Een dialoogvenster initialiseren

U initialiseren in het dialoogvenster en de inhoud ervan tijdens het verwerken van het WM_INITDIALOG bericht. De meest voorkomende taak is het initialiseren van de besturingselementen te weerspiegelen de huidige instellingen in het dialoogvenster. Een andere veelvoorkomende taak is het centreren van een dialoogvenster op het scherm of binnen een venster van de eigenaar. Een nuttige taak voor sommige dialoogvensters is de invoerfocus ingesteld op een bepaald besturingselement in plaats van de standaard input focus accepteren.

In het volgende voorbeeld wordt het dialoogvenster vak procedure centra in het dialoogvenster en stelt de invoerfocus tijdens het verwerken van het WM_INITDIALOG bericht. Naar het midden van het dialoogvenster, de procedure haalt de venster rechthoeken voor het dialoogvenster en venster van de eigenaar en berekent een nieuwe positie voor het dialoogvenster. Om de input focus, controleert de procedure de wParam parameter om te bepalen van de id van de standaard input focus:

HWND hwndOwner; 
RECT rc, rcDlg, rcOwner; 
 
    Case WM_INITDIALOG: / / Get de eigenaar venster en dialoogvenster vak rechthoeken. 
 
        Als ((hwndOwner = GetParent(hwndDlg)) == NULL) {}
            hwndOwner = GetDesktopWindow(); 
        }

GetWindowRect (hwndOwner, amp; rcOwner); 
        GetWindowRect (hwndDlg, & rcDlg); 
        CopyRect (rc, & rcOwner); 
 
         / / De eigenaar offset en dialoogvenster vak rechthoeken zodat / / waarden right en bottom vertegenwoordigen de breedte en / / hoogte, en de eigenaar weer te negeren-dan verschuiving / / ruimte in beslag genomen door het dialoogvenster. 
 
        OffsetRect (& rcDlg,-rcDlg.left, -rcDlg.top); 
        OffsetRect (& rc,-rc.left, -rc.top); 
        OffsetRect (& rc,-rcDlg.right, -rcDlg.bottom); 
 
         / / De nieuwe positie is de som van de helft de resterende / / ruimte en de eigenaar's oorspronkelijke standpunt. 
 
        SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / grootte argumenten negeert SWP_NOSIZE); 
 
        Als (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME)); 
            Return FALSE; 
        } TRUE retourneren 
 

In de voorgaande verklaringen wordt de procedure de functie GetParent gebruikt om op te halen de eigenaar vensteringang voor een dialoogvenster. De functie retourneert de eigenaar vensteringang voor dialoogvensters en de bovenliggende vensteringang voor onderliggende vensters. Omdat een toepassing een dialoogvenster dat geen eigenaar heeft maken kunt, de procedure controleert de geretourneerde handvat en wordt de functie GetDesktopWindow gebruikt om op te halen het bureaubladvenster handvat, indien nodig. Na de berekening van de nieuwe positie, wordt de procedure de functie SetWindowPos te verplaatsen van het dialoogvenster de waarde HWND_TOP om ervoor te zorgen dat het dialoogvenster op de top van de eigenaar-venster blijft.

De procedure controleert voordat u de invoerfocus instelt, is de id van de controle van de standaard input focus. Het systeem wordt de vensteringang van de invoerfocus standaard doorgegeven in de wParam -parameter. De functie GetDlgCtrlID retourneert de id voor het besturingselement ge´dentificeerd door de vensteringang. Als de id niet overeenkomt met de juiste id, gebruikt de procedure de functie SetFocus de invoerfocus instellen. De functie GetDlgItem is vereist om op te halen de vensteringang van het gewenste besturingselement.

Index