Logige sisse Microsofti kontoga
Logige sisse või looge konto.
Tere!
Valige mõni muu konto.
Teil on mitu kontot
Valige konto, millega soovite sisse logida.

Kokkuvõte

Windowsi-põhistes rakendustes kuvatakse sageli andmete sisestamise dialoogiboksid, et küsida kasutajatelt teavet. Need dialoogiboksid võivad sisaldada mitmeid redigeerimise juhtelemente ja kahe käsu (push) nuppe, sildiga OK ja Loobu. Dialoogiboksi "andmesisestaja" näide on selline, mis nõuab kasutajatelt isiklikke andmeid (nt sotsiaalkindlustuse numbrit, aadressi, ID-d, kuupäeva/kellaaja jne). Kõik need üksused sisestatakse redigeerimise juhtelementi. Vaikimisi kasutatakse dialoogiboksis tabeldusklahvi (TAB), et liikuda fookuse redigeerimise juhtelementide vahel. Levinud kasutajaliidesega võiks siiski kasutada ka sisestusklahvi (ENTER), et liikuda juhtelementide redigeerimise vahel (nt pärast seda, kui kasutaja sisestab teabe, vajutades sisestusklahvi (ENTER) liigub fookus järgmisele väljale). Sisestusklahvi (ENTER) kasutamise lubamiseks juhtelementide redigeerimise vahel on mitu võimalust. Ühe meetodi abil saate kasutada WM_COMMAND ja teatisega kaasas olevaid teateid juhtelementide ja nuppude redigeerimise dialoogiboksis. Teine meetod hõlmab redigeerimise juhtelementide alaklassi. Kolmas hõlmab rakenduse Studio ja klassi viisardi kasutamist ning uue dialoogiboksi liikme funktsiooni loomist.

Lisateave

Meetod I: (WM_COMMAND)

See meetod põhineb järgmistel dialoogiboksidel (Dialog Manager) ja fookuse käsitlemisel Windowsis. Kui dialoogiboks või mõni selle juhtelement on praegu sisendi fookuses, siis vajutage sisestusklahvi (ENTER), et Windows saaks saata WM_COMMAND sõnumi, mille idItem (wParam) parameeter on seatud vaike-nupu ID-ga. Kui dialoogiboksis pole käsku vaike, on parameeter idItem seatud vaikimisi IDOK. Kui rakendus saab WM_COMMAND sõnumi, mille idItem on seatud vaike-käsunupu ID-ga, jääb fookus juhtelementi, mis oli fookuses enne sisestusklahvi (ENTER) vajutamist. Kõne GetFocus () sellel hetkel annab tulemiks enne sisestusklahvi (ENTER) vajutamist fookuses oleva juhtelementi pideme. Rakendus saab kontrollida selle juhtelemendi pidet ja määrata, kas see kuulub dialoogiboksi Redigeeri juhtelementidele. Kui see on olemas, sisestas kasutaja andmed ühte redigeerimise juhtelementi ja seejärel vajutas sisestusklahvi (ENTER). Praegusel hetkel saab rakendus saata WM_NEXTDLGCTL sõnumi dialoogiboksi, et viia fookus järgmisele juhtelementi. Kui fookus oli siiski ühe nupuga (Tühista või OK), siis GetFocus () annab tulemiks nupu reguleerimise pideme, mille korral saab dialoogiboksi tagasi lükata. Selle loogika pseudo-kood sarnaneb rakenduse dialoogiboksi menetluses järgmisega:

     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 ;

II meetod

See meetod hõlmab dialoogiboksi Redigeeri juhtelementi superclassing. Kui redigeerimise juhtelemendid on liigitatud või superclassed, saadetakse kogu klaviatuuril fookuse redigeerimise juhtelementi alamklassi/superclass protseduur, sõltumata sellest, kas dialoogiboks on vaike-nupp. Rakendus saab lukustada võtmete (või char) sõnumid, otsida sisestusklahvi (ENTER) ja töödelda vastavalt. Järgmine on proovi alamklassi protseduur, mis otsib sisestusklahvi (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 */ 

Meetod 3

See meetod hõlmab rakenduse Studio ja ClassWizard kasutamist ning uue dialoogiboksi liikme funktsiooni loomist. See meetod võimaldab kasutajal vajutada sisestusklahvi (ENTER) ja keskenduda järgmisele käsule Redigeeri juhtelementi. Kui fookus on praegu dialoogiboksis viimase redigeerimise juhtelement, liigub fookus esimese redigeerimise juhtelementi. Esmalt kasutage dialoogiboksi nupu OK ID muutmiseks rakendust app Studio. Rakenduse Studio vaikekäitumise korral on IDOK ID nupp OK. Nupu "OK" ID tuleks muuta mõneks muuks väärtuseks (nt IDC_OK). Samuti muutke nupu OK atribuudid nii, et see poleks vaike-Pushbutton. Järgmiseks kasutage uue dialoogiboksi liikme funciton loomiseks ClassWizard. Nimetage uus liige funktsioonile midagi OnClickedOK. See funktsioon peaks olema seotud BN_CLICKED sõnumiga IDC_OK juhtelementi. Kui see on tehtud, kirjutage funktsioon OnClickedOK. Peate panema koodi, mida tavaliselt OnOK funktsioonile uus OnClickedOK, sh klassi OnOK funktsioon. Lisage dialoogiboksi päisereale järgmine prototüüp.

   protected:      virtual void OnOK();

OnOK funktsiooni lisamine dialoogiboksi ja kood on näidatud allpool.

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

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.

Kas sellest teabest oli abi?

Kui rahul te keelekvaliteediga olete?
Mis mõjutas teie hinnangut?
Kui klõpsate nuppu Edasta, kasutatakse teie tagasisidet Microsofti toodete ja teenuste täiustamiseks. IT-administraator saab neid andmeid koguda. Privaatsusavaldus.

Täname tagasiside eest!

×