Prijavite se pomoću Microsoft naloga
Prijavite se ili kreirajte nalog.
Zdravo,
Izaberite drugi nalog.
Imate više naloga
Odaberite nalog pomoću kojeg želite da se prijavite.

Rezime

Aplikacije zasnovane na operativnom sistemu Windows često prikazuju dijaloge sa unosom podataka da bi zatražili informacije od korisnika. Ovi dijalozi mogu da sadrže nekoliko kontrola za uređivanje i dugmad za dve komande (Push), označene kao "u redu" i "Otkaži". Primer dijaloga "unos podataka" je onaj koji zahteva lične informacije, kao što su broj socijalnog osiguranja, adresa, identifikacija (ID) broj, datum/vreme i tako dalje, od korisnika. Svaka od ovih stavki je uneta u kontrolu za uređivanje. Podrazumevano, u dijalogu se koristi tabulator koji će pomeriti fokus između kontrola za uređivanje. Međutim, kao uobičajeni korisnički interfejs, možete da koristite i taster ENTER (vrati) da biste se premeštali između kontrola za uređivanje (na primer, nakon što korisnik unese deo informacija, pritiskom na taster ENTER premešta fokus na sledeće polje). Postoji nekoliko načina za omogućavanje korišćenja tastera ENTER za kretanje između kontrola za uređivanje. Jedan od metoda je korišćenje WM_COMMAND i poruka sa obaveštenjima koje se dobijaju uz njega u dijalogu za uređivanje kontrola i dugmadi. Drugi metod uključuje podklasiranje kontrola za uređivanje. Treća uključuje korišćenje čarobnjaka za aplikacije "studio" i "klasa" i kreiranje nove funkcije člana dijaloga.

Više informacija

Metod I: (WM_COMMAND)

