TN019: varolan mfc uygulamaları mfc 3.0 güncelleştirme

Bu teknik notu öncelikle geçirme mfc 1.0 uygulamaları mfc 2,0 araçları için yönergeler sağlar. Aşağıda sunulan ek mfc 2.5, 2.0 ve 3.0 farkları ilk bölümünde,.

Mfc 4.0/3.0 API değiştirir

Değişiklik yapılması için mevcut kod neden belgelenmiş mfc API'leri bilinen hiçbir değişiklik vardır. Tabii ki, sen-ebilmek istemek-e yararlanmak için birçok ek özelliği vardır. Bu özellikler hakkında daha fazla bilgi için bkz: Visual c++ programlama Kılavuzu.

Mfc 2.5 API değiştirir

Mfc 2.5 sınıf kitaplığı'na iki önemli özellikler eklendi: ole 1.0 desteği ve veritabanı erişim sağlayan odbc yerine ole 2.0 desteği. Varolan kodunuzu etkileyebilecek API değişiklikleri kapsayacak şekilde bu technote niyeti öyle. Bu technote, almayan bu yeni özellikler hakkında bilgi için bkz: Visual c++ programlama Kılavuzu.

CFrameWnd::RecalcLayout bir ek parametre vardır: bool bNotify. Bu herhangi bir ole sunucularına bildirmek kaydedilip kaydedilmeyeceğini belirtir ki düzen değişti. Normalde doğru olduğunu ve bu nedenle bu varsayılandır. Programınız bu işlevi geçersiz kılma sağlıyorsa, işleve ek parametre eklemeniz gerekir böylece bu işlevi sanal,.

Mfc 2.5 kütüphanelerde belgelenmemiş işlevler odbc yanı sıra ole 2.0 desteği için yapılan diğer değişiklikler vardı. Programınızın belgesiz mfc API'leri kullanır, onlar hala geçerli olduğundan emin olmak için tüm bu tür kullanımlar gözden geçirmelidir.

Geçirme mfc 1.0 mfc 2.0 uygulamaları

Önemli: anlamak ve aşağıda sunulan iki yaklaşımları değerlendirmek için belge ve Görünüm mimarisi ve araçları gibi mfc 2.0 kavramları hakkında bilgi sahibi olmalıdır. En az mfc eğitimde örnek çalışma öneririz KARALAMAK içinde varolan kodu herhangi bir geçiş başlamadan önce Tutorials.

Mfc sürüm 2 için Microsoft C7 ile piyasaya geçirme varolan uygulamalardan mfc sürüm 1, iki temel yaklaşım vardır.

En az geçiş

"En az göç" yöntemi kullanarak gerekli, sadece en az değişiklik böylece:

Bu kolay bir yaklaşım, ama zengin özelliklerinden tam mfc 2.0 Kitaplığı'nda almaz. "Tam geçiş" yöntemi seçmiş olsanız da, anlamak ve teknikleri en az geçiş için egzersiz gerekir.

Tam geçiş

"Tam geçiş" gerçekleştirirseniz, tam mfc 2.0 kütüphane yararlanabilirsiniz. En az geçiş yöntemi kullanarak, uygulamanızı Visual c++ ve ClassWizard kullanarak düzenlemek mümkün olacaktır. Tam geçiş yöntemi kullanarak, aşağıdaki mfc 2.0 desteği sağlamak:

Genel olarak tam geçiş yöntemi temelde AppWizard ile başlayan, sıfırdan bir mfc 2.0 uygulama geliştirme taklit etmektir. mfc 2.0 uygulama sıfırdan gelişmekte olan tabii ki, size çok mantıklı olarak yazdı mfc 1.0 kod ödünç fark.

En az geçiş

Aşağıdaki alt kısımlar çok az bir geçiş gerçekleştirmeden ayrıntılı yönergeler sunmak.

Windows 3.1 katı TypeDef için uygun

Mfc kitaplık uygun Windows 3.1 katı TypeDef hangi Windows 3.1 SDK'da açıklanmıştır 2.0 varsayılan oluşturur. mfc 1.0 STRICT kapalı vardı, ama şimdi mfc 2.0 varsayılan olarak açık katı vardır. Bu MFC'ın taahhüdü Endüstri Standart Windows API izlemek ve sağlam uygulamalar daha kolay geliştirme yapmak geliştirme uygulamaları geliştirmek için izler. Sadece sıkı TypeDef sağlam yazılım üretmeye mfc 2.0 sınıflar geliştiricilerine yardımcı olarak, böylece uygulama kodunuzun geliştirirken sizin için gerçek olacak.

