Aracılığıyla paylaş


Uygulama Bilgileri ve Yönetimi

Bir uygulama yazdığınızda, tek CWinApptüretilmiş bir nesne oluşturursunuz. Bazen, türetilmiş nesnenin dışından CWinAppbu nesne hakkında bilgi almak isteyebilirsiniz. Veya diğer genel "yönetici" nesnelerine erişmeniz gerekebilir.

Microsoft Foundation Sınıf Kitaplığı, bu görevleri gerçekleştirmenize yardımcı olmak için aşağıdaki genel işlevleri sağlar:

Uygulama Bilgileri ve Yönetim İşlevleri

Veri Akışı Adı Açıklama
AfxBeginThread Yeni bir iş parçacığı oluşturur.
AfxContextMenuManager Genel bağlam menüsü yöneticisi işaretçisi.
AfxEndThread Geçerli iş parçacığını sonlandırır.
AfxFindResourceHandle Kaynak zincirini gösterir ve kaynak kimliğine ve kaynak türüne göre belirli bir kaynağı bulur.
AfxFreeLibrary Yüklenen dinamik bağlantı kitaplığı (DLL) modülünün başvuru sayısını kısaltıyor. Başvuru sayısı sıfıra ulaştığında modül eşlenmemiştir.
AfxGetApp Uygulamanın tek CWinApp nesnesine bir işaretçi döndürür.
AfxGetAppName Uygulamanın adını içeren bir dize döndürür.
AfxGetInstanceHandle Uygulamanın bu örneğini temsil eden bir HINSTANCE döndürür.
AfxGetMainWnd OLE olmayan bir uygulamanın geçerli "ana" penceresine veya sunucu uygulamasının yerinde çerçeve penceresine bir işaretçi döndürür.
AfxGetPerUserRegistration Uygulamanın kayıt defteri erişimini (HKCU) düğümüne yeniden yönlendirip yönlendirmediğini belirlemek için HKEY_CURRENT_USER bu işlevi kullanın.
AfxGetResourceHandle Uygulamanın varsayılan kaynaklarının kaynağına bir HINSTANCE döndürür. Uygulamanın kaynaklarına doğrudan erişmek için kullanın.
AfxGetThread Geçerli CWinThread nesnesine bir işaretçi alır.
AfxInitRichEdit Uygulama için sürüm 1.0 zengin düzenleme denetimini başlatır.
AfxInitRichEdit2 Uygulama için sürüm 2.0 ve üzeri zengin düzenleme denetimini başlatır.
AfxIsExtendedFrameClass Verilen pencerenin genişletilmiş çerçeve nesnesi olup olmadığını belirler.
AfxIsMFCToolBar Verilen pencerenin bir araç çubuğu nesnesi olup olmadığını belirler.
AfxKeyboardManager Genel klavye yöneticisi işaretçisi.
AfxLoadLibrary DLL modülünü eşler ve DLL işlevinin adresini almak için kullanılabilecek bir tanıtıcı döndürür.
AfxLoadLibraryEx Belirtilen seçenekleri kullanarak bir DLL modülünü eşler ve DLL işlevinin adresini almak için kullanılabilecek bir tanıtıcı döndürür.
AfxMenuTearOffManager Genel yırtılma menü yöneticisinin işaretçisi.
AfxMouseManager Genel fare yöneticisi işaretçisi.
AfxRegisterClass MFC kullanan bir DLL'de pencere sınıfı kaydeder.
AfxRegisterWndClass MFC tarafından otomatik olarak kaydedilenleri desteklemek için bir Windows pencere sınıfı kaydeder.
AfxSetPerUserRegistration Uygulamanın kayıt defteri erişimini (HKCU) düğümüne HKEY_CURRENT_USER yeniden yönlendirip yönlendirmeyeceğini ayarlar.
AfxSetResourceHandle Uygulamanın varsayılan kaynaklarının yüklendiği HINSTANCE tutamacını ayarlar.
AfxShellManager Genel kabuk yöneticisi işaretçisi.
AfxSocketInit Windows Yuvalarını başlatmak için geçersiz CWinApp::InitInstance kılmada çağrılır.
AfxUserToolsManager Genel kullanıcı araçları yöneticisinin işaretçisi.
AfxWinInit MFC'yi başlatmak için GUI tabanlı bir uygulamanın başlatılmasının CWinApp bir parçası olarak MFC tarafından sağlanan WinMain işlev tarafından çağrılır. MFC kullanan konsol uygulamaları için doğrudan çağrılmalıdır.

AfxBeginThread

Yeni bir iş parçacığı oluşturmak için bu işlevi çağır.

