Tworzenie niemodalny okno dialogowe

Tworzenia okno dialogowe niemodalny za pomocą funkcji CreateDialog , określając identyfikator lub nazwa zasobu szablonu pole dialogowe i adres procedury pole dialogowe. CreateDialog ładuje szablonu, tworzy okno dialogowe i opcjonalnie wyświetla go. Aplikacja jest odpowiedzialne za pobieranie i wysyłanie komunikaty wejściowe użytkownika w procedurze pole dialogowe.

W poniższym przykładzie, aplikacja wyświetla okno dialogowe niemodalny — jeśli nie jest już wyświetlana — gdy użytkownik wybierze polecenie Przejdź do w menu aplikacji. Okno dialogowe zawiera formant edycyjny, pola wyboru i przyciski OK i Anuluj. Szablon pola okna dialogowego jest zasobem w pliku wykonywalnego aplikacji i ma identyfikator zasobu DLG_GOTO. Użytkownik wpisuje numer wiersza w formancie edycji i sprawdza, pole wyboru, aby określić, że numer wiersza jest względem bieżącego wiersza. Identyfikatory kontroli są ID_LINE, ID_ABSREL, IDOK i IDCANCEL.

Instrukcje w pierwszej części przykład utworzyć okno niemodalne. Oświadczenia te procedury okna głównego okna aplikacji, tworzenie okna dialogowego podczas procedury okna odbiera wiadomość WM_COMMAND o identyfikator polecenia IDM_GOTO, ale tylko wtedy, gdy globalnej zmiennej hwndGoto nie zawiera już prawidłowym dojściem. Druga część przykładzie jest pętla wiadomości głównym aplikacji. Pętli zawiera funkcję IsDialogMessage do zapewnienia, że użytkownika można użyć interfejsu klawiatury pole dialogowe w tym oknie niemodalny. Trzecia część przykładzie jest procedura pole dialogowe. Procedury pobiera zawartość formantu edycyjnego i pole wyboru, gdy użytkownik wybiera przycisk OK. Procedura niszczy okno dialogowe, gdy użytkownik wybiera przycisk Anuluj.

HWND hwndGoto = NULL;  / / uchwyt okna dialogowego. 
    . 
    . 
 
    Sprawa WM_COMMAND: przełącznik (LOWORD(wParam)) {Sprawa IDM_GOTO: if (!IsWindow(hwndGoto)) {hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE(DLG_GOTO), hwnd, GoToProc (DLGPROC)); 
                    ShowWindow (hwndGoto, SW_SHOW); 
                } 
                break; 
        } zwraca 0 L 

 

W poprzednim sprawozdaniu, CreateDialog nazywa się tylko, jeśli nie hwndGoto nie zawierają uchwyt okna ważne. Gwarantuje to, że aplikacja nie wyświetla dwóch okien dialogowych w tym samym czasie. Do obsługi tej metody kontroli, procedura okno dialogowe musi ustalona hwndGoto wartość null, gdy niszczy okno dialogowe.

Pętla komunikatów do aplikacji składa się z następujących instrukcji:

podczas gdy (GetMessage (amp; msg, NULL, NULL, NULL)) {Jeżeli (!IsWindow(hwndGoto) || !IsDialogMessage (hwndGoto & msg)) {TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    } 
} 

 

Pętla sprawdza prawdziwość dojście do okna dialogowego i tylko wywołuje funkcję IsDialogMessage , jeśli dojście jest prawidłowy. IsDialogMessage tylko przetwarza wiadomość, jeśli należy on do okna dialogowego. W przeciwnym razie zwraca wartość FALSE i pętli wysyła wiadomość do odpowiedniego okna.

Poniższe instrukcje definiują procedurę pole dialogowe:

int iLine;             / / odbiera wiersza numer BOOL fRelative;        / / otrzymuje stan pola wyboru GoToProc BOOL wywołania zwrotnego (HWND hwndDlg, UINT wiadomości, WP&ARAM wParam, FIKCYJNYMI fikcyjnymi) {BOOL fError; 
 
    Przełącznik (wiadomości) {Sprawa WM_INITDIALOG: CheckDlgButton (hwndDlg, ID_ABSREL, fRelative); 
            Zwraca wartość PRAWDA; 
 
        Sprawa WM_COMMAND: przełącznik (LOWORD(wParam)) {Sprawa IDOK: fRelative = IsDlgButtonChecked (hwndDlg, ID_ABSREL); 
                    iLine = GetDlgItemInt (hwndDlg, ID_LINE, amp; fError, fRelative); 
                    Jeżeli (fError) {MessageBox (hwndDlg, SZINVALIDNUMBER, SZGOTOERR, MB_OK); 
                        SendDlgItemMessage (hwndDlg, ID_LINE, EM_SETSEL, 0, L-1); 
                    } else / / Notify okna właściciela do przewozu / / wykonanie polecenia. 
 
                    Zwraca wartość PRAWDA; 
 
                Sprawa IDCANCEL: DestroyWindow(hwndDlg); 
                    hwndGoto = NULL; 
                    Zwraca wartość PRAWDA; 
            }} Zwraca FALSE; 
} 

 

W poprzednim sprawozdaniu procedury przetwarza wiadomości WM_INITDIALOG i WM_COMMAND . Podczas WM_INITDIALOG przetwarzania procedura inicjuje pole wyboru przekazując bieżącą wartość zmiennej globalnej fRelative do CheckDlgButton. Procedura następnie zwraca wartość PRAWDA, aby nakazać systemowi ustawić fokus domyślne.

Podczas przetwarzania WM_COMMAND, procedury zamyka okno dialogowe tylko wtedy, gdy użytkownik wybiera przycisk Anuluj — oznacza to, że przycisk o identyfikator IDCANCEL. Procedura musi wywołać DestroyWindow aby zamknąć okno dialogowe niemodalny. Należy zauważyć, że procedura ustawia również Zmienna hwndGoto null do zapewnienia, że inne sprawozdania, które zależą od tej zmiennej działają poprawnie.

Jeśli użytkownik zdecyduje się na przycisku OK, procedury pobiera aktualny stan pola wyboru i przypisuje go do zmiennej fRelative . Następnie użyto zmiennej do pobierania numer wiersza z formantu edycyjnego. GetDlgItemInt tłumaczy tekst w formancie edycyjnym na liczbę całkowitą. Wartość fRelative określa, czy funkcja zinterpretuje liczbę jako wartość podpisem lub bez. Jeżeli edycja tekstu formantu nie jest prawidłową liczbę, GetDlgItemInt ustawia wartość zmiennej fError celu niezerowych. Procedury kontroli tej wartości do określenia, czy ma być wyświetlany komunikat o błędzie lub wykonać polecenie. W przypadku wystąpienia błędu procedury pole dialogowe wysyła wiadomość do formantu edycyjnego, kierując go zaznacz tekst w formancie, dzięki czemu użytkownik może łatwo zastąpić go. Jeśli GetDlgItemInt nie zwraca błąd, procedury można przeprowadzić żądanego polecenia, sam lub wysłać wiadomość do okna właściciela, kierując się wykonać polecenie.

Index