Sıkı tür denetlemesini ilk kez kullanırken, birçok derleme hataları genellikle neden olur. mfc 1.0 uygulamanızın Windows 3.1 katı TypeDef için uygun değişiklik çok iyi en az geçiş çaba toplu temsil edebilir.

Bir kez uygulama katıile uyumludur, bir yürütülebilir dosya hiçbir değişiklik ile derlemek mümkün olabilir. Örneğin, ABOUT2 ve FILEVIEW mfc 1.0 örnekleri ile ek değişiklik derleyin. Zaten STRICT uyumlu olduklarını ve yaptım kullanılmayan herhangi bir değişiklik mfc API'leri.

Mfc 2.0 API değiştirir

Katıiçin uygun ötesinde, en az bir geçiş yapma gayretinin olduğunu belirlemek ve görece az mfc 2.0 API değişiklikleri uygun uygulama kodunuzu değiştirmek için.

Üzerinde 1800 mfc 1.0 API üzerinden sadece 20 olan API derleme zamanı hataları sonucu değişti. Bu değişiklikler yalnızca Önemsiz değişiklikler varolan mfc 1.0 uygulamaları gerektirir. En kapsamlı değişiklikler, ole sınıflarını mimari yapılanma vardır. Bu değişiklikler kapsamında Teknik Not 18 ' de.

Hangi değişiklikler öngörmek gerekir yapmak için bu technote sonundaki "alfabetik API değişiklikleri" bölümüne bakın. Hangi mfc 2.0 mfc 1.0 API'ları değiştirilmiş yararlı, kısa bir özet sunar.

Tüm mfc 2.0 kodu ile başa çıkmak gerekli değişiklik değil, çeşitli derleme ve bağlama hataları alırsınız. Bu hatalar hemen hemen her zaman tanımak kolaydır. Bu technote sonundaki "derleyici hataları" bölümündeki bazı kurallar verdiğimiz, Tanı yardım için.

Aşağıdaki mfc API'ları mfc 2.0 kaldırılmıştır. Uygun alternatif API'leri öneririz. Bu liste, belgesiz uygulama API değişiklikleri içermez.

CDC::GetDCOrg

GetDCOrg Win32'de kullanılamaz. Windows 3.x sadece uygulamaları, sadece Windows API çağrısı :: GetDCOrg doğrudan.

CRuntimeClass::m_pszClassName

Bu üye değişkeni bellek modeli bağımlı (char *) yerine bir lpstr artık. M_lpszClassName mfc 2.0 adlı.

CMDIChildWnd::m_pMDIFrameWnd

Mfc 0'da, bu üye değişkeni sınıfın MDIFrame üst işaret etti. Bu üye değişkeni bir üye işlev CMDIChildWnd::GetMDIFrameile değiştirilmiştir. Çok belgeli arabirim (MDI) mfc 2.0 kullanıyorsanız, tüm standart MDI pencereleri menü komutları varsayılan MDI destek kolları yana çoğu kullanır CMDIChildWnd::m_pMDIFrameWnd (veya GetMDIFrame) artık gerekli olmayan.

CFrameWnd::GetChildFrame

MDI çerçevesi için bunun yerine CMDIFrameWnd::MDIGetActive kullanın.

Aşağıdaki API mfc 1 uyumluluğu destekleyecek 2.0 yaptı ama artık kullanılmıyor. mfc gelecekteki sürümlerinde kaldırılır.

CMDIFrameWnd::CreateClient

Bu işlevsellik çekmek görünüm oluşturma ve mfc 2.0 MDI desteği geliştirildi daha genel OnCreateClient mekanizması tarafından değiştirilmiştir. Orijinal CreateClient , hala kendi MDI çerçevesi pencerenin menü çubuğu ( CMDIFrame::MDISetMenu) yönetmek MDI uygulamalar için kullanılabilir. mfc 2.0 MDI destek menüsü etkin MDI alt penceresi için MDI çerçevesi pencerenin menü çubuğunu otomatik olarak geçiş yapar.

Diğer API ile ilgili değişiklikler