CWinThread* AfxBeginThread(
    AFX_THREADPROC pfnThreadProc,
    LPVOID pParam,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

CWinThread* AfxBeginThread(
    CRuntimeClass* pThreadClass,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

Parametreler

pfnThreadProc
Çalışan iş parçacığı için denetim işlevine işaret ediyor. İşaretçi olamaz NULL. Bu işlev aşağıdaki gibi bildirilmelidir:

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
RUNTIME_CLASS öğesinden CWinThreadtüretilen bir nesnenin .

pParam
Denetim işlevine geçirmek için parametre.

nPriority
İş parçacığı için ayarlanacağı öncelik. Kullanılabilir önceliklerin tam listesi ve açıklaması için Bkz SetThreadPriority . Windows SDK'sı.

nStackSize
Yeni iş parçacığı için yığının bayt cinsinden boyutunu belirtir. 0 ise, yığın boyutu varsayılan olarak oluşturma iş parçacığıyla aynı boyut yığınına sahip olur.

dwCreateFlags
İş parçacığının oluşturulmasını denetleen ek bir bayrak belirtir. Bu bayrak iki değerden birini içerebilir:

  • CREATE_SUSPENDED bir askıya alma sayısı ile iş parçacığını başlatın. İş parçacığı çalışmaya başlamadan önce nesnenin CWinThread veya türetilmiş sınıfınızın herhangi bir üyesi gibi m_bAutoDelete herhangi bir üye verilerini başlatmak istiyorsanız kullanınCREATE_SUSPENDED. Başlatma işleminiz tamamlandıktan sonra, iş parçacığını çalıştırmak için komutunu kullanın CWinThread::ResumeThread . İş parçacığı çağrılana kadar CWinThread::ResumeThread yürütülmeyecek.

  • 0 Oluşturma işleminden hemen sonra iş parçacığını başlatın.

lpSecurityAttrs
İş parçacığının güvenlik özniteliklerini belirten bir SECURITY_ATTRIBUTES yapıya işaret eder. ise NULL, oluşturma iş parçacığıyla aynı güvenlik öznitelikleri kullanılır. Bu yapı hakkında daha fazla bilgi için bkz. Windows SDK'sı.

Dönüş Değeri

Yeni oluşturulan iş parçacığı nesnesinin işaretçisi veya NULL bir hata oluşursa.

Açıklamalar

İlk biçimi AfxBeginThread bir çalışan iş parçacığı oluşturur. İkinci form, kullanıcı arabirimi iş parçacığı veya çalışan iş parçacığı olarak hizmet veren bir iş parçacığı oluşturur.

AfxBeginThread yeni CWinThread bir nesne oluşturur, iş parçacığını CreateThread yürütmeye başlamak için işlevini çağırır ve iş parçacığına bir işaretçi döndürür. Oluşturma işleminin herhangi bir bölümü başarısız olursa tüm nesnelerin serbest bırakıldığından emin olmak için yordam boyunca denetimler yapılır. İş parçacığını sonlandırmak için, iş parçacığının içinden çağırın AfxEndThread veya çalışan iş parçacığının denetim işlevinden dönün.

Çoklu iş parçacığı kullanımı uygulama tarafından etkinleştirilmelidir; aksi takdirde, bu işlev başarısız olur. Çoklu iş parçacığı kullanımını etkinleştirme hakkında daha fazla bilgi için bkz /MD. , /MT, /LD (Çalışma zamanı kitaplığını kullanma).

hakkında AfxBeginThreaddaha fazla bilgi için Multithreading: Creating Worker Threads and Multithreading: Creating User-Interface Threads makalelerine bakın.

Örnek

örneğine CSocket::Attachbakın.

Gereksinimler

Üstbilgi afxwin.h

AfxContextMenuManager

Genel bağlam menüsü yöneticisi işaretçisi.

Sözdizimi

CContextMenuManager* afxContextMenuManager;

Gereksinimler

Üstbilgi: afxcontextmenumanager.h

AfxEndThread

Şu anda yürütülen iş parçacığını sonlandırmak için bu işlevi çağırın.

void AFXAPI AfxEndThread(
    UINT nExitCode,
    BOOL bDelete  = TRUE);

Parametreler

nExitCode
İş parçacığının çıkış kodunu belirtir.

bDelete
İş parçacığı nesnesini bellekten siler.

Açıklamalar

Sonlandırılabilmesi için iş parçacığının içinden çağrılmalıdır.

hakkında AfxEndThreaddaha fazla bilgi için Çoklu İş Parçacığı Kullanımı: İş Parçacıklarını Sonlandırma makalesine bakın.

Gereksinimler

Üstbilgi afxwin.h

AfxFindResourceHandle

Kaynak zincirinde gezinmek ve kaynak kimliğine ve kaynak türüne göre belirli bir kaynağı bulmak için kullanın AfxFindResourceHandle .

Sözdizimi

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

Parametreler

lpszName
Kaynak kimliğini içeren bir dize işaretçisi. lpszType
Kaynak türüne ilişkin bir işaretçi. Kaynak türlerinin listesi için Bkz FindResource . Windows SDK'sı.

Dönüş Değeri

Kaynağı içeren modülün tanıtıcısı.

Açıklamalar

AfxFindResourceHandle belirli bir kaynağı bulur ve kaynağı içeren modüle bir tanıtıcı döndürür. Kaynak, yüklenen herhangi bir MFC uzantısı DLL'sinde olabilir. AfxFindResourceHandle kaynağın hangisinde olduğunu bildirir.

Modüller şu sırayla aranıyor:

  1. MFC uzantı DLL'si ise ana modül.

  2. Sistem dışı modüller.

  3. Dile özgü modüller.

  4. Sistem DLL'si ise ana modül.

  5. Sistem modülleri.

Gereksinimler

Üstbilgi: afxwin.h

AfxFreeLibrary

AfxLoadLibrary Hem hem de AfxFreeLibrary yüklenen her kitaplık modülü için bir başvuru sayısı sağlayın.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

Parametreler

hInstLib
Yüklenen kitaplık modülünün tanıtıcısı. AfxLoadLibrary bu tutamacı döndürür.

Dönüş Değeri

TRUE işlevi başarılı olursa; aksi takdirde , FALSE.

Açıklamalar

AfxFreeLibrary yüklenen dinamik bağlantı kitaplığı (DLL) modülünün başvuru sayısını azaltma. Başvuru sayısı sıfıra ulaştığında, modülün eşlemesi çağrı işleminin adres alanından kaldırılır ve tanıtıcı artık geçerli olmaz. Bu başvuru sayısı her AfxLoadLibrary çağrıldığında artırılır.

Sistem, bir kitaplık modülünün eşlemesini kaldırmadan önce DLL'nin bunu kullanarak işlemlerden ayrılmasını sağlar. Bunu yapmak DLL'ye geçerli işlem için ayrılan kaynakları temizleme fırsatı verir. Giriş noktası işlevi döndürdüğünde kitaplık modülü geçerli işlemin adres alanından kaldırılır.

DLL modülünü eşlemek için kullanın AfxLoadLibrary .

Uygulamanız birden çok iş parçacığı kullanıyorsa ve AfxLoadLibrary (Win32 işlevleri FreeLibrary ve LoadLibraryyerine) kullandığınızdan AfxFreeLibrary emin olun. ve AfxLoadLibrary kullanıldığında, AfxFreeLibrary MFC uzantısı DLL yüklendiğinde ve kaldırıldığında yürütülen başlatma ve kapatma kodunun genel MFC durumunu bozmamasını sağlar.

Örnek

örneğine AfxLoadLibrarybakın.

Gereksinimler

Üstbilgi afxdll_.h

AfxGetApp

Bu işlev tarafından döndürülen işaretçi, ana ileti gönderme kodu veya en üstteki pencere gibi uygulama bilgilerine erişmek için kullanılabilir.

CWinApp* AFXAPI AfxGetApp();

Dönüş Değeri

Uygulama için tek CWinApp nesneye yönelik bir işaretçi.

Açıklamalar

Bu yöntem döndürürse NULL, uygulama ana penceresinin henüz tam olarak başlatılmadığını gösterebilir. Ayrıca bir sorun olduğunu da gösterebilir.

Örnek

// Print the application's executable filename.
TRACE(_T("Executable filename = %s\n"), AfxGetApp()->m_pszExeName);

Gereksinimler

Üstbilgi afxwin.h

AfxGetAppName

Döndürülen dize tanılama iletileri için veya geçici dize adları için kök olarak kullanılabilir.

LPCTSTR AFXAPI AfxGetAppName();

Dönüş Değeri

Uygulamanın adını içeren null olarak sonlandırılan bir dize.

Örnek

// Print the application name to the debugger output window.
TRACE(_T("Application name is %s\n"), AfxGetAppName());

Gereksinimler

Üstbilgi afxwin.h

AfxGetInstanceHandle

Bu işlev, geçerli uygulamanın örnek tutamacını almanıza olanak tanır.

HINSTANCE  AFXAPI AfxGetInstanceHandle();

Dönüş Değeri

Uygulamanın geçerli örneğine yönelik bir HINSTANCE . MFC'nin USRDLL sürümüyle bağlantılı bir DLL'nin içinden çağrılırsa, DLL'ye bir HINSTANCE döndürülür.

Açıklamalar

AfxGetInstanceHandle MFC'nin HINSTANCE USRDLL sürümüyle bağlantılı bir DLL'nin içinden çağrılmadığı sürece yürütülebilir dosyanızın (.EXE) her zaman değerini döndürür. Bu durumda DLL'ye bir HINSTANCE döndürür.

Örnek

// Print the application instance handle to the debugger output window.
TRACE(_T("Application instance handle is 0x%0X\n"), AfxGetInstanceHandle());

Gereksinimler

Üstbilgi afxwin.h

AfxGetMainWnd

Uygulamanız bir OLE sunucusuysa, uygulamanın etkin ana penceresine bir işaretçi almak için bu işlevi çağırın. Uygulama nesnesinin üyesine doğrudan başvurmak m_pMainWnd yerine bu sonucu kullanın.

CWnd* AFXAPI AfxGetMainWnd();

Dönüş Değeri

Sunucuda etkin bir kapsayıcı içinde etkin olan bir nesne varsa, yerinde etkin belgeyi içeren çerçeve penceresi nesnesine bir işaretçi döndürür.

Kapsayıcı içinde etkin olan bir nesne yoksa veya uygulamanız bir OLE sunucusu değilse, bu işlev uygulama nesnenizin değerini m_pMainWnd döndürür.

Uygulamanın birincil iş parçacığından çağrılırsa AfxGetMainWnd , yukarıdaki kurallara göre uygulamanın ana penceresini döndürür. İşlev, uygulamadaki ikincil bir iş parçacığından çağrılırsa, işlev çağrıyı yapan iş parçacığıyla ilişkili ana pencereyi döndürür.

Açıklamalar

Uygulamanız bir OLE sunucusu değilse, bu işlevi çağırmak doğrudan uygulama nesnenizin üyesine m_pMainWnd başvurmaya eşdeğerdir.

Örnek

//The following line send a WM_CLOSE message
//   to the Application's main window. This will cause the
//   Application to exit.
AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);

Gereksinimler

Üstbilgi afxwin.h

AfxGetPerUserRegistration

Uygulamanın kayıt defteri erişimini (HKCU) düğümüne yeniden yönlendirip yönlendirmediğini belirlemek için HKEY_CURRENT_USER bu işlevi kullanın.

BOOL AFXAPI AfxGetPerUserRegistration();

Dönüş Değeri

TRUE kayıt defteri bilgilerinin düğüme yönlendirildiğinden HKCU emin olun. FALSE uygulamanın kayıt defteri bilgilerini varsayılan düğüme yazacak şekilde gösterir. Varsayılan düğüm : HKEY_CLASSES_ROOT (HKCR).

Açıklamalar

Kayıt defteri yeniden yönlendirmesini etkinleştirirseniz, çerçeve erişimini öğesine HKCR HKEY_CURRENT_USER\Software\Classesyönlendirir. Yeniden yönlendirmeden yalnızca MFC ve ATL çerçeveleri etkilenir.

Uygulamanın kayıt defteri erişimini yeniden yönlendirip yönlendirmediğini değiştirmek için kullanın AfxSetPerUserRegistration.

Gereksinimler

Üstbilgi afxstat_.h

AfxGetResourceHandle

Uygulamanın kaynaklarına HINSTANCE , örneğin Windows işlevine yapılan çağrılarda erişmek için bu işlev FindResourcetarafından döndürülen tanıtıcıyı kullanın.

extern HINSTANCE  AfxGetResourceHandle();

Dönüş Değeri

HINSTANCE Uygulamanın varsayılan kaynaklarının yüklendiği tanıtıcı.

Örnek

//Load the menu specifying the module handle where resource is to be
//found & resource ID
HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));

