Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas pisania aplikacji tworzysz pojedynczy CWinAppobiekt pochodny. Czasami możesz uzyskać informacje o tym obiekcie spoza obiektu pochodnego CWinApp. Może też być potrzebny dostęp do innych globalnych obiektów "menedżera".
Biblioteka klas programu Microsoft Foundation udostępnia następujące funkcje globalne, które ułatwiają wykonywanie tych zadań:
Funkcje informacji o aplikacji i zarządzania
| Name | Description |
|---|---|
AfxBeginThread |
Tworzy nowy wątek. |
AfxContextMenuManager |
Wskaźnik do globalnego menedżera menu kontekstowego. |
AfxEndThread |
Przerywa bieżący wątek. |
AfxFindResourceHandle |
Przeprowadzi łańcuch zasobów i zlokalizuj określony zasób według identyfikatora zasobu i typu zasobu. |
AfxFreeLibrary |
Dekrementuje liczbę odwołań załadowanego modułu biblioteki dynamicznej (DLL). Gdy liczba odwołań osiągnie zero, moduł jest niezamapowany. |
AfxGetApp |
Zwraca wskaźnik do pojedynczego CWinApp obiektu aplikacji. |
AfxGetAppName |
Zwraca ciąg zawierający nazwę aplikacji. |
AfxGetInstanceHandle |
Zwraca reprezentację HINSTANCE tego wystąpienia aplikacji. |
AfxGetMainWnd |
Zwraca wskaźnik do bieżącego okna "głównego" aplikacji innej niż OLE lub okna ramowego w miejscu aplikacji serwera. |
AfxGetPerUserRegistration |
Użyj tej funkcji, aby określić, czy aplikacja przekierowuje dostęp rejestru do węzła (HKEY_CURRENT_USER).HKCU |
AfxGetResourceHandle |
Zwraca wartość do HINSTANCE źródła domyślnych zasobów aplikacji. Użyj polecenia , aby uzyskać bezpośredni dostęp do zasobów aplikacji. |
AfxGetThread |
Retrieves a pointer to the current CWinThread object. |
AfxInitRichEdit |
Inicjuje kontrolkę edycji w wersji 1.0 dla aplikacji. |
AfxInitRichEdit2 |
Inicjuje wersję 2.0 i nowszą zaawansowaną kontrolkę edycji dla aplikacji. |
AfxIsExtendedFrameClass |
Określa, czy dane okno jest obiektem rozszerzonej ramki. |
AfxIsMFCToolBar |
Określa, czy dane okno jest obiektem paska narzędzi. |
AfxKeyboardManager |
Pointer to the global keyboard manager. |
AfxLoadLibrary |
Mapuje moduł DLL i zwraca uchwyt, którego można użyć do uzyskania adresu funkcji DLL. |
AfxLoadLibraryEx |
Mapuje moduł DLL przy użyciu określonych opcji i zwraca uchwyt, który może służyć do uzyskania adresu funkcji DLL. |
AfxMenuTearOffManager |
Wskaźnik do globalnego menedżera menu odrętywania. |
AfxMouseManager |
Pointer to the global mouse manager. |
AfxRegisterClass |
Rejestruje klasę okien w dll używającej MFC. |
AfxRegisterWndClass |
Rejestruje klasę okien systemu Windows, aby uzupełnić te zarejestrowane automatycznie przez MFC. |
AfxSetPerUserRegistration |
Określa, czy aplikacja przekierowuje dostęp rejestru do węzła HKEY_CURRENT_USER (HKCU). |
AfxSetResourceHandle |
Ustawia uchwyt HINSTANCE, w którym są ładowane domyślne zasoby aplikacji. |
AfxShellManager |
Pointer to the global shell manager. |
AfxSocketInit |
Wywołana w przesłonięciu CWinApp::InitInstance w celu zainicjowania gniazd systemu Windows. |
AfxUserToolsManager |
Wskaźnik do globalnego menedżera narzędzi użytkownika. |
AfxWinInit |
Wywoływana przez funkcję dostarczoną WinMain przez MFC w ramach CWinApp inicjowania aplikacji opartej na graficznym interfejsie użytkownika w celu zainicjowania MFC. Należy wywoływać bezpośrednio w przypadku aplikacji konsolowych korzystających z MFC. |
AfxBeginThread
Wywołaj tę funkcję, aby utworzyć nowy wątek.
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);
Parameters
pfnThreadProc
Wskazuje funkcję kontrolującą wątku roboczego. Wskaźnik nie może być .NULL Ta funkcja musi być zadeklarowana w następujący sposób:
UINT __cdecl MyControllingFunction( LPVOID pParam );
pThreadClass
Obiekt RUNTIME_CLASS pochodzący z CWinThreadelementu .
pParam
Parametr do przekazania do funkcji sterującej.
nPriority
Priorytet ustawiany dla wątku. Aby uzyskać pełną listę i opis dostępnych priorytetów, zobacz SetThreadPriority w zestawie Windows SDK.
nStackSize
Określa rozmiar w bajtach stosu dla nowego wątku. Jeśli wartość 0, rozmiar stosu jest domyślnie taki sam, jak wątek tworzenia.
dwCreateFlags
Określa dodatkową flagę, która kontroluje tworzenie wątku. Ta flaga może zawierać jedną z dwóch wartości:
CREATE_SUSPENDEDRozpocznij wątek z liczbą wstrzymania jednego. UżyjCREATE_SUSPENDEDpolecenia , jeśli chcesz zainicjować dowolne daneCWinThreadskładowe obiektu, takie jakm_bAutoDeletelub jakiekolwiek elementy członkowskie klasy pochodnej, przed uruchomieniem wątku. Po zakończeniu inicjowania użyj poleceniaCWinThread::ResumeThread, aby uruchomić wątek. Wątek nie zostanie wykonany, dopókiCWinThread::ResumeThreadnie zostanie wywołany.0 Start the thread immediately after creation.
lpSecurityAttrs
Wskazuje strukturę określającą SECURITY_ATTRIBUTES atrybuty zabezpieczeń wątku. Jeśli NULLsą używane te same atrybuty zabezpieczeń co wątek tworzenia. Aby uzyskać więcej informacji na temat tej struktury, zobacz Zestaw WINDOWS SDK.
Return Value
Wskaźnik do nowo utworzonego obiektu wątku lub NULL jeśli wystąpi awaria.
Remarks
Pierwsza forma tworzenia wątku AfxBeginThread roboczego. Drugi formularz tworzy wątek, który może służyć jako wątek interfejsu użytkownika lub jako wątek procesu roboczego.
AfxBeginThread Tworzy nowy CWinThread obiekt, wywołuje jego CreateThread funkcję, aby rozpocząć wykonywanie wątku i zwraca wskaźnik do wątku. Kontrole są wykonywane w całej procedurze, aby upewnić się, że wszystkie obiekty są prawidłowo cofnięte, jeśli jakakolwiek część tworzenia zakończy się niepowodzeniem. Aby zakończyć wątek, wywołaj AfxEndThread element z wątku lub wróć z funkcji sterującej wątku roboczego.
Wielowątkowość musi być włączona przez aplikację; w przeciwnym razie ta funkcja zakończy się niepowodzeniem. Aby uzyskać więcej informacji na temat włączania wielowątków, zobacz /MD, /MT/LD (Używanie biblioteki czasu wykonywania).
Aby uzyskać więcej informacji na temat AfxBeginThreadprogramu , zobacz artykuły Multithreading: Creating Worker Threads and Multithreading: Creating User-Interface Threads (Tworzenie wątków wielowątku: tworzenie wątków procesu roboczego i wielowątkowość: tworzenie wątków interfejsu użytkownika).
Example
Zobacz przykład dla elementu CSocket::Attach.
Requirements
Headerafxwin.h
AfxContextMenuManager
Wskaźnik do globalnego menedżera menu kontekstowego.
Syntax
CContextMenuManager* afxContextMenuManager;
Requirements
Header:afxcontextmenumanager.h
AfxEndThread
Wywołaj tę funkcję, aby zakończyć aktualnie wykonywany wątek.
void AFXAPI AfxEndThread(
UINT nExitCode,
BOOL bDelete = TRUE);
Parameters
nExitCode
Określa kod zakończenia wątku.
bDelete
Usuwa obiekt wątku z pamięci.
Remarks
Należy wywołać z wewnątrz wątku, aby zakończyć.
Aby uzyskać więcej informacji na temat AfxEndThreadprogramu , zobacz artykuł Multithreading: Terminating Threads (Wielowątkowa obsługa wątków: kończenie wątków).
Requirements
Headerafxwin.h
AfxFindResourceHandle
Służy AfxFindResourceHandle do chodzenia po łańcuchu zasobów i lokalizowania określonego zasobu według identyfikatora zasobu i typu zasobu.
Syntax
HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName, LPCTSTR lpszType );
Parameters
lpszName
Wskaźnik do ciągu zawierającego identyfikator zasobu.
lpszType
Wskaźnik do typu zasobu. Aby uzyskać listę typów zasobów, zobacz FindResource w zestawie Windows SDK.
Return Value
Dojście do modułu zawierającego zasób.
Remarks
AfxFindResourceHandle znajduje określony zasób i zwraca uchwyt do modułu zawierającego zasób. Zasób może znajdować się w dowolnej załadowanej biblioteki DLL rozszerzenia MFC.
AfxFindResourceHandle informuje o tym, który z nich ma zasób.
Moduły są przeszukiwane w następującej kolejności:
Moduł główny, jeśli jest to biblioteka DLL rozszerzenia MFC.
Non-system modules.
Language-specific modules.
Moduł główny, jeśli jest to systemowa biblioteka DLL.
System modules.
Requirements
Header:afxwin.h
AfxFreeLibrary
Zarówno, AfxFreeLibrary jak i AfxLoadLibrary obsługa liczby odwołań dla każdego załadowanego modułu biblioteki.
BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);
Parameters
hInstLib
Uchwyt załadowanego modułu biblioteki.
AfxLoadLibrary zwraca ten uchwyt.
Return Value
TRUE jeśli funkcja powiedzie się; w przeciwnym razie, FALSE.
Remarks
AfxFreeLibrary dekrementuje liczbę odwołań załadowanego modułu biblioteki dynamicznej (DLL). Gdy liczba odwołań osiągnie zero, moduł jest niezamapowany z przestrzeni adresowej procesu wywołującego, a dojście nie jest już prawidłowe. Ta liczba odwołań jest zwiększana za każdym razem, gdy AfxLoadLibrary jest wywoływana.
Przed anulowaniem mapowania modułu biblioteki system umożliwia biblioteki DLL odłączanie od procesów przy użyciu niego. Dzięki temu biblioteka DLL może wyczyścić zasoby przydzielone do bieżącego procesu. Po powrocie funkcji punktu wejścia moduł biblioteki zostanie usunięty z przestrzeni adresowej bieżącego procesu.
Służy AfxLoadLibrary do mapowania modułu DLL.
Pamiętaj, aby używać AfxFreeLibrary funkcji i AfxLoadLibrary (zamiast funkcji FreeLibrary Win32 i LoadLibrary), jeśli aplikacja używa wielu wątków. Użycie AfxLoadLibrary i AfxFreeLibrary gwarantuje, że kod uruchamiania i zamykania, który jest wykonywany, gdy biblioteka DLL rozszerzenia MFC jest ładowana i zwalniana, nie powoduje uszkodzenia globalnego stanu MFC.
Example
Zobacz przykład dla elementu AfxLoadLibrary.
Requirements
Headerafxdll_.h
AfxGetApp
Wskaźnik zwrócony przez tę funkcję może służyć do uzyskiwania dostępu do informacji o aplikacji, takich jak główny kod wysyłania komunikatów lub najbardziej górne okno.
CWinApp* AFXAPI AfxGetApp();
Return Value
Wskaźnik do pojedynczego CWinApp obiektu dla aplikacji.
Remarks
Jeśli ta metoda zwróci NULLwartość , może to oznaczać, że okno główne aplikacji nie zostało jeszcze w pełni zainicjowane. Może to również wskazywać na problem.
Example
// Print the application's executable filename.
TRACE(_T("Executable filename = %s\n"), AfxGetApp()->m_pszExeName);
Requirements
Headerafxwin.h
AfxGetAppName
Zwracany ciąg może służyć do obsługi komunikatów diagnostycznych lub jako katalogu głównego dla nazw ciągów tymczasowych.
LPCTSTR AFXAPI AfxGetAppName();
Return Value
Ciąg zakończony wartością null zawierający nazwę aplikacji.
Example
// Print the application name to the debugger output window.
TRACE(_T("Application name is %s\n"), AfxGetAppName());
Requirements
Headerafxwin.h
AfxGetInstanceHandle
Ta funkcja umożliwia pobranie dojścia wystąpienia bieżącej aplikacji.
HINSTANCE AFXAPI AfxGetInstanceHandle();
Return Value
Element HINSTANCE do bieżącego wystąpienia aplikacji. W przypadku wywołania z biblioteki DLL połączonej z wersją MFC USRDLL zwracany jest parametr do HINSTANCE biblioteki DLL.
Remarks
AfxGetInstanceHandle zawsze zwraca HINSTANCE plik wykonywalny (.EXE), chyba że jest wywoływany z biblioteki DLL połączonej z wersją MFC USRDLL. W tym przypadku zwraca wartość do HINSTANCE biblioteki DLL.
Example
// Print the application instance handle to the debugger output window.
TRACE(_T("Application instance handle is 0x%0X\n"), AfxGetInstanceHandle());
Requirements
Headerafxwin.h
AfxGetMainWnd
Jeśli aplikacja jest serwerem OLE, wywołaj tę funkcję, aby pobrać wskaźnik do aktywnego okna głównego aplikacji. Użyj tego wyniku zamiast bezpośredniego odwoływania się do m_pMainWnd elementu członkowskiego obiektu aplikacji.
CWnd* AFXAPI AfxGetMainWnd();
Return Value
Zwraca wskaźnik do obiektu okna ramki, który zawiera aktywny dokument w miejscu, jeśli serwer ma obiekt, który jest aktywny w aktywnym kontenerze.
Jeśli w kontenerze nie ma aktywnego obiektu lub aplikacja nie jest serwerem OLE, ta funkcja zwraca m_pMainWnd obiekt aplikacji.
Jeśli AfxGetMainWnd jest wywoływany z podstawowego wątku aplikacji, zwraca główne okno aplikacji zgodnie z powyższymi regułami. Jeśli funkcja jest wywoływana z wątku pomocniczego w aplikacji, funkcja zwraca okno główne skojarzone z wątkiem, który wykonał wywołanie.
Remarks
Jeśli aplikacja nie jest serwerem OLE, wywołanie tej funkcji jest równoważne bezpośrednio odwołującemu się do m_pMainWnd elementu członkowskiego obiektu aplikacji.
Example
//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);
Requirements
Headerafxwin.h
AfxGetPerUserRegistration
Użyj tej funkcji, aby określić, czy aplikacja przekierowuje dostęp rejestru do węzła (HKEY_CURRENT_USER).HKCU
BOOL AFXAPI AfxGetPerUserRegistration();
Return Value
TRUE wskazuje, że informacje o rejestrze są kierowane do węzła HKCU .
FALSE wskazuje, że aplikacja zapisuje informacje rejestru w węźle domyślnym. Domyślny węzeł to HKEY_CLASSES_ROOT (HKCR).
Remarks
Jeśli włączysz przekierowywanie rejestru, platforma przekierowuje dostęp z HKCR do HKEY_CURRENT_USER\Software\Classesprogramu . Przekierowanie ma wpływ tylko na struktury MFC i ATL.
Aby zmienić, czy aplikacja przekierowuje dostęp do rejestru, użyj polecenia AfxSetPerUserRegistration.
Requirements
Headerafxstat_.h
AfxGetResourceHandle
Użyj uchwytu HINSTANCE zwróconego przez tę funkcję, aby uzyskać bezpośredni dostęp do zasobów aplikacji, na przykład w wywołaniach funkcji FindResourcesystemu Windows .
extern HINSTANCE AfxGetResourceHandle();
Return Value
Dojście HINSTANCE , w którym są ładowane domyślne zasoby aplikacji.
Example
//Load the menu specifying the module handle where resource is to be
//found & resource ID
HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
Requirements
Headerafxwin.h
AfxGetThread
Wywołaj tę funkcję, aby uzyskać wskaźnik do CWinThread obiektu reprezentującego aktualnie wykonywany wątek.
CWinThread* AfxGetThread();
Return Value
Wskaźnik do aktualnie wykonywanego wątku; w przeciwnym razie NULL.
Remarks
Musi być wywoływana z poziomu wątku.
Note
Jeśli przenosisz projekt MFC wywołujący AfxGetThread z programu Visual C++ w wersji 4.2, 5.0 lub 6.0, wywołaj wywołaniaAfxGetThread, AfxGetApp jeśli nie znaleziono wątku. W nowszych wersjach kompilatora AfxGetThread zwraca wartość NULL , jeśli nie znaleziono wątku. Jeśli chcesz, aby wątek aplikacji był wywoływany AfxGetApp.
Example
//Print the current thread ID in the Debug Window
TRACE(_T("Current Thread ID = 0x%X\n"), AfxGetThread()->m_nThreadID);
Requirements
Headerafxwin.h
AfxInitRichEdit
Wywołaj tę funkcję, aby zainicjować zaawansowaną kontrolkę edycji (wersja 1.0) dla aplikacji.
BOOL AFXAPI AfxInitRichEdit();
Remarks
Ta funkcja jest udostępniana w celu zapewnienia zgodności z poprzednimi wersjami. Nowe aplikacje powinny używać polecenia AfxInitRichEdit2.
AfxInitRichEdit ładuje RICHED32.DLL się, aby zainicjować wersję 1.0 kontrolki edycji wzbogaconej. Aby użyć wersji 2.0 i 3.0 kontrolki edycji wzbogaconej, RICHED20.DLL należy załadować. Jest ładowany przez wywołanie metody AfxInitRichEdit2.
Aby zaktualizować zaawansowane kontrolki edycji w istniejących aplikacjach Visual C++ do wersji 2.0, otwórz plik . Plik RC jako tekst, zmień nazwę klasy każdej kontrolki edycji sformatowanej z "RICHEDIT" na "RichEdit20a". Następnie zastąp wywołanie na AfxInitRichEditAfxInitRichEdit2.
Ta funkcja inicjuje również wspólną bibliotekę kontrolek, jeśli biblioteka nie została jeszcze zainicjowana dla tego procesu. Jeśli używasz kontrolki edycji wzbogaconej bezpośrednio z aplikacji MFC, wywołaj tę funkcję, aby zapewnić prawidłowe zainicjowanie środowiska uruchomieniowego kontrolki edycji wzbogaconej przez MFC. Jeśli wywołasz metodę CreateCRichEditCtrl, CRichEditViewlub CRichEditDoc, zwykle nie trzeba wywoływać tej funkcji, ale w niektórych przypadkach może to być konieczne.
Requirements
Headerafxwin.h
AfxInitRichEdit2
Wywołaj tę funkcję, aby zainicjować kontrolkę edycji wzbogaconej (w wersji 2.0 lub nowszej) dla aplikacji.
BOOL AFXAPI AfxInitRichEdit2();
Remarks
Wywołaj tę funkcję, aby załadować RICHED20.DLL i zainicjować wersję 2.0 kontrolki edycji wzbogaconej. Jeśli wywołasz metodę CreateCRichEditCtrl, CRichEditViewlub CRichEditDoc, zwykle nie trzeba wywoływać tej funkcji, ale w niektórych przypadkach może to być konieczne.
Requirements
Headerafxwin.h
AfxIsExtendedFrameClass
Określa, czy dane okno jest obiektem rozszerzonej ramki.
Syntax
BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );
Parameters
pWnd
[in] Wskaźnik do obiektu, który pochodzi z CWnd.
Return Value
TRUE jeśli podane okno jest obiektem rozszerzonej ramki; w przeciwnym razie FALSE.
Remarks
Ta metoda zwraca wartość TRUE , jeśli pWnd pochodzi z jednej z następujących klas:
CFrameWndExCMDIFrameWndExCOleIPFrameWndExCOleDocIPFrameWndExCMDIChildWndEx
Ta metoda jest przydatna, gdy trzeba sprawdzić, czy parametr funkcji lub metody jest rozszerzonym oknem ramowym.
Requirements
Header:afxpriv.h
AfxIsMFCToolBar
Określa, czy dane okno jest obiektem paska narzędzi.
Syntax
BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);
Parameters
pWnd
[in] Wskaźnik do obiektu, który pochodzi z CWnd.
Return Value
TRUE jeśli podane okno jest obiektem paska narzędzi; w przeciwnym razie FALSE.
Remarks
Ta metoda zwraca wartość TRUE , jeśli pWnd pochodzi z klasy CMFCToolBar. Ta metoda jest przydatna, gdy trzeba sprawdzić, czy parametr funkcji lub metody jest obiektem CMFCToolBar .
Requirements
Header:afxpriv.h
AfxKeyboardManager
Pointer to the global keyboard manager.
Syntax
CKeyboardManager* afxKeyboardManager;
Requirements
Header:afxkeyboardmanager.h
AfxLoadLibrary
Służy AfxLoadLibrary do mapowania modułu DLL.
HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);
Parameters
lpszModuleName
Wskazuje ciąg o wartości null, który zawiera nazwę modułu (plik .DLL lub .EXE). Określona nazwa to nazwa modułu.
Jeśli ciąg określa ścieżkę, ale plik nie istnieje w określonym katalogu, funkcja kończy się niepowodzeniem.
Jeśli ścieżka nie zostanie określona, a rozszerzenie nazwy pliku zostanie pominięte, zostanie dołączone domyślne rozszerzenie .DLL. Jednak ciąg nazwy pliku może zawierać znak punktu końcowego (.), aby wskazać, że nazwa modułu nie ma rozszerzenia. Jeśli nie określono żadnej ścieżki, funkcja używa kolejności wyszukiwania aplikacji klasycznych.
Return Value
Jeśli funkcja powiedzie się, zwracana wartość jest dojściem do modułu. Po niepowodzeniu zwracana wartość to NULL.
Remarks
Zwraca uchwyt, którego można użyć do GetProcAddress pobrania adresu funkcji DLL.
AfxLoadLibrary Można również użyć do mapowania innych modułów wykonywalnych.
Każdy proces utrzymuje liczbę odwołań dla każdego załadowanego modułu biblioteki. Ta liczba odwołań jest zwiększana za każdym razem, gdy AfxLoadLibrary jest wywoływana i jest dekrementowana za każdym razem, gdy AfxFreeLibrary jest wywoływana. Gdy liczba odwołań osiągnie zero, moduł jest niezamapowany z przestrzeni adresowej procesu wywołującego, a dojście nie jest już prawidłowe.
Pamiętaj, aby używać AfxLoadLibrary funkcji i AfxFreeLibrary (zamiast funkcji LoadLibrary Win32 i FreeLibrary), jeśli aplikacja używa wielu wątków, a jeśli dynamicznie ładuje bibliotekę DLL rozszerzenia MFC. Użycie AfxLoadLibrary i AfxFreeLibrary zapewnienie, że kod uruchamiania i zamykania, który jest wykonywany, gdy biblioteka DLL rozszerzenia MFC jest ładowana i zwalniana, nie powoduje uszkodzenia globalnego stanu MFC.
Użycie AfxLoadLibrary w aplikacji wymaga dynamicznego połączenia z wersją biblioteki DLL MFC. Plik nagłówka dla AfxLoadLibraryelementu , Afxdll_.hjest dołączany tylko wtedy, gdy MFC jest połączony z aplikacją jako biblioteka DLL. To wymaganie jest wymagane zgodnie z projektem, ponieważ należy połączyć się z wersją biblioteki DLL MFC, aby używać bibliotek DLL rozszerzeń MFC lub tworzyć biblioteki DLL rozszerzeń MFC.
Example
// 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();
}
Requirements
Headerafxdll_.h
AfxLoadLibraryEx
Służy AfxLoadLibraryEx do mapowania modułu DLL.
HINSTANCE AFXAPI AfxLoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
Parameters
lpFileName
Wskazuje ciąg o wartości null, który zawiera nazwę modułu (plik .DLL lub .EXE). Określona nazwa to nazwa modułu.
Jeśli ciąg określa ścieżkę, ale plik nie istnieje w określonym katalogu, funkcja kończy się niepowodzeniem.
Jeśli ścieżka nie zostanie określona, a rozszerzenie nazwy pliku zostanie pominięte, zostanie dołączone domyślne rozszerzenie .DLL. Jednak ciąg nazwy pliku może zawierać znak punktu końcowego (.), aby wskazać, że nazwa modułu nie ma rozszerzenia. Jeśli nie określono żadnej ścieżki, funkcja używa kolejności wyszukiwania aplikacji klasycznych.
hFile
Ten parametr jest zarezerwowany do użytku w przyszłości. Musi to być NULL.
dwFlags
Akcja, która ma zostać podjęta podczas ładowania modułu. Jeśli nie określono żadnych flag, zachowanie tej funkcji jest identyczne z funkcją AfxLoadLibrary . Możliwe wartości tego parametru są opisane w LoadLibraryEx dokumentacji.
Return Value
Jeśli funkcja powiedzie się, zwracana wartość jest dojściem do modułu. Po niepowodzeniu zwracana wartość to NULL.
Remarks
AfxLoadLibraryEx Zwraca uchwyt, którego można użyć do GetProcAddress pobrania adresu funkcji DLL.
AfxLoadLibraryEx Można również użyć do mapowania innych modułów wykonywalnych.
Każdy proces utrzymuje liczbę odwołań dla każdego załadowanego modułu biblioteki. Ta liczba odwołań jest zwiększana za każdym razem, gdy AfxLoadLibraryEx jest wywoływana i jest dekrementowana za każdym razem, gdy AfxFreeLibrary jest wywoływana. Gdy liczba odwołań osiągnie zero, moduł jest niezamapowany z przestrzeni adresowej procesu wywołującego, a dojście nie jest już prawidłowe.
Pamiętaj, aby używać AfxLoadLibraryEx funkcji i AfxFreeLibrary (zamiast funkcji LoadLibraryEx Win32 i FreeLibrary), jeśli aplikacja używa wielu wątków i czy dynamicznie ładuje bibliotekę DLL rozszerzenia MFC. Użycie AfxLoadLibraryEx i AfxFreeLibrary gwarantuje, że kod uruchamiania i zamykania, który jest wykonywany, gdy biblioteka DLL rozszerzenia MFC jest ładowana i zwalniana, nie powoduje uszkodzenia globalnego stanu MFC.
Użycie AfxLoadLibraryEx w aplikacji wymaga dynamicznego połączenia z wersją biblioteki DLL MFC. Plik nagłówka dla AfxLoadLibraryExelementu , Afxdll_.hjest dołączany tylko wtedy, gdy MFC jest połączony z aplikacją jako biblioteka DLL. To wymaganie jest wymagane zgodnie z projektem, ponieważ należy połączyć się z wersją biblioteki DLL MFC, aby używać bibliotek DLL rozszerzeń MFC lub tworzyć biblioteki DLL rozszerzeń MFC.
Requirements
Headerafxdll_.h
AfxMenuTearOffManager
Wskaźnik do globalnego menedżera menu odrętywania.
Syntax
CMenuTearOffManager* g_pTearOffMenuManager;
Requirements
Header:afxmenutearoffmanager.h
AfxMouseManager
Pointer to the global mouse manager.
Syntax
CMouseManager* afxMouseManager;
Requirements
Header:afxmousemanager.h
AfxRegisterClass
Ta funkcja służy do rejestrowania klas okien w bibliotece DLL korzystającej z MFC.
BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);
Parameters
lpWndClass
Wskaźnik do WNDCLASS struktury zawierającej informacje o klasie okien do zarejestrowania. Aby uzyskać więcej informacji na temat tej struktury, zobacz Zestaw WINDOWS SDK.
Return Value
TRUE jeśli klasa została pomyślnie zarejestrowana; w przeciwnym razie FALSE.
Remarks
Jeśli używasz tej funkcji, klasa jest automatycznie wyrejestrowana, gdy biblioteka DLL zostanie zwolniona.
W kompilacjach innych niż DLL identyfikator jest definiowany jako makro mapowane na funkcję AfxRegisterClasssystemu Windows, RegisterClass ponieważ klasy zarejestrowane w aplikacji są automatycznie wyrejestrowane. Jeśli używasz AfxRegisterClass zamiast RegisterClass, kod może być używany bez zmiany zarówno w aplikacji, jak i w dll.
Example
// 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");
}
Requirements
Headerafxwin.h
AfxRegisterWndClass
Umożliwia zarejestrowanie własnych klas okien.
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0);
Parameters
nClassStyle
Określa styl klasy systemu Windows lub kombinację stylów utworzonych przy użyciu operatora bitowego OR (|) dla klasy okna. Aby uzyskać listę stylów klas, zobacz WNDCLASS strukturę w zestawie Windows SDK. Jeśli NULLwartość domyślna jest ustawiona w następujący sposób:
Ustawia styl myszy na
CS_DBLCLKS, który wysyła komunikaty dwukrotne kliknięcie do procedury okna, gdy użytkownik kliknie dwukrotnie mysz.Ustawia styl kursora strzałki na standardowy
IDC_ARROWsystem Windows.Ustawia szczotkę tła na
NULL, więc okno nie wymazuje tła.Ustawia ikonę na standardową ikonę logo systemu Windows waving-flag.
hCursor
Określa uchwyt zasobu kursora, który ma zostać zainstalowany w każdym oknie utworzonym na podstawie klasy okna. If you use the default of 0, you'll get the standard IDC_ARROW cursor.
hbrBackground
Określa uchwyt zasobu pędzla, który ma zostać zainstalowany w każdym oknie utworzonym na podstawie klasy okna. If you use the default of 0, you'll have a NULL background brush, and by default, your window won't erase its background while processing WM_ERASEBKGND.
hIcon
Określa uchwyt do zasobu ikony, który ma zostać zainstalowany w każdym oknie utworzonym na podstawie klasy okna. If you use the default of 0, you'll get the standard, waving-flag Windows logo icon.
Return Value
Ciąg zakończony wartością null zawierający nazwę klasy. Aby utworzyć okno, możesz przekazać tę nazwę klasy do funkcji składowej Create lub CWnd do innych klas pochodnych ****CWnd-. Nazwa jest generowana przez bibliotekę klas programu Microsoft Foundation.
Note
Wartość zwracana jest wskaźnikiem do buforu statycznego. Aby zapisać ten ciąg, przypisz go do zmiennej CString .
Remarks
Biblioteka klas programu Microsoft Foundation automatycznie rejestruje kilka standardowych klas okien. Wywołaj tę funkcję, jeśli chcesz zarejestrować własne klasy okien.
Nazwa zarejestrowana dla klasy AfxRegisterWndClass zależy wyłącznie od parametrów. Jeśli wywołujesz AfxRegisterWndClass wiele razy z identycznymi parametrami, rejestruje tylko klasę w pierwszym wywołaniu. Później wywołania polecenia AfxRegisterWndClass z identycznymi parametrami zwracają już zarejestrowaną nazwę klasy.
Jeśli wywołasz AfxRegisterWndClass wiele CWndklas pochodnych z identycznymi parametrami, zamiast uzyskać oddzielną klasę okien dla każdej klasy, każda klasa współudzieli tę samą klasę okien. To udostępnianie może powodować problemy, jeśli CS_CLASSDC jest używany styl klasy. Zamiast wielu CS_CLASSDC klas okien kończy się tylko jedną klasą CS_CLASSDC okien. Wszystkie okna C++, które używają tej klasy, współużytkuje ten sam kontroler domeny. Aby uniknąć tego problemu, wywołaj metodę AfxRegisterClass , aby zarejestrować klasę.
Zapoznaj się z dokumentacją techniczną TN001: Rejestracja klas okien, aby uzyskać więcej informacji na temat rejestracji klas okien i AfxRegisterWndClass funkcji.
Example
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();
}
Requirements
Headerafxwin.h
AfxSetPerUserRegistration
Określa, czy aplikacja przekierowuje dostęp rejestru do węzła HKEY_CURRENT_USER (HKCU).
void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);
Parameters
bEnable
[in] TRUE wskazuje, że informacje o rejestrze są kierowane do węzła HKCU .
FALSE wskazuje, że aplikacja zapisuje informacje rejestru w węźle domyślnym. Domyślny węzeł to HKEY_CLASSES_ROOT (HKCR).
Remarks
Przed systemem Windows Vista aplikacje, które uzyskiwały dostęp do rejestru, często używały węzła HKEY_CLASSES_ROOT . Jednak w systemie operacyjnym Windows Vista lub nowszym należy uruchomić aplikację w trybie podwyższonego poziomu uprawnień, aby zapisać w systemie HKCR.
Ta metoda umożliwia aplikacji odczytywanie i zapisywanie w rejestrze bez uruchamiania w trybie podwyższonego poziomu uprawnień. Działa to przez przekierowanie dostępu rejestru z HKCR do HKCU. Aby uzyskać więcej informacji, zobacz Strony właściwości konsolidatora.
Jeśli włączysz przekierowywanie rejestru, platforma przekierowuje dostęp z HKCR do HKEY_CURRENT_USER\Software\Classesprogramu . Przekierowanie ma wpływ tylko na struktury MFC i ATL.
Domyślna implementacja uzyskuje dostęp do rejestru w obszarze HKCR.
Requirements
Headerafxstat_.h
AfxSetResourceHandle
Użyj tej funkcji, aby ustawić HINSTANCE uchwyt, który określa, gdzie są ładowane domyślne zasoby aplikacji.
void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);
Parameters
hInstResource
Wystąpienie lub moduł obsługują plik .EXE lub DLL, z którego są ładowane zasoby aplikacji.
Example
// This code is taken from CMyApp::InitInstance
HINSTANCE hRes = NULL;
hRes = LoadLibrary(_T("Resource.dll"));
if (hRes)
AfxSetResourceHandle(hRes);
Requirements
Headerafxwin.h
AfxShellManager
Pointer to the global shell manager.
Syntax
CShellManager* afxShellManager;
Requirements
Header:afxshellmanager.h
AfxSocketInit
Wywołaj tę funkcję w przesłonięciu CWinApp::InitInstance , aby zainicjować gniazda systemu Windows.
BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);
Parameters
lpwsaData
Wskaźnik do WSADATA struktury. Jeśli lpwsaData wartość nie jest równa NULL, adres WSADATA struktury jest wypełniany przez wywołanie metody WSAStartup. Ta funkcja zapewnia również wywołanie WSACleanup funkcji przed zakończeniem działania aplikacji.
Return Value
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Remarks
W przypadku korzystania z gniazd MFC w wątkach pomocniczych w statycznie połączonej aplikacji MFC należy wywołać AfxSocketInit w każdym wątku, który używa gniazd do inicjowania bibliotek gniazd. Domyślnie AfxSocketInit jest wywoływana tylko w wątku podstawowym.
Requirements
Headerafxsock.h
AfxUserToolsManager
Wskaźnik do globalnego menedżera narzędzi użytkownika.
Syntax
CUserToolsManager* afxUserToolsManager;
Requirements
Header:afxusertoolsmanager.h
AfxWinInit
Ta funkcja jest wywoływana przez funkcję dostarczoną WinMain przez MFC w ramach CWinApp inicjowania aplikacji opartej na graficznym interfejsie użytkownika w celu zainicjowania MFC.
BOOL AFXAPI AfxWinInit(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow);
Parameters
hInstance
Uchwyt aktualnie uruchomionego modułu.
hPrevInstance
Dojście do poprzedniego wystąpienia aplikacji. W przypadku aplikacji opartej na systemie Win32 ten parametr jest zawsze NULL.
lpCmdLine
Wskazuje ciąg zakończony o wartości null określający wiersz polecenia dla aplikacji.
nCmdShow
Określa sposób wyświetlania głównego okna aplikacji graficznego interfejsu użytkownika.
Remarks
W przypadku aplikacji konsolowej, która nie używa funkcji dostarczonej WinMain przez MFC, należy wywołać AfxWinInit ją bezpośrednio, aby zainicjować MFC.
Jeśli wywołasz AfxWinInit się samodzielnie, należy zadeklarować wystąpienie CWinApp klasy. W przypadku aplikacji konsolowej możesz zrezygnować z utworzenia własnej klasy, CWinApp a zamiast tego użyć wystąpienia CWinApp bezpośrednio. Ta technika jest odpowiednia, jeśli zdecydujesz się pozostawić wszystkie funkcje aplikacji we wdrożeniu mainprogramu .
Note
Podczas tworzenia kontekstu aktywacji dla zestawu MFC używa zasobu manifestu dostarczonego przez moduł użytkownika. Kontekst aktywacji jest tworzony w programie AfxWinInit. Aby uzyskać więcej informacji, zobacz Obsługa kontekstów aktywacji w stanie modułu MFC.
Example
#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;
}
Requirements
Headerafxwin.h
See also
Makra i globalne
CWinApp Klasa
CContextMenuManager Klasa
CWnd Klasa
CFrameWndEx Klasa
CMFCToolBar Klasa
CKeyboardManager Klasa
CMenuTearOffManager Klasa
CMouseManager Klasa
CShellManager Klasa
CUserToolsManager Klasa