Afxext.h üstbilgi dosyası iki mfc sınıf afxwin.h taşındı:

Bu sınıflar başvuru .cpp dosyaları aşağıdaki ekleme:

# include lt;afxext.h>

Böylece onlar 'sabit' değiştiricisi kullanımıyla ilgili sıkı birçok API değiştirildi. Bu değişiklikler LPCTSTR adı yazın ve yeni lpcrect türü adı bir daha tutarlı kullanımı sonucu. Unutmayın, hiçbir derleme süresi sorunu var bu değişikliklerle bu yana herhangi bir bağımsız değişken olarak kullanıldığında, belirtilen türde bir const sürüme yükseltilebilir. STRICT değiştirmek gibi bu yol daha sağlam kodu kodu sabit veri işaretçileri kullandığında.

Şimdi aşağıda listelenen penceresi oluşturma işlevleri ek bir parametre var, ama son parametre varsayılan değeri null olduğundan, mevcut kod değişiklik yapılmadan çalışır. Bu işlevler

Aşağıdaki işlevler mfc 0'da sanal ama şimdi mfc 2.0 nonvirtual:

Mfc 1.0 uygulamanızın türetilmiş bir sınıf Bu işlevlerden herhangi birini geçersiz kılar, mfc 2.0, türetilmiş bir sınıf işlevi çağrılacaktır düşüktür. Ayrıca, GetParentFrame CFrameWnd CWnd için genellikle daha yararlı bir API olabilir taşındı.

Sınıfların yanı sıra, küresel operatör/arkadaş işlevleri, tüm statik üyeleri şimdi arama kuralları pascal için uygun. Tüm genel AFXAPI (pascal) işlevlerdir. Yine, bu bir derleme zaman sorun değil ama daha hızlı ve daha küçük oluşturulan koda neden.

Birçok salt uygulama sınıflar ve yapılar 'c' öneki kullanmamayı adlandırılmıştır. Örneğin, CExceptionContext , AFX_EXCEPTION_CONTEXTiçin değiştirilmiştir. Bu sınıflar değil belgelenen ve uygulama detayları sınıf kitaplığı kalır. Bu dayanıyordu ve genellikle, çünkü onlar gelecekteki sürümlerinde değişebilir, sınıf kitaplığı belgesiz API'leri üzerinde güvenmeyin önerilir düşüktür.

Mfc 2.0 varsayılan davranışı değişiklikleri

Mfc API değişiklikleri ile ilgili derleyici ve ilintileyici tarafından rapor edilen hatalar Yardımı ile kolaydır. Tüm kitaplığı değişiklikleri ancak Kütüphane başlık dosyalarında ortaya bulunmaktadır. Bazı değişiklikler, uygulamanızın çalıştırma davranışını ortaya bulunmaktadır. Onları öngörmek sürece bu değişiklikler genellikle uğraşmak zor değildir. Aşağıdaki bilgileri gibi davranış değişiklikleri öngörmeye yardımcı olmak için sağlanmıştır.

CDialog ve CModalDialog tek bir sınıfın birleştirilmiş. CModalDialog artık eskimiş bir sınıf olarak kabul edilir. Ancak, mfc 1.0 uyumluluk için tüm başvuruları CModalDialog afxwin.h geçiş makro ile hala geçerli:

# define CModalDialog CDialog

Birçok mfc 1.0 uygulamaları için bu basit # define yeterlidir. Ancak, orada durumlarda nerede bu # define yeterli değil.

Eğer kalıcı olmayan bir iletişim uygulanan ve EndDialog diyorlar şimdi (kalıcı iletişim işleme için) bu yana "hiçbir şey" varsayılan davranış, OnOK ve OnCanceliçin güveniyordu, sonra bunlar ve varsayılan davranışı geçersiz gerekir.

CDialog::CreateIndirect hala kalıcı olmayan bir iletişim kutusu oluşturur. Oluşturmak için kalıcı bir iletişim kutusu kullanmak CDialog::InitModalIndirect kaldırılan CModalDialog::CreateIndirect yerine API.

İletişim kutusu ve ileti kutusu arka plan renklerini CWinApp::SetDialogBkColor API kullanarak şimdi genel olarak ayarlanabilir. Varsayılan parametre rengi gri arka planlar üretmek için ışık gri (değil color_btnface) ayarlar. Diğer renkleri belirtebilirsiniz.