Gereksinimler

Üstbilgi afxwin.h

AfxGetThread

Şu anda yürütülen iş parçacığını temsil eden nesneye CWinThread bir işaretçi almak için bu işlevi çağırın.

CWinThread* AfxGetThread();

Dönüş Değeri

Şu anda yürütülmekte olan iş parçacığının işaretçisi; aksi takdirde NULL.

Açıklamalar

İş parçacığının içinden çağrılmalıdır.

Not

Visual C++ sürüm 4.2, 5.0 veya 6.0'dan çağrı yapan bir MFC projesini AfxGetThread taşımaya devam ediyorsanız, AfxGetThread iş parçacığı bulunamazsa çağırır AfxGetApp . Derleyicinin daha yeni sürümlerinde, AfxGetThread iş parçacığı bulunamazsa döndürür NULL . Uygulama iş parçacığını istiyorsanız çağrısı yapmalısınız AfxGetApp.

Örnek

//Print the current thread ID in the Debug Window
TRACE(_T("Current Thread ID = 0x%X\n"), AfxGetThread()->m_nThreadID);

Gereksinimler

Üstbilgi afxwin.h

AfxInitRichEdit

Uygulamanın zengin düzenleme denetimini (sürüm 1.0) başlatmak için bu işlevi çağırın.

