Uygulama Bilgileri ve Yönetimi
Bir uygulama yazdığınızda, tek CWinApp
türetilmiş bir nesne oluşturursunuz. Bazen, türetilmiş nesnenin dışından CWinApp
bu 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 CWinThread
tü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 nesneninCWinThread
veya türetilmiş sınıfınızın herhangi bir üyesi gibim_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ınCWinThread::ResumeThread
. İş parçacığı çağrılana kadarCWinThread::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 AfxBeginThread
daha fazla bilgi için Multithreading: Creating Worker Threads and Multithreading: Creating User-Interface Threads makalelerine bakın.
Örnek
örneğine CSocket::Attach
bakı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 AfxEndThread
daha 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:
MFC uzantı DLL'si ise ana modül.
Sistem dışı modüller.
Dile özgü modüller.
Sistem DLL'si ise ana modül.
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 LoadLibrary
yerine) 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 AfxLoadLibrary
bakı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\Classes
yö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 FindResource
tarafı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 AfxInitRichEdit2
yü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 AfxInitRichEdit2
değ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. , CRichEditView
veya CRichEditDoc
yö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. , CRichEditView
veya CRichEditDoc
yö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 CWnd
tü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 CWnd
tü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 CMFCToolBar
tü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
FreeLibrary
dinamik 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_.h
iç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. NULL
Olmalı.
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_.h
iç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 RegisterClass
eşlenen bir makro olarak tanımlanır. yerine RegisterClass
kullanı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_ARROW
ayarlar.Arka plan fırçasını olarak
NULL
ayarlar, 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_ERASEBKGND
arka 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 CWnd
tü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 HKCR
yazmak 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
HKCU
yeniden 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\Classes
yönlendirir. Yeniden yönlendirmeden yalnızca MFC ve ATL çerçeveleri etkilenir.
Varsayılan uygulama altında HKCR
kayı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 NULL
değilselpwsaData
, yapısının WSADATA
adresi çağrısıyla WSAStartup
doldurulur. 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 main
bı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 AfxWinInit
oluş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