Aracılığıyla paylaş


MFC Tarafından Oluşturulan Pencerenin Stillerini Değiştirme

MFC işlevin WinMain sürümünde sizin için birkaç standart pencere sınıfı kaydeder. Normalde MFC'lerini WinMaindüzenlemediğiniz için, bu işlev size MFC varsayılan pencere stillerini değiştirme fırsatı vermez. Bu makalede, var olan bir uygulamada önceden kayıtlı böyle bir pencere sınıfının stillerini nasıl değiştirebileceğiniz açıklanmaktadır.

Yeni MFC Uygulamasında Stilleri Değiştirme

Visual C++ 2.0 veya sonraki bir sürümü kullanıyorsanız, uygulamanızı oluştururken Uygulama Sihirbazı'nda varsayılan pencere stillerini değiştirebilirsiniz. Uygulama Sihirbazı'nın Kullanıcı Arabirimi Özellikleri sayfasında, ana çerçeve pencerenizin ve MDI alt pencerelerinizin stillerini değiştirebilirsiniz. Her iki pencere türü için de çerçeve kalınlığını (kalın veya ince) ve aşağıdakilerden herhangi birini belirtebilirsiniz:

  • Pencerede Simge Durumuna Küçült veya Ekranı Kapla denetimleri olup olmadığı.

  • Pencerenin başlangıçta simge durumuna küçültülmüş, ekranı kaplamış veya hiçbiri gibi görünüp görünmediği.

Ana çerçeve pencereleri için, pencerenin Sistem Menüsü olup olmadığını da belirtebilirsiniz. MDI alt pencereleri için pencerenin bölücü bölmeleri destekleyip desteklemediğini belirtebilirsiniz.

Mevcut Uygulamada Stilleri Değiştirme

Mevcut bir uygulamada pencere özniteliklerini değiştiriyorsanız, bunun yerine bu makalenin geri kalanındaki yönergeleri izleyin.

Uygulama Sihirbazı ile oluşturulan bir çerçeve uygulaması tarafından kullanılan varsayılan pencere özniteliklerini değiştirmek için pencerenin PreCreateWindow sanal üye işlevini geçersiz kılın. PreCreateWindow bir uygulamanın CDocTemplate sınıfı tarafından normalde dahili olarak yönetilen oluşturma işlemine erişmesine izin verir. Çerçeve, pencereyi oluşturmadan hemen önce çağrılar PreCreateWindow . uygulamasına PreCreateWindowgeçirilen CREATESTRUCT yapısını değiştirerek, uygulamanız pencereyi oluşturmak için kullanılan öznitelikleri değiştirebilir. Örneğin, bir pencerenin başlık kullanmadığından emin olmak için aşağıdaki bit tabanlı işlemi kullanın:

// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;

CTRLBARS örnek uygulaması, pencere özniteliklerini değiştirmek için bu tekniği gösterir. Uygulamanızın içindeki PreCreateWindowdeğişikliklerine bağlı olarak, işlevinin temel sınıf uygulamasını çağırmak gerekebilir.

Aşağıdaki tartışmada SDI olayı ve MDI olayı yer alır.

SDI Büyük/Küçük Harf

Tek bir belge arabirimi (SDI) uygulamasında, çerçevedeki varsayılan pencere stili WS_OVERLAPPEDWINDOW ve FWS_ADDTOTITLE stillerinin birleşimidir. FWS_ADDTOTITLE, çerçeveye belge başlığını pencerenin başlık eklemesini sağlayan MFC'ye özgü bir stildir. SDI uygulamasında pencere özniteliklerini değiştirmek için, sınıfınızda türetilen CFrameWnd (Uygulama Sihirbazı'nın adlandırdığıCMainFrame) işlevini geçersiz kılınPreCreateWindow. Örnek:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // Call the base-class version
   if (!CFrameWnd::PreCreateWindow(cs))
      return FALSE;

   // Create a window without min/max buttons or sizable border
   cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

   // Size the window to 1/3 screen size and center it
   cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
   cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
   cs.y = ((cs.cy * 3) - cs.cy) / 2;
   cs.x = ((cs.cx * 3) - cs.cx) / 2;

   return TRUE;
}

Bu kod, Simge Durumuna Küçült ve Ekranı Kapla düğmeleri olmadan ve boyutlandırılabilir kenarlık olmadan bir ana çerçeve penceresi oluşturur. Pencere başlangıçta ekranda ortalanır.

MDI Büyük/Küçük Harf

Birden çok belge arabirimi (MDI) uygulamasında alt pencerenin pencere stilini değiştirmek için biraz daha fazla çalışma gerekir. Varsayılan olarak, Uygulama Sihirbazı ile oluşturulan bir MDI uygulaması MFC'de tanımlanan varsayılan CMDIChildWnd sınıfını kullanır. MDI alt penceresinin pencere stilini değiştirmek için, öğesinden CMDIChildWnd yeni bir sınıf türetmeli ve projenizdeki tüm başvuruları CMDIChildWnd yeni sınıfa yapılan başvurularla değiştirmelisiniz. Büyük olasılıkla, uygulamadaki tek başvuru CMDIChildWnd uygulamanızın InitInstance üye işlevinde bulunur.

MDI uygulamasında kullanılan varsayılan pencere stili, WS_CHILD, WS_OVERLAPPEDWINDOW ve FWS_ADDTOTITLE stillerinin birleşimidir. MDI uygulamasının alt pencerelerinin pencere özniteliklerini değiştirmek için, sınıfından CMDIChildWndtüretilen PreCreateWindow işlevini geçersiz kılın. Örnek:

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // Create a child window without the maximize button
   cs.style &= ~WS_MAXIMIZEBOX;

   return CMDIChildWnd::PreCreateWindow(cs);
}

Bu kod, Ekranı Kapla düğmesi olmadan MDI alt pencereleri oluşturur.

Ne hakkında daha fazla bilgi edinmek istiyorsunuz?

Ayrıca bkz.

Çerçeve Penceresi Stilleri