BOOL AFXAPI AfxInitRichEdit();

Açıklamalar

Bu işlev geriye dönük uyumluluk için sağlanır. Yeni uygulamalar kullanmalıdır AfxInitRichEdit2.

AfxInitRichEdit zengin düzenleme denetiminin 1.0 sürümünü başlatmak için yükler RICHED32.DLL . Zengin düzenleme denetiminin RICHED20.DLL 2.0 ve 3.0 sürümlerini kullanmak için yüklenmesi gerekir. çağrısı yapılarak AfxInitRichEdit2yüklenir.

Mevcut Visual C++ uygulamalarında zengin düzenleme denetimlerini sürüm 2.0'a güncelleştirmek için dosyasını açın. RC dosyasını metin olarak yazın, her zengin düzenleme denetiminin sınıf adını "RICHEDIT" yerine "RichEdit20a" olarak değiştirin. Ardından çağrısı AfxInitRichEdit değerini ile AfxInitRichEdit2değiştirin.

Bu işlev, kitaplık işlem için henüz başlatılmamışsa ortak denetim kitaplığını da başlatır. Zengin düzenleme denetimini doğrudan MFC uygulamanızdan kullanıyorsanız, MFC'nin zengin düzenleme denetimi çalışma zamanını düzgün bir şekilde başlatmış olduğundan emin olmak için bu işlevi çağırın. , CRichEditViewveya CRichEditDocyöntemini CRichEditCtrlçağırırsanız Create genellikle bu işlevi çağırmanız gerekmez, ancak bazı durumlarda gerekli olabilir.

Gereksinimler

Üstbilgi afxwin.h

AfxInitRichEdit2

Uygulamanın zengin düzenleme denetimini (sürüm 2.0 ve üzeri) başlatmak için bu işlevi çağırın.

BOOL AFXAPI AfxInitRichEdit2();

Açıklamalar

Zengin düzenleme denetiminin RICHED20.DLL 2.0 sürümünü yüklemek ve başlatmak için bu işlevi çağırın. , CRichEditViewveya CRichEditDocyöntemini CRichEditCtrlçağırırsanız Create genellikle bu işlevi çağırmanız gerekmez, ancak bazı durumlarda gerekli olabilir.

Gereksinimler

Üstbilgi afxwin.h

AfxIsExtendedFrameClass

Verilen pencerenin genişletilmiş çerçeve nesnesi olup olmadığını belirler.

Sözdizimi

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

Parametreler

pWnd
[in] öğesinden CWndtüretilen bir nesnenin işaretçisi.

Dönüş Değeri

TRUE sağlanan pencere genişletilmiş çerçeve nesnesiyse; aksi takdirde FALSE.

Açıklamalar

Bu yöntem, aşağıdaki sınıflardan birinden türetilirse pWnd döndürürTRUE:

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

Bu yöntem, bir işlevin veya yöntem parametresinin genişletilmiş bir çerçeve penceresi olduğunu doğrulamanız gerektiğinde kullanışlıdır.

Gereksinimler

Üstbilgi: afxpriv.h

AfxIsMFCToolBar

Verilen pencerenin bir araç çubuğu nesnesi olup olmadığını belirler.

Sözdizimi

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

Parametreler

pWnd
[in] öğesinden CWndtüretilen bir nesnenin işaretçisi.

Dönüş Değeri

