Bir iletişim kutusu başlatılıyor

İletişim kutusu ve içeriğini WM_INITDIALOG ileti işlenirken başlatılamıyor. En yaygın görevi geçerli iletişim kutusu ayarları yansıtacak şekilde denetimlerini başlatmak etmektir. Başka bir yaygın bir iletişim kutusu ekranda ya da onun sahibi pencere içinde ortalamak için görevdir. Bazı iletişim kutuları için yararlı bir görev yerine Giriş odağı belirli bir denetime varsayılan giriş odağı kabul etmektir.

Aşağıdaki örnekte, iletişim kutusu yordamı iletişim merkezleri ve WM_INITDIALOG ileti işlenirken girdi odağını ayarlar. İletişim kutusu ortalamak için yordamı iletişim kutusu ve sahibi pencere pencere dikdörtgenler alır ve iletişim kutusu yeni bir konuma hesaplar. Giriş odağı ayarlamak için yordam varsayılan girdi odağını tanıtıcısı belirlemek için wParam parametresini denetler.:

Hwnd hwndOwner; 
rect rc, rcDlg, rcOwner; 
 
    Case WM_INITDIALOG: / / pencere ve iletişim kutusunu veya sahibi olsun. 
 
        If ((hwndOwner = GetParent(hwndDlg)) == null) {}
            hwndOwner = GetDesktopWindow(); 
        }

GetWindowRect (hwndOwner, amp; rcOwner); 
        GetWindowRect (hwndDlg ve rcDlg); 
        CopyRect (rc & rcOwner); 
 
         / / Sahibi ofset ve iletişim kutusunu veya böylece / / sağ ve alt değerleri temsil genişliği ve / / yükseklik ve daha sonra mahsup tekrar atmaya sahibi / / iletişim kutusu kapladığı boşluk. 
 
        OffsetRect (& rcDlg,-rcDlg.left, - rcDlg.top); 
        OffsetRect (& rc,-rc.left, - rc.top); 
        OffsetRect (& rc,-rcDlg.right, - rcDlg.bottom); 
 
         / / Yeni konumu yarım kalan toplamıdır / / alan ve sahibi Özgün konum. 
 
        SetWindowPos (hwndDlg, hwnd_top, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / boyut değişkenlerini yoksayar SWP_NOSIZE); 
 
        Eğer (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME)); 
            return false; 
        } true döndürür 

 

Yukarıdaki tablolarda, yordam sahibi pencere işleyicisi için bir iletişim kutusu almak için GetParent işlevini kullanır. İşlevi pencere tanıtıcısı için iletişim kutuları ve alt pencereleri üst pencere tanıtıcı verir. Uygulama bir iletişim kutusu hiçbir sahibi olan oluşturduğundan, yordam döndürülen tanıtıcıyı denetler ve gerekirse, masaüstü pencere tanıtıcısı almak için GetDesktopWindow işlevini kullanır. Yeni konumu hesaplandıktan sonra yordamı SetWindowPos Taşı iletişim kutusu sahibi Pencerenin tepesinde kalmasını sağlamak için hwnd_top değerini belirten iletişim kutusu için işlevini kullanır.

Giriş odağı ayarlamadan önce yordam varsayılan giriş odaklı denetim tanıtıcısı denetler. Sistem varsayılan girdi odağını pencere tanıtıcısı wParam parametresi geçirir. GetDlgCtrlID işlevi, pencere tanıtıcısı tarafından tanımlanan denetim için tanımlayıcıyı döndürür. Tanımlayıcı doğru tanımlayıcı eşleşmezse, yordam giriş odağı ayarlamak için SetFocus işlevini kullanır. GetDlgItem işlevi istediğiniz denetimin pencere tanıtıcısı almak için gerekli.

Index