Kalıcı olmayan bir iletişim kutusu oluşturma

Kalıcı olmayan bir iletişim kutusu CreateDialog işlevini kullanarak tanımlayıcıyı veya iletişim kutusunda şablon kaynağın adını ve iletişim kutusu yordam adresini belirterek oluşturduğunuz. CreateDialog şablonunu yükler, iletişim kutusu oluşturur ve isteğe bağlı olarak görüntüler. Uygulama iletişim kutusu yordam kullanıcı girdi iletileri gönderme ve alma işlemlerinden sorumlu.

Aşağıdaki örnek, uygulama kalıcı olmayan bir iletişim kutusu görüntüler — değil zaten görüntüleniyorsa, — ne zaman kullanıcı bir uygulama menüsünden Git komutunu seçer. İletişim kutusu, bir düzenleme denetimine bir onay kutusu ve Tamam ve iptal düğmelerini içerir. İletişim kutusunda şablon uygulamanın yürütülebilir dosyasındaki bir kaynak ve dlg_goto kaynak tanımlayıcısı vardır. Kullanıcı düzenleme denetimine bir satır numarası girer ve satır numarasını satıra göreli olduğunu belirtmek için bu onay kutusunu denetler. ID_LINE, ID_ABSREL, IDOK ve IDCANCEL denetim tanımlayıcıları şunlardır.

Örneğin ilk bölümünde ifadeler kalıcı olmayan bir iletişim kutusu oluşturma. Bu ifadeler, uygulamanın ana pencere, pencere yordamı iletişim kutusu penceresinin yordam IDM_GOTO komut tanımlayıcısı olan bir wm_command iletisi aldığında, ancak yalnızca küresel değişken hwndGoto zaten geçerli bir tanıtıcı yoksa oluşturun. İkinci örnek uygulamanın ana ileti döngüsü parçasıdır. Döngü, kullanıcı iletişim kutusu klavye arabirimi bu engelleyici olmayan iletişim kutusunda kullanabileceğiniz sağlamak için IsDialogMessage işlevi içerir. Üçüncü örnek iletişim kutusu yordamı parçasıdır. Kullanıcı Tamam seçtiğinde yordamı düzenleme denetimi ve onay kutusunun içeriğini alır. Kullanıcı İptal düğmesini seçtiğinde yordamı iletişim kutusu yok.

Hwnd hwndGoto = null;  / / pencere tanıtıcı iletişim kutusu. 
    . 
    . 
 
    Case wm_command: geçiş (LOWORD(wParam)) {case IDM_GOTO: If (!IsWindow(hwndGoto)) {hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE(DLG_GOTO), hwnd, (dlgproc) GoToProc); 
                    ShowWindow (hwndGoto, sw_show); 
                } 
                break; 
        } 0 l dönmek 

 

Yukarıdaki tablolarda, sadece hwndGoto yok CreateDialog denir değil geçerli pencere işleyicisi içerir. Bu uygulamayı aynı anda iki iletişim kutusu görüntülemeyen sağlar. İletişim kutusu yok denetleme yöntemi desteklemek için iletişim yordamı hwndGoto null olarak ayarlamanız gerekir.

Aşağıdaki ifadeleri bir uygulamanın ileti döngüsü oluşur:

süre (GetMessage (amp; msg, null, null, null)) {If (!IsWindow(hwndGoto) || !IsDialogMessage (hwndGoto & msg)) {TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    } 
} 

 

Döngü iletişim kutusu pencere tanıtıcısı geçerliliğini denetler ve tanıtıcı geçerli ise sadece IsDialogMessage işlevini çağırır. İletişim kutusuna ait IsDialogMessage yalnızca iletiyi işler. Aksi takdirde false döner ve döngü uygun pencereyi mesajı gönderir.

Aşağıdaki deyimleri iletişim kutusu yordam tanımla:

int iLine;             / / satır numarası bool fRelative; alır        / / onay kutusunun durumunu alır bool geri GoToProc (hwnd hwndDlg, UINT ileti, wparam wParam, lparam lParam) {BOOLGET fError; 
 
    switch (ileti) {WM_INITDI&ALOG durumda: CheckDlgButton (hwndDlg, ID_ABSREL, fRelative); 
            true döndürür; 
 
        Case wm_command: geçiş (LOWORD(wParam)) {IDOK durumda: fRelative = IsDlgButtonChecked (hwndDlg, ID_ABSREL); 
                    iLine GetDlgItemInt = (hwndDlg, ID_LINE, amp; fError, fRelative); 
                    Eğer (fError) {MessageBox (hwndDlg, SZINVALIDNUMBER, szgotoerr, mb_ok); 
                        SendDlgItemMessage (hwndDlg, ID_LINE, em_setsel, 0,-1 l); 
                    } else / / taşımak için sahibi penceresinin bildirmek / / çıkış komutu. 
 
                    true döndürür; 
 
                durumda IDCANCEL: DestroyWindow(hwndDlg); 
                    hwndGoto = null; 
                    true döndürür; 
            }} return false; 
} 

 

Yukarıdaki tablolarda, yordamı, WM_INITDIALOG ve wm_command iletileri işler. İşleme WM_INITDIALOG sırasında yordamı onay kutusunu CheckDlgButtoniçin küresel değişken fRelative geçerli değerini ileterek başlatır. Yordam daha sonra sistemin varsayılan giriş odağı ayarlamak için doğru verir.

Kullanıcı İptal düğmesini seçerse wm_command işleme sırasında yordamı iletişim kutusunu kapatır — yani, IDCANCEL tanımlayıcı olan düğme. Yordam modsuz iletişim kutusunu kapatmak için DestroyWindow çağırmalısınız. Yordam ayarlar da hwndGoto değişkeni null sağlamak bu değişken üzerinde bağımlı diğer deyimleri düzgün çalışması için duyuru.

Kullanıcı Tamam düğmesini seçerse, yordamı onay kutusunun geçerli durumunu alır ve fRelative değişkenine atar. Sonra Düzen denetimden satır numarasını almak için değişkeni kullanır. GetDlgItemInt düzenleme denetimindeki metnin bir tamsayı dönüştürür. FRelative değeri, işlev numarası imzalanmış veya imzalanmamış bir değer olarak yorumlayan olup olmadığını belirler. Düzenleme denetimi metin, geçerli bir sayı değil, GetDlgItemInt fError değişkenin değeri sıfır için ayarlar. Yordam, bir hata iletisi görüntüler ya da komutunu yürütmek belirlemek için bu değeri denetler. Bir hata durumunda, iletişim kutusu yordamı için düzenleme denetimi, denetimin metni seçin, böylece kullanıcının kolayca değiştirebilirsiniz için yönlendiren bir ileti gönderir. GetDlgItemInt Hata döndürmezse, yordamı istenen komutunu gerçekleştirir veya komutunu yürütmek için yönlendirerek sahibi penceresinin ileti göndermek.

Index