TRUE sağlanan pencere bir araç çubuğu nesnesiyse; aksi takdirde FALSE.

Açıklamalar

Bu yöntem, 'den CMFCToolBartüretilirse pWnd döndürürTRUE. Bu yöntem, bir işlev veya yöntem parametresinin bir CMFCToolBar nesne olduğunu doğrulamanız gerektiğinde kullanışlıdır.

Gereksinimler

Üstbilgi: afxpriv.h

AfxKeyboardManager

Genel klavye yöneticisi işaretçisi.

Sözdizimi

CKeyboardManager* afxKeyboardManager;

Gereksinimler

Üstbilgi: afxkeyboardmanager.h

AfxLoadLibrary

DLL modülünü eşlemek için kullanın AfxLoadLibrary .

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

Parametreler

lpszModuleName
Modülün adını (.DLL veya .EXE dosyası) içeren null olarak sonlandırılan bir dizeyi gösterir. Belirtilen ad, modülün dosya adıdır.

Dize bir yol belirtiyorsa ancak dosya belirtilen dizinde yoksa işlev başarısız olur.

Yol belirtilmezse ve dosya adı uzantısı atlanırsa, varsayılan uzantı .DLL eklenir. Ancak, dosya adı dizesi, modül adının uzantısı olmadığını belirtmek için sondaki bir nokta karakteri (.) içerebilir. Hiçbir yol belirtilmediğinde, işlev Masaüstü Uygulamaları için Arama Sırası'nı kullanır.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri modülün tanıtıcısı olur. Hata durumunda dönüş değeri olur NULL.

Açıklamalar

DLL işlevinin adresini almak için içinde kullanılabilecek GetProcAddress bir tanıtıcı döndürür. AfxLoadLibrary diğer yürütülebilir modülleri eşlemek için de kullanılabilir.

Her işlem, yüklenen her kitaplık modülü için bir başvuru sayısı tutar. Bu başvuru sayısı her AfxLoadLibrary çağrıldığında artırılır ve her çağrılışında AfxFreeLibrary azalmış olur. Başvuru sayısı sıfıra ulaştığında, modülün eşlemesi çağrı işleminin adres alanından kaldırılır ve tanıtıcı artık geçerli olmaz.

Uygulamanız birden çok iş parçacığı kullanıyorsa ve AfxFreeLibrary FreeLibrarydinamik olarak bir MFC uzantı DLL'sini yüklüyse ve (Win32 işlevleri LoadLibrary ve yerine) kullandığınızdan AfxLoadLibrary emin olun. AfxFreeLibrary MFC uzantısı DLL yüklendiğinde ve kaldırıldığında yürütülen başlatma ve kapatma kodunun kullanılması AfxLoadLibrary ve kullanılması genel MFC durumunu bozmaz.

AfxLoadLibrary Bir uygulamada kullanmak için MFC'nin DLL sürümüne dinamik olarak bağlanmanız gerekir. , Afxdll_.hiçin AfxLoadLibraryüst bilgi dosyası yalnızca MFC uygulamaya DLL olarak bağlıysa eklenir. MFC uzantısı DLL'lerini kullanmak veya oluşturmak için MFC'nin DLL sürümüne bağlanmanız gerektiğinden, bu gereksinim tasarım gereğidir.

Örnek

// The following shows how to create a MDI based application
// using a generic CView derived class that is implemented in
// a dynamically loaded MFC Extension DLL.

typedef CRuntimeClass *(*GETDLLVIEW)();

BOOL CUserApp::InitInstance()
{
   // Standard Application Wizard generated initialization excluded.
// Register the application's document templates.  Document templates
//  serve as the connection between documents, frame windows and views

//Load MFC Extension DLL based view class.
m_hViewDll = AfxLoadLibrary(szMyViewDllPath);
if (!m_hViewDll)
{
   CString str;
   str.Format(_T("Error: Cannot find component %s"), szMyViewDllPath);
   AfxMessageBox(str);
   return FALSE;
}

GETDLLVIEW GetMyView = (GETDLLVIEW)GetProcAddress(m_hViewDll, "GetMyView");
ASSERT(GetMyView != NULL);

CMultiDocTemplate *pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_NVC_MFC_DLLUserTYPE,
                                     RUNTIME_CLASS(CUserDoc),
                                     RUNTIME_CLASS(CChildFrame), // custom MDI child frame
                                     GetMyView());
if (!pDocTemplate)
   return FALSE;
AddDocTemplate(pDocTemplate);

// Standard Application Wizard generated initialization excluded.
return TRUE;
}

int CUserApp::ExitInstance()
{
   if (NULL != m_hViewDll)
   {
      AfxFreeLibrary(m_hViewDll);
      m_hViewDll = NULL;
   }

   return CWinApp::ExitInstance();
}

Gereksinimler

Üstbilgi afxdll_.h

AfxLoadLibraryEx

DLL modülünü eşlemek için kullanın AfxLoadLibraryEx .

HINSTANCE AFXAPI AfxLoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);

Parametreler

lpFileName
Modülün adını (.DLL veya .EXE dosyası) içeren null olarak sonlandırılan bir dizeyi gösterir. Belirtilen ad, modülün dosya adıdır.

Dize bir yol belirtiyorsa ancak dosya belirtilen dizinde yoksa işlev başarısız olur.

Yol belirtilmezse ve dosya adı uzantısı atlanırsa, varsayılan uzantı .DLL eklenir. Ancak, dosya adı dizesi, modül adının uzantısı olmadığını belirtmek için sondaki bir nokta karakteri (.) içerebilir. Hiçbir yol belirtilmediğinde, işlev Masaüstü Uygulamaları için Arama Sırası'nı kullanır.

