Özel iletişim kutuları

Bir uygulama, özel iletişim kutuları önceden tanımlanmış iletişim kutusunda sınıf yerine iletişim kutularında bir uygulama tanımlı pencere sınıfını kullanarak oluşturabilirsiniz. Uygulamalar genellikle ne zaman ana pencere iletişim kutusudur, ama aynı zamanda kalıcı ve kalıcı olmayan iletişim kutuları için standart örtüşen pencereleri olan uygulamalar oluşturmak için bu yöntemi kullanın.

Uygulama tanımlı pencere sınıfı iletişim kutusu yordama göndermeden önce iletişim kutusu ve işlem iletileri için bir pencere yordamı tanımlamak uygulama sağlar. Bu da bir sınıf simgesi, bir sınıfın arka fırça ve bir sınıf menüsü iletişim kutusu tanımla uygulama sağlar. Uygulama pencere sınıfı bir iletişim kutusu oluşturma girişiminde bulunmadan önce kaydetmeniz gerekir ve iletişim kutusunda şablon atom değeri ya da pencere sınıf adı sağlamalısınız.

Birçok uygulama, ilk önceden tanımlanmış iletişim kutusunda sınıf sınıf bilgileri alınıyor ve bir wndclass yapısı bilgilerle doldurur GetClassInfo işlevine geçen yeni bir iletişim kutusunda sınıf oluşturun. Uygulama yapısı, sınıf adı, fırça ve simgesi gibi tek tek üyelere değiştirir sonra yeni bir sınıf RegisterClass işlevini kullanarak kaydeder. wndclass yapısını kendi başına bir uygulama doldurur, cbWndExtra üye olan ekstra bayt, sistem için iletişim kutularını gerektiren DLGWINDOWEXTRA için ayarlamalısınız. Bir uygulama için iletişim kutularını da ekstra byte kullanıyorsa, sistem tarafından gerekli ekstra byte ötesinde olması gerekir.

Pencere yordamı özel iletişim kutusu başka bir pencere yordamı aynı parametreleri ve gereksinimleri vardır. Diğer pencere yordamları, ancak pencere yordamı için bu iletişim kutusunu DefWindowProc işlevini yerine DefDlgProc işlevini değil işleme iletileri için çağırmalıdır. DefDlgProc aynı varsayılan ileti işleme iletişim kutusunu yordam çağırma içeren önceden tanımlanmış iletişim kutusu penceresinin yordam gerçekleştirir.

Uygulama penceresinin yordam önceden tanımlanmış iletişim kutusunun sınıflara göre özel iletişim kutuları da oluşturabilirsiniz. SetWindowLong işlevi bir uygulama belirli bir pencere pencere yordamı adresini sağlar. Uygulama Ayrıca SetClassLong işlevini kullanarak alt sınıfına deneyebilir, ancak yapıyor yani tüm iletişim kutularını sistemde, sadece bu uygulamaya ait etkiler.

Bazen özel iletişim kutuları oluşturmak uygulamaları, iletişim kutuları için için bir alternatif klavye arabirimi sağlar. Kalıcı olmayan iletişim kutuları için bu uygulama IsDialogMessage işlevini çağırmaz ve yerine tüm klavye girişi özel pencere yordamda işlemleri anlamına gelebilir. Bu gibi durumlarda uygulamanın giriş odaklı bir denetimden diğerine taşımak için gereken kodu en aza indirmek için wm_nextdlgctl mesaj kullanabilirsiniz. DefDlgProciçin geçirilen bu ileti, Giriş odağı belirli bir denetime taşır ve bir otomatik radyo düğmesi varsayılan düğme kenarlığı taşıma veya gibi denetimlerinin görünümünü güncelleştirir.