Ovaj metod je zasnovan na sledećem ponašanju dijaloga (upravljaču dijaloga) i rukovanju usmeravanju u operativnom sistemu Windows. ako se u dijalogu ili neka od njegovih kontrola trenutno nalazi fokus u okviru za unos, pritisak na taster ENTER izaziva Windows da pošalje WM_COMMAND poruku sa parametrom idItem (wParam) koji je postavljen na ID podrazumevanog komandnog dugmeta. Ako dijalog nema podrazumevano komandno dugme, parametar idItem je postavljen na vrednost "IDOK". Kada aplikacija primi WM_COMMAND poruku sa idItem skupom na ID podrazumevanog komandnog dugmeta, fokus ostaje sa kontrolom koja je imala fokus pre nego što je taster ENTER pritisnut. Poziv GetFocus () u ovom trenutku vraća regulator kontrole koja je imala fokus pre pritiska tastera ENTER. Aplikacija može da proveri ovaj regulator kontrole i odredi da li pripada nekom od kontrola za uređivanje u dijalogu. Ako je tako, korisnik je UNEO podatke u jednu od kontrola za uređivanje i nakon toga pritisnuo taster ENTER. U ovom trenutku, aplikacija može poslati WM_NEXTDLGCTL poruku u dijalog da bi se fokus premestili na sledeću kontrolu. Međutim, ako je fokus bio sa jednim od komandnih dugmadi ("Otkaži" ili "u redu"), onda se funkcija "GetFocus ()" vraća regulator kontrole dugmeta, pri čemu jedan poen može da odbaci dijalog. Pseudo kôd za ovu logiku podseća na sledeće u proceduri dijaloga aplikacije:

     case WM_COMMAND:     if(wParam=IDOFDEFBUTTON || IDOK) {          // User has hit the ENTER key.          hwndTest = GetFocus() ;          retVal = TesthWnd(hWndTest) ;          //Where retVal is a boolean variable that indicates whether        //the hwndTest is the handle of one of the edit controls.          if(hwndTest) {         //Focus is with an edit control, so do not close the dialog.            //Move focus to the next control in the dialog.         PostMessage(hDlg, WM_NEXTDLGCTL, 0, 0L) ;         return TRUE ;          }          else {            //Focus is with the default button, so close the dialog.            EndDialog(hDlg, TRUE) ;            return FALSE ;          }        }     break ;

Metod II

Ovaj metod uključuje podklasiranje/superklasiranje kontrole "Uređivanje" u dijalogu. Kada se kontrole za uređivanje podklasiraju ili da se sabirate, sav unos na tastaturi šalje se proceduri potklase/superklasa kontrole "Uređivanje" koja trenutno ima fokus, bez obzira na to da li okvir za dijalog ima podrazumevano komandno dugme. Aplikacija može da zasamne poruke ključa (ili Char), potraži taster ENTER i u skladu sa tim izvršite obradu. Sledi procedura uzorka potklasa koja traži taster ENTER:

   //*-------------------------------------------------------------------   //| Title:   //|     SubClassProc   //|   //| Parameters:   //|     hWnd            - Handle to the message's destination window   //|     wMessage        - Message number of the current message   //|     wParam          - Additional info associated with the message   //|     lParam          - Additional info associated with the message   //|   //| Purpose:   //|     This is the window procedure used to subclass the edit control.   //*---------------------------------------------------------------------   long FAR PASCAL SubProc(HWND hWnd, WORD wMessage,WORD wParam,LONG                           lParam)   {       switch (wMessage)        {             case WM_GETDLGCODE:               return (DLGC_WANTALLKEYS |                       CallWindowProc(lpOldProc, hWnd, wMessage,                                      wParam, lParam));             case WM_CHAR:             //Process this message to avoid message beeps.            if ((wParam == VK_RETURN) || (wParam == VK_TAB))              return 0;               else              return (CallWindowProc(lpOldProc, hWnd,                                        wMessage, wParam, lParam));          case WM_KEYDOWN:               if ((wParam == VK_RETURN) || (wParam == VK_TAB)) {                 PostMessage (ghDlg, WM_NEXTDLGCTL, 0, 0L);                 return FALSE;               }            return (CallWindowProc(lpOldProc, hWnd, wMessage,                                      wParam, lParam));            break ;          default:               break;        } /* end switch */ 

3. metod

Ovaj metod uključuje upotrebu aplikacije "studio" i "klasif" i kreiranje nove funkcije člana dijaloga. Ovaj metod će omogućiti korisniku da pritisnu taster ENTER i fokusira fokus na sledeću kontrolu za uređivanje. Ako se fokus trenutno nalazi na poslednjoj kontroli za uređivanje u dijalogu, fokus će biti unapred na prvoj kontroli za uređivanje. Prvo, koristite aplikaciju "studio" da biste promenili ID dugmeta "u redu" za dijalog. Podrazumevano ponašanje aplikacije "studio" je da pruži dugme "u redu" ID IDOK. ID dugmeta "u redu" trebalo bi da bude promenjen u drugu vrednost, kao što je IDC_OK. Osim toga, promenite svojstva dugmeta "u redu" tako da nije podrazumevana pribaddugmeta. Sledeće, koristite čarobnjak za Klasicu da biste kreirali novi dijaloški okvir funciton. Ime novog člana funkcioniše nešto kao OnClickedOK. Ova funkcija bi trebalo da bude povezana sa BN_CLICKED porukom iz kontrole IDC_OK. Kada se ovo završi, napišite telo funkcije OnClickedOK. Trebalo bi da postavite kôd koji biste inače stavili u funkciju OnOK u funkciju nov OnClickedOK, uključujući funkciju klase OnOK. Dodajte sledeći prototip u datoteku zaglavlja za dijalog:

   protected:      virtual void OnOK();

Dodavanje funkcije OnOK u dijalog i kôd je dole pokazano:

   void CMyDialog::OnOK()   {        CWnd* pwndCtrl = GetFocus();        CWnd* pwndCtrlNext = pwndCtrl;        int ctrl_ID = pwndCtrl->GetDlgCtrlID();        switch (ctrl_ID) {            case IDC_EDIT1:                pwndCtrlNext = GetDlgItem(IDC_EDIT2);                break;            case IDC_EDIT2:                pwndCtrlNext = GetDlgItem(IDC_EDIT3);                break;            case IDC_EDIT3:                pwndCtrlNext = GetDlgItem(IDC_EDIT4);                break;            case IDC_EDIT4:                pwndCtrlNext = GetDlgItem(IDC_EDIT1);                break;            case IDOK:                CDialog::OnOK();                break;            default:                break;        }        pwndCtrlNext->SetFocus();   }

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na pitanja, dajete povratne informacije i čujete mišljenje od stručnjaka sa bogatim znanjem.

Da li su vam ove informacije koristile?

Koliko ste zadovoljni kvalitetom jezika?
Šta je uticalo na vaše iskustvo?
Kada kliknete na dugme Prosledi“, vaše povratne informacije će se koristiti za poboljšanje Microsoft proizvoda i usluga. Vaš IT administrator će moći da prikupi ove podatke. Izjava o privatnosti.

Hvala vam na povratnim informacijama!

×