hFile
Bu parametre gelecekte kullanılmak üzere ayrılmıştır. NULLOlmalı.

dwFlags
Modülü yüklerken gerçekleştirilecek eylem. Hiçbir bayrak belirtilmezse, bu işlevin davranışı işlevle AfxLoadLibrary aynıdır. Bu parametrenin olası değerleri belgelerde LoadLibraryEx açıklanmıştır.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri modülün tanıtıcısı olur. Hata durumunda dönüş değeri olur NULL.

Açıklamalar

AfxLoadLibraryEx bir DLL işlevinin adresini almak için içinde GetProcAddress kullanılabilecek bir tanıtıcı döndürür. AfxLoadLibraryEx diğer yürütülebilir modülleri eşlemek için de kullanılabilir.

Her işlem, yüklenen her kitaplık modülü için bir başvuru sayısı tutar. Bu başvuru sayısı her AfxLoadLibraryEx çağrıldığında artırılır ve her çağrılışında AfxFreeLibrary azalmış olur. Başvuru sayısı sıfıra ulaştığında, modülün eşlemesi çağrı işleminin adres alanından kaldırılır ve tanıtıcı artık geçerli olmaz.

Uygulamanız birden çok iş parçacığı kullanıyorsa ve (Win32 işlevleri LoadLibraryEx yerine ve FreeLibrary) ve AfxLoadLibraryEx AfxFreeLibrary bir MFC uzantısı DLL'sini dinamik olarak yüklüp yüklemediğinden emin olun. ve AfxLoadLibraryEx kullanıldığında, AfxFreeLibrary MFC uzantısı DLL yüklendiğinde ve kaldırıldığında yürütülen başlatma ve kapatma kodunun genel MFC durumunu bozmamasını sağlar.

AfxLoadLibraryEx Bir uygulamada kullanmak için MFC'nin DLL sürümüne dinamik olarak bağlanmanız gerekir. , Afxdll_.hiçin AfxLoadLibraryExüst bilgi dosyası yalnızca MFC uygulamaya DLL olarak bağlıysa eklenir. MFC uzantısı DLL'lerini kullanmak veya oluşturmak için MFC'nin DLL sürümüne bağlanmanız gerektiğinden, bu gereksinim tasarım gereğidir.

Gereksinimler

Üstbilgi afxdll_.h

AfxMenuTearOffManager

Genel yırtılma menü yöneticisinin işaretçisi.

Sözdizimi

CMenuTearOffManager* g_pTearOffMenuManager;

Gereksinimler

Üstbilgi: afxmenutearoffmanager.h

AfxMouseManager

Genel fare yöneticisi işaretçisi.

Sözdizimi

CMouseManager* afxMouseManager;

Gereksinimler

Üstbilgi: afxmousemanager.h

AfxRegisterClass

Pencere sınıflarını MFC kullanan bir DLL'ye kaydetmek için bu işlevi kullanın.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

Parametreler

lpWndClass
Kaydedilecek pencere sınıfı hakkında bilgi içeren bir WNDCLASS yapı işaretçisi. Bu yapı hakkında daha fazla bilgi için bkz. Windows SDK'sı.

Dönüş Değeri

TRUE sınıfı başarıyla kaydedildiyse; aksi takdirde FALSE.

Açıklamalar

Bu işlevi kullanırsanız, DLL kaldırıldığında sınıfın kaydı otomatik olarak kaldırılır.

DLL olmayan derlemelerde, AfxRegisterClass bir uygulamada kayıtlı sınıflar otomatik olarak kaydı kaldırıldığından, tanımlayıcı Windows işleviyle RegisterClasseşlenen bir makro olarak tanımlanır. yerine RegisterClasskullanırsanız AfxRegisterClass kodunuz hem uygulamada hem de DLL'de değiştirilmeden kullanılabilir.

Örnek

// Register your unique class name that you wish to use
WNDCLASS wndcls;

memset(&wndcls, 0, sizeof(WNDCLASS));   // start with NULL defaults

wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

//you can specify your own window procedure
wndcls.lpfnWndProc = ::DefWindowProc; 
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.hIcon = LoadIcon(wndcls.hInstance, MAKEINTRESOURCE(IDI_MYICON));
wndcls.hCursor = LoadCursor(wndcls.hInstance, MAKEINTRESOURCE(IDC_ARROW));
wndcls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndcls.lpszMenuName = NULL;

// Specify your own class name for using FindWindow later
wndcls.lpszClassName = _T("MyNewClass");

// Register the new class and trace if it fails
if(!AfxRegisterClass(&wndcls))
{
   TRACE("Class Registration Failed\n");
}

Gereksinimler

Üstbilgi afxwin.h

AfxRegisterWndClass

Kendi pencere sınıflarınızı kaydetmenize olanak tanır.

LPCTSTR AFXAPI AfxRegisterWndClass(
    UINT nClassStyle,
    HCURSOR hCursor = 0,
    HBRUSH hbrBackground = 0,
    HICON hIcon = 0);

Parametreler

nClassStyle
Windows sınıf stilini veya pencere sınıfı için bit düzeyinde OR (|) işleci kullanılarak oluşturulan stillerin birleşimini belirtir. Sınıf stillerinin listesi için Windows SDK'daki yapıya bakın WNDCLASS . ise NULL, varsayılanlar aşağıdaki gibi ayarlanır:

  • Kullanıcı fareye CS_DBLCLKSçift tıkladığında pencere yordamına çift tıklama iletileri gönderen fare stilini olarak ayarlar.

  • Ok imleci stilini Windows standardına IDC_ARROWayarlar.

  • Arka plan fırçasını olarak NULLayarlar, böylece pencere arka planını silmez.

  • Simgeyi standart, dalgalı bayraklı Windows logosu simgesine ayarlar.

