Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

Özet

Windows tabanlı uygulamalar genellikle kullanıcılardan bilgi istemek için veri girişi iletişim kutularını görüntüler. Bu iletişim kutularında, tamam ve Iptal etiketli birkaç düzenleme denetimi ve iki komut (itme) düğmesi bulunabilir. Veri girişi iletişim kutusu örneği, sosyal güvenlik numarası, adres, kimlik (KIMLIK) numarası, tarih/saat vb. gibi kişisel bilgileri isteyen bir örnektir. Bu öğelerin her biri bir düzenleme denetimine girilir. Varsayılan olarak, sekme tuşuna basarak Düzenle denetimleri arasında geçiş yapmak için SEKME tuşu kullanılır. Bununla birlikte, yaygın bir kullanıcı arabirimi olarak, Ayrıca, düzenleme denetimleri arasında ilerlemek için ENTER (RETURN) tuşunu da kullanabilirsiniz (örneğin, Kullanıcı bilgi parçasına girdiğinde ENTER tuşuna basıldığında, odağı bir sonraki alana taşır). Düzenleme denetimleri arasında gezinmek için ENTER tuşunu kullanmanın birkaç yolu vardır. Bir yöntem, WM_COMMAND ve düzenleme denetimleri ve düğmeleri için iletişim kutusunda kendisiyle birlikte gelen bildirim mesajlarında kullanmak. Başka bir yöntem de düzenleme denetimlerini subclassing. Üçüncü olarak App Studio ve sınıf sihirbazını kullanarak yeni bir iletişim kutusu üye işlevi oluşturuluyor.

Ek Bilgi

Yöntem ı: (WM_COMMAND)

Bu yöntem, iletişim kutularının (Iletişim Yöneticisi) aşağıdaki davranışına ve Windows 'taki odaklanma işlemesine dayanır. bir iletişim kutusu veya denetimlerinden birinin giriş odaklı sonucu varsa, ENTER tuşuna basıldığında Windows 'un bir WM_COMMAND iletisinin varsayılan komut düğmesinin KIMLIĞINE ayarlanmış şekilde ayarlanmış olması sağlanır. İletişim kutusunun varsayılan komut düğmesi yoksa, deyimidir Dıtem parametresi varsayılan olarak ıDOK olarak ayarlanır. Bir uygulama, ifade Dıtem ile birlikte WM_COMMAND iletiyi aldığında, ENTER tuşuna basılmadan önce odağın odağı olan denetimle birlikte kalır. Bu noktada GetFocus () çağrısı, ENTER tuşu basılmadan önce odağa sahip olan denetimin tutamacını döndürür. Uygulama bu denetim tutamacını denetleyebilir ve iletişim kutusunda herhangi bir düzenleme denetimine ait olup olmadığını belirler. Öyleyse, Kullanıcı düzenleme denetimlerinden birine veri girmişti ve bunu yaptıktan sonra ENTER tuşuna basıyorum. Bu noktada, uygulama odağı sonraki denetime taşımak için WM_NEXTDLGCTL iletiyi iletişim kutusuna gönderebilir. Ancak, bu odağın komut düğmelerinden biriyle (Iptal veya Tamam) yer alıyorsa, GetFocus () işlevi, bu noktada iletişim kutusunu kapatabileceğiniz bir düğme tutamacı döndürür. Bu mantığın sahte kodu, uygulamanın iletişim kutusu yordamında aşağıdakine benzer:

     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 ;

Yöntem II

Bu yöntem, iletişim kutusunda düzenleme denetimini subclassing/bağlılığı içerir. Düzenleme denetimleri alt sınıflara veya süper sınıflara ulaştıktan sonra, tüm klavye girişi, iletişim kutusunun varsayılan komut düğmesi olup olmamasına bakmaksızın, şu anda giriş odaklı olan düzenleme denetiminin alt sınıf/üst sınıf yordamına gönderilir. Uygulama anahtarı aşağı (veya char) mesajları yakalayabilir, ENTER tuşuna bakabilir ve işleme uygun şekilde yapılır. Aşağıda, ENTER tuşuna görünen örnek alt sınıf yordamı verilmiştir:

   //*-------------------------------------------------------------------   //| 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 */ 

Yöntem 3

Bu yöntem, App Studio ve Classıntertıon Sihirbazı 'nı kullanarak yeni bir iletişim kutusu üye işlevi oluşturur. Bu yöntem, kullanıcının ENTER tuşuna basmasını ve odağın sonraki düzenleme denetimine ilerlemesi için izin verir. Şu anda iletişim kutusundaki son düzenleme denetimindeyse, odaklanma ilk düzenleme denetimine ilerler. Öncelikle, uygulama Studio 'Yu kullanarak iletişim kutusunun Tamam düğmesinin KIMLIĞINI değiştirin. App Studio 'nun varsayılan davranışı, OK düğmesini ıDOK. Tamam düğmesinin KIMLIĞI IDC_OK gibi başka bir değere değiştirilmelidir. Ayrıca, Tamam düğmesinin özelliklerini değiştirerek varsayılan bir basma düğmesi olmamalıdır. Ardından, yeni bir iletişim kutusu üyesi oluşturmak için Classınterwizard 'ı kullanın. Yeni member 'ı, her Bu işlev, IDC_OK denetiminden BN_CLICKED iletisine bağlı olmalıdır. Bu yapıldıktan sonra, Mesolkedok işlevinin gövdesini yazabilirsiniz. Bir sınıfın Doğum-Tamam işlevi dahil olmak üzere, normalde, bir kodu, yeni bir yeni İletişim kutusunun üstbilgi dosyasına aşağıdaki prototipi ekleyin:

   protected:      virtual void OnOK();

İletişim kutusuna bir ek Tamam işlevi ekleyin ve kod aşağıdadır:

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

Daha fazla yardıma mı ihtiyacınız var?

Daha fazla seçenek mi istiyorsunuz?

Abonelik avantajlarını keşfedin, eğitim kurslarına göz atın, cihazınızın güvenliğini nasıl sağlayacağınızı öğrenin ve daha fazlasını yapın.

Topluluklar, soru sormanıza ve soruları yanıtlamanıza, geri bildirimde bulunmanıza ve zengin bilgiye sahip uzmanlardan bilgi almanıza yardımcı olur.

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?
Gönder’e bastığınızda, geri bildiriminiz Microsoft ürün ve hizmetlerini geliştirmek için kullanılır. BT yöneticiniz bu verileri toplayabilecek. Gizlilik Bildirimi.

Geri bildiriminiz için teşekkürler!

×