SetDialogBkColor , CWinAppiçinde olarak değil,- InitInstance işlevi, varsayılan pencere arka plan rengi (kontrol paneli renk uygulaması ayarla) kullanılan türetilmiş.

Bir dll CWinApp nesnesi içeriyorsa mfc 0'da, AfxWinTermçağrısı dahil DllMain sağlamak için gerekli. mfc 2.0 sağlar Bu DllMain, böylece herhangi bir ek kod dahil senin DllMain dll cWinApp::ExitInstance üye işlevine geçirilen.

CMDIChildWnd::Create şimdi dwStyle parametresini kullanır. Şimdi MDI alt penceresi için tam pencere stili belirtmeniz gerekir. If you specify dwStyle = 0, şimdi CMDIChildWnd::PreCreateWindowiçinde bir assert hatası alırsınız. Bunu önlemek için WS_CHILD stilini belirtmek | WS_VISIBLE | mfc 1.0 ile geriye dönük WS_OVERLAPPEDWINDOW.

Bazı çerçeve penceresi denetimler, isterseniz kaldırabilirsiniz mfc 2.0 ayarı farklı stilleri MDI alt pencereleri için desteklediğinden.

Sınıf CFrameWnd yeni veri üyesi bool CFrameWnd::m_bAutoMenuEnablevardır. Bu ayarlanmış varsayılan olarak true. Bu ON_UPDATE_COMMAND_UI ya da on_command işleyicileri otomatik olarak devre dışı bırakılması gerekmez menü öğeleri neden olur. on_command işleyicileri, ancak hiçbir ON_UPDATE_COMMAND_UI işleyicileri, menü öğeleri otomatik olarak etkinleştirilir.

Bu, isteğe bağlı komut geçerli seçime dayalı uygulamak kolaylaştırır. Ayrıca, bu büyük ölçüde etkinleştir/devre dışı bırak menü öğeleri için ON_UPDATE_COMMAND_UI işleyiciler yazmak uygulamaları gereksinimini azaltır. Örneğin, AppWizard oluşturulan uygulama Düzenle Kes/Kopyala/programcı işleyicileri için onları uygulayan kadar devre dışı Yapıştır olacaktır.

Mfc 1.0 uygulama on_command ve ON_UPDATE_COMMAND_UI işleyicileri güncelleştirilmez, ancak daha sonra o m_bAutoMenuEnable açıkça temizlemeniz gerekir. Aksi takdirde, devre dışı menüler için otomatik olarak etkinleştirilebilir.

Proje (yapı) değişiklikleri

Standart bir makefile kullanarak mfc 1.0 uygulamanızı oluşturmaya devam edebilirsiniz. Projenize geçirmek için en kolay yolu, depedencies ve diğer proje seçenekleri Visual c++ ortamında korumak için Visual c++ proje tesis kullanma gereğidir.

Çözümlenmemiş dış COMDLG32 için ortak bir bağlantı hatası olduğunu.dll ve SHELL32.dll API'leri. Comdlg32 ile bağlantı emin olun.LIB ve SHELL32.LIB.

Sen-ebilmek muktedir kurmak geliştirmek yerleştirerek # kez dahil lt;afxwin.h > derlenmiş bir başlık. Kural gereği, mfc 2.0 uygulamaları önceden derlenmiş başlık olarak "stdafx.h" belirtin. Sonra modül stdafx.cpp stdafx.h içerir. Bu teknik AppWizard ve birçok mfc 2.0 örnekleri tarafından oluşturulan kodu gösterilmiştir.

&Notnbsp;  Define kendisi herhangi bir stdafx.h _afx_no_xxx makrolar tanımsız önemlidir. Bilgi Bankası makalesine bakın: "prb: sorunlar meydana _afx_no_xxx tanımlarken." msdn Kitaplığı cd ya da http://www.microsoft.com/kb/ Bilgi Bankası makaleleri bulabilirsiniz.

Visual c++ ve ClassWizard uyumluluk

Daha az geçiş için aşağıdaki adımları izleyin öneririz böylece kod ve uygulama kaynakları düzenlemek için Visual c++ ve ClassWizard kullanabilirsiniz.

Tam geçiş

Mfc 2.0 varolan c veya mfc 1.0 uygulamanızın tam geçiş mfc 2.0 tüm avantajlarını sunacak. Çoğu uygulamalar için tam geçiş zor değildir ve iyi çabaya değer.