hCursor
Pencere sınıfından oluşturulan her pencereye yüklenecek imleç kaynağının tutamacını belirtir. Varsayılan 0'ı kullanırsanız standart IDC_ARROW imleci alırsınız.

hbrBackground
Pencere sınıfından oluşturulan her pencereye yüklenecek fırça kaynağının tutamacını belirtir. Varsayılan olarak 0 kullanırsanız, bir NULL arka plan fırçanız olur ve varsayılan olarak, pencereniz işlenirken WM_ERASEBKGNDarka planını silmez.

hIcon
Pencere sınıfından oluşturulan her pencereye yüklenecek simge kaynağının tanıtıcısını belirtir. Varsayılan olarak 0 kullanırsanız standart, dalgalı bayraklı Windows logo simgesini alırsınız.

Dönüş Değeri

Sınıf adını içeren null olarak sonlandırılan bir dize. Bir pencere oluşturmak için Create bu sınıf adını içindeki üye işlevine CWnd veya diğer **CWnd-**türetilmiş sınıflara geçirebilirsiniz. Ad, Microsoft Foundation Sınıf Kitaplığı tarafından oluşturulur.

Not

Dönüş değeri, statik arabelleğe işaret eden bir işaretçidir. Bu dizeyi kaydetmek için bir CString değişkene atayın.

Açıklamalar

Microsoft Foundation Sınıf Kitaplığı sizin için birkaç standart pencere sınıfını otomatik olarak kaydeder. Kendi pencere sınıflarınızı kaydetmek istiyorsanız bu işlevi çağırabilirsiniz.

tarafından AfxRegisterWndClass bir sınıf için kaydedilen ad yalnızca parametrelere bağlıdır. Aynı parametrelerle birden çok kez çağırırsanız AfxRegisterWndClass , yalnızca ilk çağrıda bir sınıf kaydeder. Daha sonra aynı parametrelere sahip olan öğesine AfxRegisterWndClass yapılan çağrılar zaten kayıtlı sınıf adını döndürür.

Her sınıf için ayrı bir pencere sınıfı almak yerine, aynı parametrelere sahip birden çok CWndtüretilmiş sınıf çağırırsanızAfxRegisterWndClass, her sınıf aynı pencere sınıfını paylaşır. Sınıf stili kullanılırsa CS_CLASSDC bu paylaşım sorunlara neden olabilir. Birden çok CS_CLASSDC pencere sınıfı yerine yalnızca bir CS_CLASSDC pencere sınıfına sahip olursunuz. Bu sınıfı kullanan tüm C++ pencereleri aynı DC'yi paylaşır. Bu sorundan kaçınmak için sınıfını kaydetmek için çağrısında AfxRegisterClass bulunur.

Pencere sınıfı kaydı ve işlevi hakkında daha fazla bilgi için Teknik Not TN001: Pencere Sınıfı Kaydı'na AfxRegisterWndClass bakın.

Örnek

CString strMyClass;

// load stock cursor, brush, and icon for
// my own window class

try
{
   strMyClass = AfxRegisterWndClass(
       CS_VREDRAW | CS_HREDRAW,
       ::LoadCursor(NULL, IDC_ARROW),
       (HBRUSH)::GetStockObject(WHITE_BRUSH),
       ::LoadIcon(NULL, IDI_APPLICATION));
}
catch (CResourceException *pEx)
{
   AfxMessageBox(_T("Couldn't register class! (Already registered?)"));
   pEx->Delete();
}

Gereksinimler

Üstbilgi afxwin.h

AfxSetPerUserRegistration

Uygulamanın kayıt defteri erişimini (HKCU) düğümüne HKEY_CURRENT_USER yeniden yönlendirip yönlendirmeyeceğini ayarlar.

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

Parametreler

bEnable
[in] TRUE kayıt defteri bilgilerinin düğüme yönlendirildiğinden HKCU emin olun. FALSE uygulamanın kayıt defteri bilgilerini varsayılan düğüme yazacak şekilde gösterir. Varsayılan düğüm : HKEY_CLASSES_ROOT (HKCR).

Açıklamalar

Windows Vista'nın öncesinde, kayıt defterine erişen uygulamalar genellikle düğümü kullanırdı HKEY_CLASSES_ROOT . Bununla birlikte, Windows Vista veya sonraki işletim sistemlerinde, uygulamasına HKCRyazmak için yükseltilmiş modda bir uygulama çalıştırmanız gerekir.

Bu yöntem, uygulamanızın yükseltilmiş modda çalışmadan kayıt defterini okumasını ve yazmasını sağlar. kayıt defteri erişimini öğesine HKCR HKCUyeniden yönlendirerek çalışır. Daha fazla bilgi için bkz . Bağlayıcı Özellik Sayfaları.

Kayıt defteri yeniden yönlendirmesini etkinleştirirseniz, çerçeve erişimini öğesine HKCR HKEY_CURRENT_USER\Software\Classesyönlendirir. Yeniden yönlendirmeden yalnızca MFC ve ATL çerçeveleri etkilenir.

Varsayılan uygulama altında HKCRkayıt defterine erişir.

Gereksinimler

Üstbilgi afxstat_.h

AfxSetResourceHandle

