Kā izmantot taustiņu ENTER no rediģēšanas vadīklām dialoglodziņā

Kopsavilkums

Windows lietojumprogrammas bieži rāda datu ievades dialoglodziņus, lai pieprasītu informāciju no lietotājiem. Šajos dialoglodziņos var būt vairākas rediģēšanas vadīklas un divas komandu (push) pogas ar atzīmi labi un atcelt. Dialoglodziņš datu ievadnes piemērs ir tāds, kas no lietotājiem pieprasa personas informāciju, piemēram, sociālās apdrošināšanas numuru, adresi, identifikācijas (ID) numuru, datumu/laiku utt. Katrs no šiem vienumiem tiek ievadīts rediģēšanas vadīklā. Pēc noklusējuma TABULĒŠANAS taustiņš tiek lietots dialoglodziņā, lai pārslēgtu fokusu starp rediģēšanas vadīklām. Tomēr kā kopējs lietotāja interfeiss var izmantot arī taustiņu ENTER (RETURN), lai pārvietotos starp rediģēšanas vadīklām (piemēram, pēc tam, kad lietotājs ievada informācijas daļu, nospiežot taustiņu ENTER, fokuss tiek pārvietots uz nākamo lauku). Ir vairāki veidi, kā iespējot taustiņa ENTER izmantošanu, lai pārvietotos starp rediģēšanas vadīklām. Viena metode ir izmantot WM_COMMAND un paziņojumu ziņojumus, kas ir pieejami dialoglodziņā vadīklu un pogu rediģēšanai. Cita metode ietver rediģēšanas vadīklu apakšklasi. Trešais ir saistīts ar programmu studijas un mācību priekšmeta vedņa lietošanu un jaunas dialoglodziņa dalībnieka funkciju izveidi.

Papildinformācija

I metode: (WM_COMMAND)

Šī metode ir balstīta uz tālāk norādītajām dialoglodziņu darbībām (dialogu pārvaldnieks) un fokusa vadību operētājsistēmā Windows. Ja dialoglodziņā vai kādā no tā vadīklām pašlaik ir ievades fokuss, pēc tam nospiežot taustiņu ENTER, sistēma Windows sūta WM_COMMAND ziņojumu ar idItem (wParam) parametru kopu noklusējuma komandpogas ID. Ja dialoglodziņam nav noklusējuma komandpogas, idItem parametra iestatījums ir IDOK pēc noklusējuma. Ja lietojumprogramma saņem WM_COMMAND ziņojumu ar idItem, kas iestatīts uz noklusējuma komandpogas ID, fokuss paliek ar vadīklu, kas bija fokusa pirms taustiņa ENTER nospiešanas. Zvanīšanas GetFocus () Šajā brīdī atgriež vadīklas turi, kas bija fokuss pirms taustiņa ENTER nospiešanas. Lietojumprogramma var pārbaudīt šo vadīklas turi un noteikt, vai tā pieder kādai no dialoglodziņa rediģēšanas vadīklām. Ja tā ir, pēc tam lietotājs ievada datus kādā no rediģēšanas vadīklām un pēc tam nospiediet taustiņu ENTER. Šajā brīdī lietojumprogramma var nosūtīt WM_NEXTDLGCTL ziņojumu dialoglodziņā, lai pārvietotu fokusu uz nākamo vadīklu. Tomēr, ja fokuss bija ar vienu no komandpogas (atcelt vai labi), pēc tam GetFocus () atgriež pogas vadīklas turi, kurā punkts var noraidīt dialoglodziņu. Šīs loģikas pseido kods izskatās šādi lietojumprogrammas dialoglodziņā procedūrā:

     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 metode

Šī metode ir saistīta ar apakšklasi/reklasi rediģēšanas vadīklu dialoglodziņā. Pēc tam, kad rediģēšanas vadīklas ir apakšklase vai pārstrādātas, visa tastatūras ievade tiek nosūtīta, izmantojot rediģēšanas vadīklu, kurai pašlaik ir ievades fokuss, neatkarīgi no tā, vai dialoglodziņam ir noklusējuma komandpoga. Lietojumprogramma var slazdošanas atslēgu (vai CHAR) ziņojumus, meklējiet taustiņu ENTER un atbilstoši veiciet apstrādi. Tālāk ir aprakstīts, kā izmantot apakšklases procedūru, kas meklē taustiņu 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. metode

Šī metode ir saistīta ar lietojumprogrammu studijām un ClassWizard un jaunas dialoglodziņa dalībnieka funkcijas izveidi. Šī metode ļaus lietotājam nospiest taustiņu ENTER, lai fokuss pārietu uz nākamo rediģēšanas vadīklu. Ja fokuss pašlaik ir pēdējā rediģēšanas vadīklā dialoglodziņā, fokuss tiek pārvietots uz pirmo rediģēšanas vadīklu. Vispirms izmantojiet programmu studija, lai mainītu dialoglodziņa pogas Labi ID. Programmas studijas noklusējuma darbība ir piešķirt pogu Labi ID IDOK. Pogas Labi ID ir jāmaina uz citu vērtību, piemēram, IDC_OK. Arī mainiet pogas Labi rekvizītus tā, lai tā nebūtu noklusējuma Pushbutton. Pēc tam izmantojiet ClassWizard, lai izveidotu jaunu dialoglodziņa dalībnieku funciton. Piešķiriet nosaukumu jaunajam dalībniekam, piemēram, OnClickedOK. Šī funkcija ir jāsaista ar BN_CLICKED ziņojumu no IDC_OK vadīklas. Kad tas ir paveikts, ierakstiet funkcijas OnClickedOK pamattekstu. Jums ir jāievada kods, ko parasti ievietojat funkcijā OnOK funkcija New OnClickedOK, ieskaitot klases OnOK funkciju. Pievienojiet tālāk norādīto prototipu dialoglodziņa galvenes failam.

   protected:      virtual void OnOK();

Pievienojiet OnOK funkciju dialoglodziņā, un kods ir parādīts tālāk.

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

Vai nepieciešama papildu palīdzība?

Paplašiniet savas prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Microsoft Insider

Vai šī informācija bija noderīga?

Paldies par jūsu atsauksmēm!

Paldies par atsauksmēm! Šķiet, ka jums varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta speciālistiem.

×