Mfc 2.0 uygulama başarılı tam geçiş, sıfırdan yeni bir uygulama geliştirmek olarak mfc 2.0 temelde aynı anlayış gerektirir. Tam geçiş işlemi başlamadan önce mfc 2.0 sınıf kitaplığı, Visual c++, AppWizard ve ClassWizard ile aşina olmak. Ne-ebilmek var olmak için uygulama kodu bölümlerini anlamalıdır eşdeğer veya geliştirilmiş işlevsellik mfc 2.0 sınıflardan ya tarafından kaldırıldı. Sadece daha fazla kitaplık uygulaması kullanarak kaynak kodunuzu küçük yapacaktır, ama bu uygulama bölümleri daha iyi mfc çerçevesinde geri kalanı ile tümleşik hale getirecek.

Mfc 2.0 uygulama tam geçiş yapma, nispeten küçük mfc ek işlevler elde edebilecektir ekstra maliyet. Örneğin, uygulamanızın bir kırık pencere kullanıcı arabirimi yoktu, ancak kullanıcılar için yararlı olacaktır, sonra zaten mfc 0'ın belge/görünüm mimarisi, kodunuzda taşıdık bu özelliği, hızlı şekilde eklemek yükleyebileceksiniz.

Mfc 2.0 tam geçiş birkaç gün çaba büyük uygulamalar için gerekli olabilir, ancak işlemi oldukça basittir. İşlemi aşağıdaki genel adımları açıklar:

  1. Varolan uygulama mimarisi, belge, görüş ve çerçeve pencereleri nasıl faktörler analiz.

    Herhangi bir kod düzenlemeye başlamadan önce bunu. Birçok programcı belge kodu görüntüle kodu ile iç içe eğilimindedir. Yaptığını bu yüzden mutlaka "kötü" olmasa da, belge ve görüntüleme işlevleri ayrılması mfc çerçevesinde kabul etti ve özellikle de destekleyen tasarım felsefesi ' dir. mfc 1.0 CDocument ve CView sınıfları yok olsa bile, belge/görünüm ayrımı da onayladı. Böylece gelecek sürümleri: Kütüphane olacak.

    Mfc 2.0 örnekleri CDocument ve CView sınıfları, özellikle mfc eğitimde örnek kullanan çalışma KARALAMAK. Ardından Başvuru belgesi nedir ve ne görünüm belirlemek için analiz. Uygulama birden çok belge türleri veya görünümler olup olmadığını belirleyin.

    Uygulamanızın-değil ödünç vermek kendisi belge/görünüm ayrımı temizlemek için olsa bile, hala tam olarak mfc 0'a geçiş ve çerçeve aslında tam olarak yararlanmak mümkün olacaktır. Eğer "Belge/görünüm ayrımı CDocument- ve CViewuygulayarak sahte"-türetilmiş sınıflar, ancak belge veya sınıf temsilci çalışmalarını diğer sınıfının en görünümü. Ya da, senin görünüm sınıfı, CFrameWnd- veya CMDIChildWnditimat-türetilmiş sınıf toplu uygulamanızın kullanıcı arabirimi uygulamak. Özetle, sen-si olmak hemen hemen tam bir özgürlük nasıl belgesi, görünümü ve kare pencere sınıflarını ayırmak için.

    Analiz de uygulamanız birden çok görünüm sınıfları ve büyük olasılıkla birden çok belge sınıfları gerekip gerekmediğini belirlemelisiniz. Hatta nispeten basit uygulamalar bazen birden fazla görünüm sınıf gerekir. Ancak, birden çok görünüm, bir kırık pencere gibi mutlaka birden fazla CViewvar dikte etmeyin-türetilmiş sınıfları. Kırık pencere her bölmesinde aynı kullanıcı arabirimi olarak bölücü penceredeki diğer bölmeler şunlardır sağlıyorsa, örneğin, sonra aynı görünüm sınıfı paylaşabilirler. Bu durumda, her bölmesinde sadece bir ayrı aynı görünümü sınıfının nesnesidir. Çok farklı kullanıcı arayüzleri farklı Windows uygulamanızın sağlar muhtemelen birden çok görünüm sınıflar tasarlamak istiyorsanız.

  2. Uygulamanız gerekir ne AppWizard desteklenen çerçeve özellikleri analiz.

    AppWizard bir iskelet olarak AppWizard iletişim kutularında seçenekleri seçin çeşitli çerçeve özellikleri destekleyen mfc 2.0 uygulama oluşturur. İskelet uygulamanızı oluşturmak için AppWizard çalıştırmadan önce eğer ilk AppWizard sağlayan seçenekleri ile edinmeniz gerekir.

    Daha sonra AppWizard'ın seçeneklerini seçmek istediğiniz karar verebilirsiniz için biraz zaman alabilir. Birkaç dakika içinde AppWizard ilk çalıştırdığınızda bunun çalışmayın. Uygulama ole desteklemiyorsa, örneğin, bu dikkate almak isteyeceğiniz bir büyük karardır. Başlamak için AppWizard'ın ole seçenek yoktu'yı seçerseniz hala MFC'ın ole özellikleri kullanmak için uygulama kodu değiştirmek mümkün olacak. Ama başlangıç seçeneğiyle size zaman kazandıracak başlamak için ole AppWizard.

    Analiz, uygulamanızın bir tek belge arabirimi (SDI) veya birden çok belge arabirim (MDI) uygulaması olup olmadığını belirlemelisiniz. Bu belirli belirlenmesi, diğer Windows uygulamalarında bu iki ayrı kullanıcı arabirimi aşina iseniz açık olmalı. O lets onları için MDI arayüz genellikle son kullanıcılara daha işlevsel olduğundan AppWizard MDI uygulamaları varsayılan olarak bir belge/dosya daha açık bir anda oluşturacaktır. Neyse ki, mfc 2.0 belge/görünüm mimarisiyle, MDI destekleyen hiçbir ilave yapmanız kodlama gerektirir.

  3. AppWizard kullanarak yeni bir uygulama oluşturmak.

    Yukarıdaki analiz yapmış olan, AppWizard, uygulamanızın iskelet kodunu oluşturmak için çalıştırmak hazırsınız.

    Uygulamanız, belge, görüş ve çerçeve pencereleri nasıl ayıran analiz, hangi adları kendi ilgili dersleri ve modülleri vermek iyi bir fikir olmalıdır. Eğitmen örnek'ın CScribDoc ve CScribView ve scribdoc.cpp ve scribvw.cpp gibi biraz genel adları atamak isteyebilirsiniz. Birden çok görünüm sınıf uygulamanız gerekir, ancak muhtemelen ilk AppWizard oluşturulan görünümü sınıf CDataEntryView ve CReportView gibi daha özel bir ad vermek istiyorsanız. Sonraki adım ek bilgi için bkz: birden çok belge ve görüntüleme sınıfları oluşturma hakkında.

    Beklenen ek AppWizard seçenekleri, SDI veya MDI gibi istediğiniz ve ole, şimdi AppWizard seçenekleri seçin ve sadece birkaç dakika içinde iskelet uygulama oluşturmak mümkün olmalıdır.

  4. İsteğe bağlı olarak, ikinci görünüm, belge ve kare pencere sınıflarını clone.

    Yukarıdaki analiz, uygulamanızı birden çok görünüm, belge veya kare pencere sınıflarını gerektiğini belirlerse, AppWizard çalıştırdıktan sonra bu sınıflar iskelet kodunu doğru oluşturmak için iyi bir zaman olduğunu.

    AppWizard tarafından oluşturulmuş olanları klonlama tarafından ek görüntüleyin, belge ve kare pencere sınıflarını iskelet kodunu oluşturabilirsiniz. Yani, ikinci belge veya sınıf için yeni bir modül adı atama .cpp ve .h dosyaları kopyalayın. Sınıf isimleri değiştirerek iskelet kodunu düzenle. Başka bir alternatif, ClassWizard'ın Add Class işlevselliği belirttiğiniz adı kullanarak belirttiğiniz dosyalar otomatik olarak yeni bir sınıf oluşturmak için kullanmaktır. Zaten KARALAMAK öğretici takip ettim, yeni sınıflar oluşturmak için ClassWizard'ın yeteneği ile tanıdık olacak.

    Her iki durumda da, içinde senin CWinApp-sınıfının InitInstance fonksiyonu, türetilen ek belge şablonu nesneleri arasında birden fazla belge görünümü ve kare pencere sınıflarını yapmak istediğiniz herhangi bir ilişkileri için kaydolmanız gerekir.

    Bu da hızlı bir adımdır. Birden çok belge, gösterim veya kare pencere sınıflarını uygulamanızda uygulama için kararlı değilseniz bu adımı erteleyebilirsiniz.

  5. Mfc 1.0 kodunuzu ilgili kısımlarını içine AppWizard tarafından oluşturulan sınıfları geçirme.

    Bu adım, mfc 1.0 uygulamanıza mfc 2.0 geçiş iş toplu gösterir. Artımlı olarak yapmalısınız. Uygulamanızın bir anda nispeten küçük parçalar geçirin. Bunun gibi hangi işlevleri çerçevesi sağlayan bazı eski mfc 1.0 uygulama kodunuzun atmak sağlayacak hakkında daha fazla ayrıntı öğreneceksiniz.

    Bu kod parçalarını geçirmek gibi "En az göç altında" sunulan yönergeleri unutmayın. Bu yönergeleri tam geçiş için geçerli. AppWizard //{{afx_msg ve //{{afx_msg_map açıklamaları komutunu hedef sınıfları için (uygulama, belge, görünümü ve çerçeve penceresi) eklemiş. El ile bunlar gibi çok az geçiş yaklaşım altında eklemeniz için gerekli değildir. Gerekli olmasa da, ileti haritalarını içe //{{afx_msg açıklamaları arasındaki ileti işleme işlevleri taşımanızı öneririz. Ayrıca, bu ileti işleme (afx_msg) işlevleri ve beyanlar üstbilgi dosyaları //{{afx_msg yorumlar arasında hareket eder. Böylece projenizin life cycle(s) geri kalanı ClassWizard kullanmanıza izin verir.

    Bu öneriler //{{afx_msg Yorumlar ile ilgili de, belki de daha az bir ölçüde, diyaloglar uygulanır. Sonra verilen iletişim sınıf birçok gelecek değişiklikleri öngörüyorsanız, o iletişim ClassWizard farkında yapmak için çaba olmayabilir. That's fine. Biz, elbette, tüm yeni iletişim dersleri ClassWizard'ın sınıf Ekle seçeneğini kullanarak oluşturmanız önerilir.

    Mfc 1.0 veya Windows uygulama geçirme gibi varolan dosya formatları ile uyumluluk sağlamak isteyebilirsiniz. (Varsayılan mfc 2.0 belge dizileştirme mekanizmasını uygulamanız için uygun olmayabilir.) CFile yazmak ve çağrıları okumak ya da dosya olmayan uygulamak için belgeyi alarak yönlendirmek için CDocument::OnOpenDocument ve OnSaveDocumentgeçersiz kılmak istediğiniz. mfc Genel örnek DIBLOOK bu tekniği bir örnek sağlar. Zaten geçerli uygulama nesneleri serileştirildiğini, sonra bu sorun olmaz.