Uygulamanın varsayılan kaynaklarının HINSTANCE yüklendiği yeri belirleyen tanıtıcıyı ayarlamak için bu işlevi kullanın.

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

Parametreler

hInstResource
Örnek veya modül, uygulamanın kaynaklarının yüklendiği bir .EXE veya DLL dosyasının tanıtıcısıdır.

Örnek

// This code is taken from CMyApp::InitInstance
HINSTANCE hRes = NULL;
hRes = LoadLibrary(_T("Resource.dll"));
if (hRes)
   AfxSetResourceHandle(hRes);

Gereksinimler

Üstbilgi afxwin.h

AfxShellManager

Genel kabuk yöneticisi işaretçisi.

Sözdizimi

CShellManager* afxShellManager;

Gereksinimler

Üstbilgi: afxshellmanager.h

AfxSocketInit

Windows Yuvalarını başlatmak için geçersiz kılmanızda CWinApp::InitInstance bu işlevi çağır.

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

Parametreler

lpwsaData
Bir yapıya işaretçi WSADATA . değerine eşit NULLdeğilselpwsaData, yapısının WSADATA adresi çağrısıyla WSAStartupdoldurulur. Bu işlev, uygulama sonlandırilmeden önce sizin için çağrılmasını da sağlar WSACleanup .

Dönüş Değeri

İşlev başarılı olursa sıfır dışında bir değer, aksi durumda 0.

Açıklamalar

Statik olarak bağlı bir MFC uygulamasında ikincil iş parçacıklarında MFC yuvalarını kullanırken, yuva kitaplıklarını başlatmak için yuvaları kullanan her iş parçacığını çağırmanız AfxSocketInit gerekir. Varsayılan olarak, AfxSocketInit yalnızca birincil iş parçacığında çağrılır.

Gereksinimler

Üstbilgi afxsock.h

AfxUserToolsManager

Genel kullanıcı araçları yöneticisinin işaretçisi.

Sözdizimi

CUserToolsManager* afxUserToolsManager;

Gereksinimler

Üstbilgi: afxusertoolsmanager.h

AfxWinInit

Bu işlev, MFC'yi başlatmak için GUI tabanlı bir uygulamanın başlatılmasının CWinApp bir parçası olarak MFC tarafından sağlanan WinMain işlev tarafından çağrılır.

BOOL AFXAPI AfxWinInit(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine,
    int nCmdShow);

Parametreler

hInstance
Çalışmakta olan modülün tanıtıcısı.

hPrevInstance
Uygulamanın önceki bir örneğine ait tanıtıcı. Win32 tabanlı bir uygulama için bu parametre her zaman NULLşeklindedir.

lpCmdLine
Uygulama için komut satırını belirten null ile sonlandırılan bir dizeyi gösterir.

nCmdShow
Gui uygulamasının ana penceresinin nasıl gösterileceğini belirtir.

Açıklamalar

MFC tarafından sağlanan WinMain işlevi kullanmayan bir konsol uygulaması için, MFC'yi başlatmak için doğrudan aramanız AfxWinInit gerekir.

Kendinizi çağırırsanız AfxWinInit , bir CWinApp sınıfın örneğini bildirmeniz gerekir. Konsol uygulaması için kendi sınıfınızı CWinApp türetmemeyi ve bunun yerine doğrudan bir örneğini CWinApp kullanmayı seçebilirsiniz. Uygulamanız için tüm işlevleri uygulamanızda mainbırakmaya karar verirseniz bu teknik uygundur.

Not

MFC, bir derleme için etkinleştirme bağlamı oluşturduğunda, kullanıcı modülü tarafından sağlanan bir bildirim kaynağını kullanır. Etkinleştirme bağlamı içinde AfxWinInitoluşturulur. Daha fazla bilgi için bkz . MFC Modülü Durumunda Etkinleştirme Bağlamları Desteği.

Örnek

#include <afx.h>
#include <afxdb.h>

int _tmain(int /*argc*/, TCHAR * /*argv[]*/, TCHAR * /*envp[]*/)
{
   int nRetCode = 0;

   // initialize MFC and print and error on failure
   if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
   {
      // TODO: change error code to suit your needs
      _tprintf(_T("Fatal Error: MFC initialization failed\n"));
      nRetCode = 1;
   }
   else
   {
      // try to connect to an ODBC database that doesn't exist
      // (this wouldn't work at all without initializing MFC)

      CDatabase db;
      try
      {
         db.Open(_T("This Databsae Doesn't Exist"));

         // we shouldn't realistically get here

         _tprintf_s(_T("Successful!\n")
                    _T("Closing ...\n"));
         db.Close();
         _tprintf_s(_T("Closed!"));
      }
      catch (CDBException *pEx)
      {
         // we got an exception! print an error message
         // (this wouldn't work without initializing MFC)

         TCHAR sz[1024];

         _tprintf_s(_T("Error: "));
         if (pEx->GetErrorMessage(sz, 1024))
            _tprintf_s(sz);
         else
            _tprintf_s(_T("No error message was available"));
         _tprintf_s(_T("\n"));

         pEx->Delete();

         nRetCode = 1;
      }
   }

   return nRetCode;
}

Gereksinimler

Üstbilgi afxwin.h

Ayrıca bkz.

Makrolar ve Genel Ayarlar
CWinApp Sınıf
CContextMenuManager Sınıf
CWnd Sınıf
CFrameWndEx Sınıf
CMFCToolBar Sınıf
CKeyboardManager Sınıf
CMenuTearOffManager Sınıf
CMouseManager Sınıf
CShellManager Sınıf
CUserToolsManager Sınıf