Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

Súhrn

Aplikácie systému Windows často zobrazujú dialógové okná na zadávanie údajov na vyžiadanie informácií od používateľov. Tieto dialógové okná môžu obsahovať viacero ovládacích prvkov úprav a dvoch tlačidiel Command (push) s označením OK a CANCEL. Príklad dialógového okna zadávania údajov je ten, ktorý požiada o osobné údaje, napríklad číslo sociálneho zabezpečenia, adresu, identifikáciu (ID), dátum a èas, a tak ďalej, od používateľov. Každá z týchto položiek je zadaná do ovládacieho prvku na úpravy. Na základe predvoleného nastavenia sa v dialógovom okne použije kláves TAB na zmenu zamerania medzi ovládacími prvkami úprav. Ako bežné používateľské rozhranie by sa však dalo použiť aj kláves ENTER (RETURN) na presun medzi ovládacími prvkami úprav (napríklad potom, ako používateľ zadá informácie, stlačením klávesu ENTER presuniete zameranie na ďalšie pole). Existuje niekoľko spôsobov, ako povoliť použitie klávesu ENTER na presun medzi ovládacími prvkami úprav. Jednou z metód je využiť WM_COMMAND a oznámenia, ktoré sú k dispozícii v dialógovom okne na úpravu ovládacích prvkov a tlačidiel. Ďalšou metódou je podtrieda ovládacích prvkov úprav. Tretina zahŕňa používanie aplikácie Studio a sprievodcu triedami a vytvorenie novej funkcie dialógových okien.

Ďalšie informácie

Metóda I: (WM_COMMAND)

Táto metóda je založená na nasledujúcom správaní dialógových okien (Správca dialógových okien) a zameranie ovládania vo Windowse. Ak dialógové okno alebo niektorý z jeho ovládacích prvkov má aktuálne zameranie na vstup, potom stlačením klávesu ENTER spôsobí, že Windows odošle WM_COMMAND správu s parametrom idItem (wParam), ktorý je nastavený na identifikáciu predvoleného tlačidla príkazu. Ak dialógové okno nemá predvolené tlačidlo príkazu, parameter idItem je predvolene nastavený na možnosť IDOK. Keď aplikácia prijme WM_COMMAND správu s idItem, ktorá je nastavená na identifikáciu predvoleného tlačidla príkazu, zameranie zostane s ovládacím prvkom, ktorý mal zameranie pred stlačením klávesu ENTER. Volanie GetFocus () v tomto bode vráti rukoväť ovládacieho prvku, ktorý sa zameral pred stlačením klávesu ENTER. Aplikácia môže kontrolovať túto ovládaciu rukoväť a zistiť, či patrí do niektorého z ovládacích prvkov úprav v dialógovom okne. Ak áno, používateľ zadával údaje do niektorého z ovládacích prvkov úprav a po stlačení klávesu ENTER. V tomto bode môže aplikácia Odoslať WM_NEXTDLGCTL správu do dialógového okna a presunúť zameranie na ďalší ovládací prvok. Ak je však zameranie s jedným z tlačidiel príkazov (zrušiť alebo OK), potom GetFocus () vráti ovládací prvok tlačidla, v ktorom je možné dialógové okno zrušiť. Pseudo kód tejto logiky sa podobá nasledujúcemu postupu v dialógovom okne aplikácie:

     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 ;

Metóda II

Táto metóda zahŕňa podclassing/pretriedenie ovládací prvok upraviť v dialógovom okne. Po tom, ako sa ovládacie prvky úprav podtriedia alebo pretriedia, všetky vstupy klávesnice sa odošlú do postupu podtriedy alebo nadradenia ovládacieho prvku upraviť, ktorý má v súčasnosti zaostrenie vstupu, bez ohľadu na to, či dialógové okno obsahuje predvolené tlačidlo príkazu. Aplikácia môže presahovať správy klávesu Down (alebo char), vyhľadať kláves ENTER a spracovať ho zodpovedajúcim spôsobom. Nasleduje vzorový postup podtried, ktorý vyhľadá kláves 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 */ 

Metóda 3

Táto metóda zahŕňa používanie aplikácie Studio a ClassWizard a vytvorenie novej funkcie dialógového okna. Táto metóda umožní používateľovi stlačiť kláves ENTER a prejsť na ďalší ovládací prvok úprav. Ak sa zameranie v súčasnosti nachádza v dialógovom okne posledný ovládací prvok úprav, zameranie bude postúpiť na prvý ovládací prvok úprav. Najprv pomocou aplikácie Studio zmeňte ID tlačidla OK v dialógovom okne. Predvoleným správaním aplikácie Studio je poskytnúť tlačidlo OK ID IDOK. ID tlačidla OK by sa malo zmeniť na inú hodnotu, napríklad IDC_OK. Môžete tiež zmeniť vlastnosti tlačidla OK tak, aby nebol predvoleným tlačidlom. Potom pomocou ClassWizard vytvorte nové dialógové okno člen funciton. Pomenujte novú funkciu člena, napríklad OnClickedOK. Táto funkcia by mala byť viazaná na správu BN_CLICKED z ovládacieho prvku IDC_OK. Po dokončení sa napíše telo funkcie OnClickedOK. Mali by ste vložiť kód, ktorý by ste normálne vložili do funkcie OnOK do novej funkcie OnClickedOK vrátane funkcie OnOK. Do záhlavia súboru v dialógovom okne pridajte nasledujúci prototyp:

   protected:      virtual void OnOK();

Pridanie funkcie OnOK do dialógového okna a kódu je znázornené nižšie:

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

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×