Alfabetik API değişiklikleri

Bu değişikliklerin nedenlerini anlamak için "Neden için değişiklikleri" aşağıya bakınız.

API / değişken Mfc 2.0 değiştirmek (değişiklik nedeni)
CMetaFileDC::Close Dönüş türü (2)
CWnd::Create Ekstra varsayılan parametre eklendi, CWnd * const (1, 3)
CFrameWnd::Create Ekstra varsayılan parametre eklendi, CWnd * const (1, 3)
CMDIChildWnd::Create Ekstra varsayılan param CWnd * const (1, 3) nbsp eklendi; dwStyle varsayılandır şimdi: WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWI&NDOW
CWnd::CreateEx Ekstra varsayılan parametre eklendi, CWnd * const (1, 3)
CBitmap::CreateBitmap Parametre türleri (4)
CDC::EnumObjects Geri arama prototip (2)
CTime::Format Const işlevi (3)
CTimeSpan::Format Const işlevi (3)
CTime::FormatGmt Const işlevi (3)
CFile::GetStatus Nonvirtual (5)
CDC::GrayString Callback parametresi türü, prototip (2)
CBitmapButton::LoadBitmaps Ekstra varsayılan parametre (1)
CWnd::OnActivateApp Parametre türü (2)
CWnd::OnCompareItem İlave parametre (6)
CWnd::OnDeleteItem İlave parametre (6)
CWnd::OnDrawItem İlave parametre (6)
CWnd::OnDropFiles Parametre türü (2)
CWnd::OnGetMinMaxInfo Parametre türü (6)
CWnd::OnMeasureItem İlave parametre (6)
CWnd::OnMenuChar Dönüş türü (2)
CWnd::OnNcCalcSize İlave parametre (6)
CWnd::OnPaintClipboard Parametre türü (2)
CWnd::OnParentNotify Parametre türü (2)
CWnd::OnSizeClipboard Parametre türü (2)
CWnd::OnSysCommand Parametre türü (2)
CWnd::OnWinIniChange Parametre türü (2)
CDC::PlayMetaFile Parametre türü (2)
CEdit::SetSel Ekstra varsayılan parametre (6)
CEdit::SetTabStops Parametre türü (5)
CWnd::SetTimer Callback parametresi türü, prototip (2)
CRuntimeClass::m_pszClassName Yeniden adlandırılan m_lpszClassName (5)

