Dinamik Düzen
Visual Studio 2015'teki MFC ile kullanıcının yeniden boyutlandırabileceği iletişim kutuları oluşturabilir ve düzenin boyut değişikliğine nasıl ayarlandığını denetleyebilirsiniz. Örneğin, iletişim kutusunun alt kısmına, her zaman altta kalmaları için alt kenara düğmeler ekleyebilirsiniz. Kullanıcı iletişim kutusunu genişlettiğinde, genişletmek için liste kutuları, düzenleme kutuları ve metin alanları gibi belirli denetimleri de ayarlayabilirsiniz.
MFC iletişim kutusu için dinamik düzen ayarlarını belirtme
Kullanıcı bir iletişim kutusunu yeniden boyutlandırdığında, iletişim kutusundaki denetimler X ve Y yönlerini yeniden boyutlandırabilir veya taşıyabilir. Kullanıcı bir iletişim kutusunu yeniden boyutlandırdığında denetimin boyutundaki veya konumundaki değişiklik dinamik düzen olarak adlandırılır. Örneğin, yeniden boyutlandırılmadan önce bir iletişim kutusu aşağıda verilmiştir:
Yeniden boyutlandırıldıktan sonra, liste kutusu alanı daha fazla öğe gösterecek şekilde artırılır ve düğmeler sağ alt köşeyle birlikte taşınır:
IDE'deki Kaynak Düzenleyicisi'nde her denetimin ayrıntılarını belirterek dinamik düzeni denetleyebilirsiniz veya bunu belirli bir denetimin CMFCDynamicLayout
nesnesine erişip özellikleri ayarlayarak program aracılığıyla yapabilirsiniz.
Kaynak düzenleyicisinde dinamik düzen özelliklerini ayarlama
Kaynak düzenleyicisini kullanarak herhangi bir kod yazmak zorunda kalmadan bir iletişim kutusu için dinamik düzen davranışını ayarlayabilirsiniz.
Kaynak düzenleyicisinde dinamik düzen özelliklerini ayarlamak için
MFC projesi açıkken, iletişim kutusu düzenleyicisinde çalışmak istediğiniz iletişim kutusunu açın.
Bir denetim seçin ve Özellikler penceresinde (Sınıf Görünümü'nde) dinamik düzen özelliklerini ayarlayın. Özellikler penceresindeki Dinamik Düzen bölümü, Taşıma Türü, Boyutlandırma Türü özelliklerini ve bu özellikler için seçilen değerlere bağlı olarak, ne kadar denetimin taşındığını veya boyutunu değiştirdiğini tanımlayan belirli özellikleri içerir. Taşıma Türü , iletişim kutusunun boyutu değiştikçe denetimin nasıl taşındığını belirler; Boyutlandırma Türü , iletişim kutusunun boyutu değiştikçe denetimin nasıl yeniden boyutlandırıldığını belirler. Dinamik olarak değiştirmek istediğiniz boyutlara bağlı olarak Taşıma Türü ve Boyutlandırma Türü Yatay, Dikey, Her İkisi veya Hiçbiri olabilir. Yatay, X boyutudur; Dikey, Y yönüdür.
Tamam veya İptal düğmelerinin yaygın olduğu gibi, düğme gibi bir denetimin sabit boyutta olmasını ve sağ altta yerinde kalmasını istiyorsanız, Boyutlandırma Türü'nü Yok olarak ayarlayın ve Taşıma Türü'nü Her İkisi olarak ayarlayın. Taşıma Türü altındaki Hareketli X ve Hareketli Y değerleri için, denetimin sağ alt köşeden sabit bir mesafede kalmasına neden olacak şekilde %100 ayarlayın.
İletişim kutusu genişledikçe genişletmek istediğiniz bir denetiminiz de olduğunu varsayalım. Genellikle, bir kullanıcı metin alanının boyutunu artırmak için çok satırlı bir düzenleme kutusunu genişletmek için bir iletişim kutusunu genişletebilir veya daha fazla veri görmek için bir liste denetimini genişletebilir. Bu durumda, Boyutlandırma Türü'nü Her İkisi olarak ayarlayın ve Taşıma Türü'nü yok olarak ayarlayın. Ardından, Boyutlandırma X ve Boyutlandırma Y değerlerini 100 olarak ayarlayın.
Denetimleriniz için anlamlı olabilecek diğer değerlerle denemeler yapın. Tek satırlık metin kutusu içeren bir iletişim kutusunda Boyutlandırma Türü yalnızca Yatay olarak ayarlanmış olabilir, örneğin.
Dinamik düzen özelliklerini program aracılığıyla ayarlama
Önceki yordam, bir iletişim kutusunun dinamik düzen özelliklerini tasarım zamanında belirtmek için kullanışlıdır, ancak çalışma zamanında dinamik düzeni denetlemek istiyorsanız, dinamik düzen özelliklerini program aracılığıyla ayarlayabilirsiniz.
Dinamik düzen özelliklerini program aracılığıyla ayarlamak için
İletişim kutusu sınıfınızın uygulama kodunda, iletişim kutusu için dinamik düzeni belirtmek istediğiniz bir yer bulun veya oluşturun. Örneğin, iletişim kutunuzda olduğu gibi
AdjustLayout
bir yöntem eklemek ve düzenin değiştirilmesi gereken yerlerden çağırmak isteyebilirsiniz. Bunu önce oluşturucudan veya iletişim kutusunda değişiklik yaptıktan sonra çağırabilirsiniz.İletişim kutusu için, sınıfının bir yöntemi olan GetDynamicLayout'u çağırın.
CWnd
GetDynamicLayout
bir nesneyeCMFCDynamicLayout
işaretçi döndürür.CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();
Dinamik davranış eklemek istediğiniz ilk denetimde, dinamik düzen sınıfındaki statik yöntemleri kullanarak denetimin ayarlanması gereken şekilde kodlayan Move Ayarlar yapısını oluşturun. Bunu önce uygun statik yöntemi seçerek yaparsınız: CMFCDynamicLayout::MoveHorizontal, CMFCDynamicLayout::MoveVertical, CMFCDynamicLayout::MoveNone veya CMFCDynamicLayout::MoveHorizontalAndVertical. Taşımanın yatay ve/veya dikey yönleri için bir yüzde geçirirsiniz. Bu statik yöntemlerin tümü, denetimin taşıma davranışını belirtmek için kullanabileceğiniz yeni oluşturulan move Ayarlar nesnesini döndürür.
100'ün, iletişim kutusunun boyutu değiştiği kadar tam olarak hareket etmek anlamına geldiğini ve bu da denetimin kenarının yeni kenarlıktan sabit bir mesafede kalmasına neden olduğunu unutmayın.
MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);
Boyut Ayarlar türünü kullanan boyut davranışı için de aynı şeyi yapın. Örneğin, iletişim kutusu yeniden boyutlandırıldığında denetimin boyutunun değişmediğini belirtmek için aşağıdaki kodu kullanın:
SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();
CMFCDynamicLayout::AddItem yöntemini kullanarak denetimi dinamik düzen yöneticisine ekleyin. İstenen denetimi belirtmenin farklı yolları için iki aşırı yükleme vardır. Biri denetimin pencere tutamacını (HWND) ve diğeri de denetim kimliğini alır.
dynamicLayout->AddItem(hWndControl, moveSettings, sizeSettings);
Taşınması veya yeniden boyutlandırılması gereken her denetim için yineleyin.
Gerekirse, CMFCDynamicLayout::HasItem yöntemini kullanarak bir denetimin dinamik düzen değişikliklerine tabi denetimler listesinde olup olmadığını veya cmfcdynamiclayout::IsEmpty yöntemini kullanarak değişikliklere tabi olan denetimler olup olmadığını belirleyebilirsiniz.
İletişim kutusu düzenini etkinleştirmek için CWnd::EnableDynamicLayout yöntemini çağırın.
pDialog->EnableDynamicLayout(TRUE);
Kullanıcı iletişim kutusunu bir sonraki yeniden boyutlandırışında CMFCDynamicLayout ::Adjust yöntemi çağrılır ve bu yöntem ayarları gerçekten uygular.
Dinamik düzeni devre dışı bırakmak istiyorsanız, bEnabled parametresinde olduğu gibi YANLIŞ ile CWnd::EnableDynamicLayout'u çağırın.
pDialog->EnableDynamicLayout(FALSE);
Dinamik düzeni bir kaynak dosyasından program aracılığıyla ayarlamak için
Aşağıdaki örnekte olduğu gibi, ilgili kaynak betik dosyasında (.rc dosyası) dinamik düzen bilgilerini belirten bir kaynak adı belirtmek için CMFCDynamicLayout::MoveHorizontalAndVertical yöntemini kullanın:
dynamicLayout->LoadResource("IDD_DIALOG1");
Adlandırılmış kaynak, aşağıdaki örnekte olduğu gibi kaynak dosyasındaki AFX_DIALOG_LAYOUT girişi biçiminde düzen bilgilerini içeren bir iletişim kutusuna başvurmalıdır:
///////////////////////////////////////////////////////////////////////////// // // AFX_DIALOG_LAYOUT // IDD_MFCAPPLICATION1_DIALOG AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6400, 0x0028, 0x643c, 0x0028 END IDD_DIALOG1 AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6464, 0x0000, 0x6464, 0x0000, 0x0000, 0x6464, 0x0000, 0x0000 END
Ayrıca bkz.
CMFCDynamicLayout Sınıfı
Denetim Sınıfları
İletişim Kutusu Sınıfları
İletişim Kutusu Düzenleyicisi
Visual C++ 2015'te MFC için Dinamik İletişim Kutusu Düzeni