Prijavite se pomoću Microsofta
Prijavi se ili izradi račun.
Zdravo,
Odaberite drugi račun.
Imate više računa
Odaberite račun putem kojeg se želite prijaviti.

Sažetak

Aplikacije utemeljene na sustavu Windows često prikazuju dijaloške okvire za unos podataka da bi zatražili informacije od korisnika. U tim se dijaloškim okvirima mogu nalaziti nekoliko gumba za uređivanje i dvije naredbe (push), označeni u redu i otkazivanje. Primjer dijaloškog okvira Unos podataka je onaj koji zahtjeva osobne podatke, kao što su broj socijalnog osiguranja, adresa, identifikacijski broj (ID), Datum/vrijeme, i tako dalje, od korisnika. Svaki od tih stavki unosi se u kontrolu uređivanja. Prema zadanim postavkama tipka TABULATORA koristi se u dijaloškom okviru da bi se fokus usmjerio na kontrole za uređivanje. No kao zajedničko korisničko sučelje moguće je koristiti i tipku ENTER (RETURN) da biste se pomicali između kontrola uređivanja (primjerice, nakon što korisnik unese neki podatak, pritiskom na ENTER premješta se fokus na sljedeće polje). Postoji nekoliko načina na koje možete omogućiti korištenje tipke ENTER za kretanje između kontrola uređivanja. Jedan je od metoda korištenje WM_COMMAND i obavijesti o porukama koje se isporučuju u dijaloškom okviru za uređivanje kontrola i gumba. Druga metoda obuhvaća Subclassing kontrole za uređivanje. Treći uključuje korištenje aplikacije studio i čarobnjak za satove i stvaranje nove funkcije Member dijaloški okvir.

Dodatne informacije

Metodije I: (WM_COMMAND)

Ova se metoda temelji na sljedećim ponašanjem dijaloških okvira (Upravitelj dijaloga) i rukovanju naglaskom u sustavu Windows. Ako dijaloški okvir ili jedan od njegovih kontrola trenutno ima žarište za unos, a zatim pritisnite tipku ENTER uzrokuje da Windows pošalje WM_COMMAND poruku s parametrom idItem (wParam) postavljen na ID zadanog naredbenog gumba. Ako dijaloški okvir nema zadani naredbeni gumb, parametar idItem postavljen je na IDOK po zadanom. Kada aplikacija primi WM_COMMAND poruku s idItem postavljenih na ID zadanog naredbenog gumba, fokus ostaje na kontroli koja je imala fokus prije pritiska na tipku ENTER. Pozivanje servisa Getfokus () u ovom trenutku vraća ručicu kontrole koja je imala fokus prije pritiska na tipku ENTER. Aplikacija može provjeriti tu Upravljačku ručicu i utvrditi spada li u neku od kontrola za uređivanje u dijaloškom okviru. Ako se to radi, korisnik je unio podatke u jednu od kontrola za uređivanje, a nakon toga pritisnuli ENTER. U ovom trenutku aplikacija može uputiti WM_NEXTDLGCTL poruku u dijaloški okvir da bi se fokus pomaknuo na sljedeću kontrolu. No ako je fokus bio na jednom od naredbenih gumba (Odustani ili u redu), Getfokus () vraća ručicu za upravljanje gumbom, na kojoj točki možete odbaciti dijaloški okvir. Pseudo kod za ovu logiku nalikuje sljedećem postupku u dijaloškom okviru 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 ;

Metoda II

Ova metoda obuhvaća Subclassing/superclassing kontrole za uređivanje u dijaloškom okviru. Kada se kontrole za uređivanje subklasiraju ili nadkladne, svim unosom tipkovnice šalje se subclass/superclass postupak kontrole uređivanja koja trenutno sadrži fokus unosa, bez obzira na to sadrži li dijaloški okvir Zadani naredbeni gumb. Aplikacija može zarobiti ključ prema dolje (ili Char) poruke, potražiti tipku ENTER i obraditi ga u skladu s tim. Slijedi ogledni postupak podklase koji traži tipku 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 */ 

Treći način

Ova metoda obuhvaća korištenje aplikacije studio i ClassWizard i stvaranje nove funkcije Member dijaloški okvir. Ovim će se postupkom korisniku dopustiti pritisak na tipku ENTER, a fokus će biti unaprijed na sljedeću kontrolu uređivanja. Ako se fokus trenutno nalazi na posljednjoj kontroli uređivanja u dijaloškom okviru, fokus će se prijeći na prvu kontrolu uređivanja. Najprije koristite App Studio da biste promijenili ID gumba u redu u dijaloškom okviru. Zadano ponašanje app studija jest dati gumb u redu ID IDOK. ID gumba u redu mora biti promijenjen u neku drugu vrijednost, kao što je IDC_OK. Promijenite i Svojstva gumba u redu da ne biste imali zadani gumb. Zatim u odjeljku Classčarobnjak stvorite novi član dijaloškog okvira funciton. Imenujte novu funkciju Member u nečem kao što je Itclickeldok. Ova funkcija mora biti vezana uz BN_CLICKED poruku iz kontrole IDC_OK. Kada se to završi, upišite tijelo funkcije Oclickeldok. Kod koji bi se obično stavljajte u funkciju it možete staviti u novu funkciju ipak-dok, uključujući funkciju za tečaj Dodajte sljedeći prototip u datoteku zaglavlja za dijaloški okvir:

   protected:      virtual void OnOK();

U dijaloški okvir dodajte funkciju Inok kao što je prikazano u nastavku:

   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();   }

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na njih, pošaljete povratne informacije i čujete se sa stručnjacima s bogatim znanjem.

Jesu li vam ove informacije bile korisne?

Koliko ste zadovoljni jezičnom kvalitetom?
Što je utjecalo na vaše iskustvo?
Ako pritisnete Pošalji, vaše će se povratne informacije iskoristiti za poboljšanje Microsoftovih proizvoda i usluga. Vaš će IT administrator moći prikupiti te podatke. Izjava o zaštiti privatnosti.

Hvala vam na povratnim informacijama!

×