Silinen veya eski API Mfc 2.0 değiştirmek (değişiklik nedeni)
CBitmapButton 3 Params ile-kaldırılan l?ek kullanmak LoadBitmaps (1)
CMDIFrameWnd:: CreateClient OnCreateClient (1) kullanın
GetChildFrame MDIGetActive (1) kullanın
GetDCOrg Windows API kullanarak doğrudan için 3.x (4)
m_pMDIFrameWnd Şimdi GetParentFrame ya da GetMDIFrame (1) arama

Değişikliklerin nedenleri:

Derleyici hataları

Standart tip dönüşümleri derleyici tatmin mfc 2.0 API'lerine değişikliklerin çoğu birkaç derleyici hataları ya da hiçbiri hiç oluşturur. Aşağıdaki derleyici hataları mfc 2.0 altında Varolan mfc 1.0 uygulamaları derlerken oluşturulabilir:

Sayı Derleyici hata iletisi
Derleyici hatası C2039 'Kimlik': 'sınıf-anahtarı.' üyesi değil
Bu hata bir üye işlev zaman neden olduğu ya da veri üyesi bir sınıf, örneğin CFrameWnd' ın m_pMDIFrameWnd kaldırıldı.
Derleyici hatası C2501 'Kimlik': eksik decl-belirleyicileri.
Bilinmeyen sınıf adını kullandığınızda bu hataya neden olur. Sınıf artık mevcut veya taşındığında için farklı üstbilgi dosyası genellikle böyledir. Eğer sen almak bu yanlışlık CMetaFile ve CBitmapButton sonra sizin için örnek eklemeniz gerekir için # include "afxext.h" Bu sınıfları kullanarak kaynak dosyalarına.
Derleyici hatası C2248 'Member' 'belirleyici' üye 'sınıfı.' sınıfta bildirilen erişemiyor
Üye erişim mfc 0'dan 2'ye değişmişse, bu hata oluşur. Örneğin, belgesiz bir API kamu korunan üye erişim taşındı. Bu yalnızca uygun mfc 2.0 işlevselliği kullanmak için değiştirilmesi gereken belgesiz ve desteklenmeyen API'leri kullanan kod oluşması.
Derleyici hatası C2642 Oyuncular için işaretçiyi üyesine ilgili işaretçi için üye olmanız gerekir.
Afxwin.h bir ileti işleyicisi işlevi prototip farklıdır bu hata oluşur. ON_WM_ACTIVATEAPP makro içeren bir satırı parametreleri ve dönüş türü, OnActivateApp ileti işleyicisi mfc 1.0 bildirimi eşleşiyorsa, bu hata yayarlar.
Derleyici hatası C2660 'Function': işlev 'numarasını' parametre almaz.
Parametre sayısı mfc 1.0'dan mfc 2.0 için değişti. Çünkü bu belirli Oluşturucu kaldırılması ve LoadBitmaps üye işlevi tarafından değiştirilmesi, üç parametre CBitmapButton yapıcısını çağırma bu hatasına neden oluyor.
Derleyici hatası C2664 'Function': parametresi 'sayı' dan 'type1' için 'type2.' dönüştürülemiyor
Bir parametre türü değişti ve standart dönüşümler derleyici memnun değil. CDC::EnumObjects , bu bir örnektir. Böyle bir durumda, geriçağırım işlevi prototip değişti.

Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre

Index