Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Ao escrever um aplicativo, você cria um único CWinAppobjeto derivado. Às vezes, você pode querer obter informações sobre esse objeto de fora do CWinAppobjeto derivado. Ou você pode precisar de acesso a outros objetos globais de "gerente".
A Microsoft Foundation Class Library fornece as seguintes funções globais para ajudá-lo a realizar essas tarefas:
Informações de aplicativos e funções de gerenciamento
| Name | Description |
|---|---|
AfxBeginThread |
Cria um novo thread. |
AfxContextMenuManager |
Ponteiro para o gerenciador de menu de contexto global. |
AfxEndThread |
Encerra o thread atual. |
AfxFindResourceHandle |
Percorre a cadeia de recursos e localiza um recurso específico por ID de recurso e tipo de recurso. |
AfxFreeLibrary |
Diminui a contagem de referência do módulo de biblioteca de vínculo dinâmico (DLL) carregado. Quando a contagem de referência atinge zero, o módulo é desmapeado. |
AfxGetApp |
Retorna um ponteiro para o único objeto do CWinApp aplicativo. |
AfxGetAppName |
Retorna uma cadeia de caracteres que contém o nome do aplicativo. |
AfxGetInstanceHandle |
Retorna um HINSTANCE representando esta instância do aplicativo. |
AfxGetMainWnd |
Retorna um ponteiro para a janela "principal" atual de um aplicativo não-OLE ou a janela de quadro in-loco de um aplicativo de servidor. |
AfxGetPerUserRegistration |
Use essa função para determinar se o aplicativo redireciona o acesso do Registro para o HKEY_CURRENT_USER nó (HKCU). |
AfxGetResourceHandle |
Retorna um HINSTANCE para a origem dos recursos padrão do aplicativo. Use para acessar os recursos do aplicativo diretamente. |
AfxGetThread |
Retrieves a pointer to the current CWinThread object. |
AfxInitRichEdit |
Inicializa o controle de edição avançada da versão 1.0 para o aplicativo. |
AfxInitRichEdit2 |
Inicializa a versão 2.0 e posterior do controle de edição avançada para o aplicativo. |
AfxIsExtendedFrameClass |
Determina se a janela dada é um objeto de quadro estendido. |
AfxIsMFCToolBar |
Determina se a janela dada é um objeto da barra de ferramentas. |
AfxKeyboardManager |
Pointer to the global keyboard manager. |
AfxLoadLibrary |
Mapeia um módulo DLL e retorna um identificador que pode ser usado para obter o endereço de uma função DLL. |
AfxLoadLibraryEx |
Mapeia um módulo DLL usando as opções especificadas e retorna um identificador que pode ser usado para obter o endereço de uma função DLL. |
AfxMenuTearOffManager |
Ponteiro para o gerenciador de menu destacável global. |
AfxMouseManager |
Pointer to the global mouse manager. |
AfxRegisterClass |
Registra uma classe de janela em uma DLL que usa MFC. |
AfxRegisterWndClass |
Registra uma classe de janela do Windows para complementar as registradas automaticamente pelo MFC. |
AfxSetPerUserRegistration |
Define se o aplicativo redireciona o acesso do Registro para o HKEY_CURRENT_USER nó (HKCU). |
AfxSetResourceHandle |
Define o identificador HINSTANCE onde os recursos padrão do aplicativo são carregados. |
AfxShellManager |
Pointer to the global shell manager. |
AfxSocketInit |
Chamado em uma substituição para inicializar o CWinApp::InitInstance Windows Sockets. |
AfxUserToolsManager |
Ponteiro para o gerenciador de ferramentas de usuário global. |
AfxWinInit |
Chamado pela função fornecida WinMain pelo MFC, como parte da CWinApp inicialização de um aplicativo baseado em GUI, para inicializar o MFC. Deve ser chamado diretamente para aplicativos de console que usam MFC. |
AfxBeginThread
Chame essa função para criar um novo thread.
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
Aponta para a função de controle para o thread de trabalho. O ponteiro não pode ser NULL. Esta função deve ser declarada da seguinte forma:
UINT __cdecl MyControllingFunction( LPVOID pParam );
pThreadClass
O RUNTIME_CLASS de um objeto derivado de CWinThread.
pParam
Parâmetro para passar para a função de controle.
nPriority
A prioridade a ser definida para o thread. Para obter uma lista completa e uma descrição das prioridades disponíveis, consulte SetThreadPriority o SDK do Windows.
nStackSize
Especifica o tamanho em bytes da pilha para o novo thread. Se 0, o tamanho da pilha assume como padrão o mesmo tamanho da pilha que o thread de criação.
dwCreateFlags
Especifica um sinalizador adicional que controla a criação do thread. Este sinalizador pode conter um de dois valores:
CREATE_SUSPENDEDInicie o thread com uma contagem de suspensão de um. UseCREATE_SUSPENDEDse quiser inicializar quaisquer dados de membro doCWinThreadobjeto, comom_bAutoDeleteou quaisquer membros de sua classe derivada, antes que o thread comece a ser executado. Quando a inicialização estiver concluída, useCWinThread::ResumeThreadpara iniciar a execução do thread. O thread não será executado atéCWinThread::ResumeThreadque seja chamado.0 Start the thread immediately after creation.
lpSecurityAttrs
Aponta para uma SECURITY_ATTRIBUTES estrutura que especifica os atributos de segurança para o thread. Se NULL, os mesmos atributos de segurança que o thread de criação são usados. Para obter mais informações sobre essa estrutura, consulte o SDK do Windows.
Return Value
Ponteiro para o objeto de thread recém-criado ou NULL se ocorrer uma falha.
Remarks
A primeira forma de cria um thread de AfxBeginThread trabalho. O segundo formulário cria um thread que pode servir como um thread de interface do usuário ou como um thread de trabalho.
AfxBeginThread cria um novo CWinThread objeto, chama sua CreateThread função para iniciar a execução do thread e retorna um ponteiro para o thread. As verificações são feitas durante todo o procedimento para garantir que todos os objetos sejam desalocados corretamente caso alguma parte da criação falhe. Para finalizar o thread, chame AfxEndThread de dentro do thread ou retorne da função de controle do thread de trabalho.
Multithreading deve ser habilitado pelo aplicativo; caso contrário, esta função falhará. Para obter mais informações sobre como habilitar o multithreading, consulte /MD, /MT/LD , (Usar biblioteca de tempo de execução).
Para obter mais informações sobre AfxBeginThreado , consulte os artigos Multithreading: Creating Worker Threads e Multithreading: Creating User-Interface Threads.
Example
Veja o exemplo para CSocket::Attach.
Requirements
Headerafxwin.h
AfxContextMenuManager
Ponteiro para o gerenciador de menu de contexto global.
Syntax
CContextMenuManager* afxContextMenuManager;
Requirements
Header:afxcontextmenumanager.h
AfxEndThread
Chame essa função para encerrar o thread em execução no momento.
void AFXAPI AfxEndThread(
UINT nExitCode,
BOOL bDelete = TRUE);
Parameters
nExitCode
Especifica o código de saída do thread.
bDelete
Exclui o objeto thread da memória.
Remarks
Deve ser chamado de dentro do thread para ser encerrado.
Para obter mais informações sobre AfxEndThreado , consulte o artigo Multithreading: Terminating Threads.
Requirements
Headerafxwin.h
AfxFindResourceHandle
Use AfxFindResourceHandle para percorrer a cadeia de recursos e localizar um recurso específico por ID de recurso e tipo de recurso.
Syntax
HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName, LPCTSTR lpszType );
Parameters
lpszName
Um ponteiro para uma cadeia de caracteres que contém a ID do recurso.
lpszType
Um ponteiro para o tipo de recurso. Para obter uma lista de tipos de recursos, consulte FindResource o SDK do Windows.
Return Value
Um identificador para o módulo que contém o recurso.
Remarks
AfxFindResourceHandle Localiza o recurso específico e retorna um identificador para o módulo que contém o recurso. O recurso pode estar em qualquer DLL de extensão MFC carregada.
AfxFindResourceHandle informa qual deles tem o recurso.
Os módulos são pesquisados nesta ordem:
O módulo principal, se for uma DLL de extensão MFC.
Non-system modules.
Language-specific modules.
O módulo principal, se for uma DLL do sistema.
System modules.
Requirements
Header:afxwin.h
AfxFreeLibrary
Ambos AfxFreeLibrary e AfxLoadLibrary manter uma contagem de referência para cada módulo de biblioteca carregado.
BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);
Parameters
hInstLib
Um identificador do módulo de biblioteca carregado.
AfxLoadLibrary retorna esse identificador.
Return Value
TRUE se a função for bem-sucedida; caso contrário, FALSE.
Remarks
AfxFreeLibrary diminui a contagem de referência do módulo de biblioteca de vínculo dinâmico (DLL) carregado. Quando a contagem de referência atinge zero, o módulo é desmapeado do espaço de endereço do processo de chamada e o identificador não é mais válido. Essa contagem de referência é incrementada cada vez AfxLoadLibrary que é chamada.
Antes de desmapear um módulo de biblioteca, o sistema permite que a DLL se desanexe dos processos que o utilizam. Isso dá à DLL a oportunidade de limpar os recursos alocados para o processo atual. Depois que a função de ponto de entrada retorna, o módulo de biblioteca é removido do espaço de endereço do processo atual.
Use AfxLoadLibrary para mapear um módulo DLL.
Certifique-se de usar AfxFreeLibrary e AfxLoadLibrary (em vez das funções FreeLibrary do Win32 e LoadLibrary) se seu aplicativo usa vários threads. Usando AfxLoadLibrary e AfxFreeLibrary garante que o código de inicialização e desligamento que é executado quando a DLL de extensão MFC é carregada e descarregada não corrompe o estado MFC global.
Example
Veja o exemplo para AfxLoadLibrary.
Requirements
Headerafxdll_.h
AfxGetApp
O ponteiro retornado por essa função pode ser usado para acessar informações do aplicativo, como o código principal de envio de mensagens ou a janela superior.
CWinApp* AFXAPI AfxGetApp();
Return Value
Um ponteiro para o único CWinApp objeto para o aplicativo.
Remarks
Se esse método retornar NULL, isso pode indicar que a janela principal do aplicativo ainda não foi totalmente inicializada. Também pode indicar um problema.
Example
// Print the application's executable filename.
TRACE(_T("Executable filename = %s\n"), AfxGetApp()->m_pszExeName);
Requirements
Headerafxwin.h
AfxGetAppName
A cadeia de caracteres retornada pode ser usada para mensagens de diagnóstico ou como uma raiz para nomes de cadeia de caracteres temporários.
LPCTSTR AFXAPI AfxGetAppName();
Return Value
Uma cadeia de caracteres terminada em nulo que contém o nome do aplicativo.
Example
// Print the application name to the debugger output window.
TRACE(_T("Application name is %s\n"), AfxGetAppName());
Requirements
Headerafxwin.h
AfxGetInstanceHandle
Essa função permite que você recupere o identificador de instância do aplicativo atual.
HINSTANCE AFXAPI AfxGetInstanceHandle();
Return Value
Um HINSTANCE para a instância atual do aplicativo. Se chamado de dentro de uma DLL vinculada com a versão USRDLL do MFC, um HINSTANCE para a DLL é retornado.
Remarks
AfxGetInstanceHandle sempre retorna o HINSTANCE do seu arquivo executável (.EXE), a menos que seja chamado de dentro de uma DLL vinculada com a versão USRDLL do MFC. Nesse caso, ele retorna um HINSTANCE para a 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
Se seu aplicativo for um servidor OLE, chame essa função para recuperar um ponteiro para a janela principal ativa do aplicativo. Use esse resultado em vez de se referir diretamente ao m_pMainWnd membro do objeto do aplicativo.
CWnd* AFXAPI AfxGetMainWnd();
Return Value
Retorna um ponteiro para o objeto de janela de quadro que contém o documento ativo in-loco, se o servidor tiver um objeto ativo in-loco dentro de um contêiner ativo.
Se não houver nenhum objeto ativo in-loco em um contêiner ou se seu aplicativo não for um servidor OLE, essa função retornará o m_pMainWnd objeto do aplicativo.
Se AfxGetMainWnd for chamado a partir do thread primário do aplicativo, ele retornará a janela principal do aplicativo de acordo com as regras acima. Se a função for chamada a partir de um thread secundário no aplicativo, a função retornará a janela principal associada ao thread que fez a chamada.
Remarks
Se seu aplicativo não for um servidor OLE, chamar essa função equivale a se referir diretamente ao m_pMainWnd membro do objeto do aplicativo.
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
Use essa função para determinar se o aplicativo redireciona o acesso do Registro para o HKEY_CURRENT_USER nó (HKCU).
BOOL AFXAPI AfxGetPerUserRegistration();
Return Value
TRUE indica que as informações do registro são direcionadas para o HKCU nó.
FALSE Indica que o aplicativo grava informações do Registro no nó padrão. O nó padrão é HKEY_CLASSES_ROOT (HKCR).
Remarks
Se você habilitar o redirecionamento do Registro, a estrutura redirecionará o acesso de HKCR para HKEY_CURRENT_USER\Software\Classes. Apenas as estruturas MFC e ATL são afetadas pelo redirecionamento.
Para alterar se o aplicativo redireciona o acesso ao Registro, use AfxSetPerUserRegistration.
Requirements
Headerafxstat_.h
AfxGetResourceHandle
Use o HINSTANCE identificador retornado por essa função para acessar os recursos do aplicativo diretamente, por exemplo, em chamadas para a função FindResourcedo Windows.
extern HINSTANCE AfxGetResourceHandle();
Return Value
Um HINSTANCE identificador onde os recursos padrão do aplicativo são carregados.
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
Chame essa função para obter um ponteiro para o CWinThread objeto que representa o thread em execução no momento.
CWinThread* AfxGetThread();
Return Value
Ponteiro para o thread em execução no momento; caso contrário NULL.
Remarks
Deve ser chamado de dentro do thread.
Note
Se você estiver portando um projeto MFC chamando AfxGetThread do Visual C++ versões 4.2, 5.0 ou 6.0, AfxGetThread chamará AfxGetApp se nenhum thread for encontrado. Em versões mais recentes do compilador, AfxGetThread retorna NULL se nenhum thread foi encontrado. Se você quiser o thread do aplicativo, você deve chamar 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
Chame essa função para inicializar o controle de edição avançada (versão 1.0) para o aplicativo.
BOOL AFXAPI AfxInitRichEdit();
Remarks
Esta função é fornecida para compatibilidade com versões anteriores. Novos aplicativos devem usar AfxInitRichEdit2.
AfxInitRichEdit
RICHED32.DLL carrega para inicializar a versão 1.0 do controle rich edit. Para usar as versões 2.0 e 3.0 do controle rich edit, RICHED20.DLL precisa ser carregado. Ele é carregado fazendo uma chamada para AfxInitRichEdit2.
Para atualizar controles de edição avançados em aplicativos Visual C++ existentes para a versão 2.0, abra o . RC como texto, altere o nome da classe de cada controle de edição avançado de "RICHEDIT" para "RichEdit20a". Em seguida, substitua a chamada para AfxInitRichEdit por AfxInitRichEdit2.
Essa função também inicializa a biblioteca de controles comuns, se a biblioteca ainda não tiver sido inicializada para o processo. Se você usar o controle rich edit diretamente do seu aplicativo MFC, chame essa função para garantir que o MFC tenha inicializado corretamente o tempo de execução do rich edit control. Se você chamar o Create método de CRichEditCtrl, CRichEditViewou CRichEditDoc, normalmente não precisará chamar essa função, mas em alguns casos pode ser necessário.
Requirements
Headerafxwin.h
AfxInitRichEdit2
Chame essa função para inicializar o controle rich edit (versão 2.0 e posterior) para o aplicativo.
BOOL AFXAPI AfxInitRichEdit2();
Remarks
Chame essa função para carregar e inicializar a RICHED20.DLL versão 2.0 do controle rich edit. Se você chamar o Create método de CRichEditCtrl, CRichEditViewou CRichEditDoc, normalmente não precisará chamar essa função, mas em alguns casos pode ser necessário.
Requirements
Headerafxwin.h
AfxIsExtendedFrameClass
Determina se a janela dada é um objeto de quadro estendido.
Syntax
BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );
Parameters
pWnd
[em] Um ponteiro para um objeto derivado de CWnd.
Return Value
TRUE se a janela fornecida for um objeto de quadro estendido; caso contrário FALSE.
Remarks
Esse método retorna TRUE se pWnd deriva de uma das seguintes classes:
CFrameWndExCMDIFrameWndExCOleIPFrameWndExCOleDocIPFrameWndExCMDIChildWndEx
Esse método é útil quando você precisa validar que uma função ou parâmetro de método é uma janela de quadro estendida.
Requirements
Header:afxpriv.h
AfxIsMFCToolBar
Determina se a janela dada é um objeto da barra de ferramentas.
Syntax
BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);
Parameters
pWnd
[em] Um ponteiro para um objeto derivado de CWnd.
Return Value
TRUE se a janela fornecida for um objeto da barra de ferramentas; caso contrário FALSE.
Remarks
Esse método retorna TRUE se pWnd deriva de CMFCToolBar. Esse método é útil quando você precisa validar que uma função ou parâmetro de método é um CMFCToolBar objeto.
Requirements
Header:afxpriv.h
AfxKeyboardManager
Pointer to the global keyboard manager.
Syntax
CKeyboardManager* afxKeyboardManager;
Requirements
Header:afxkeyboardmanager.h
AfxLoadLibrary
Use AfxLoadLibrary para mapear um módulo DLL.
HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);
Parameters
lpszModuleName
Aponta para uma cadeia de caracteres terminada em nulo que contém o nome do módulo (um arquivo .DLL ou .EXE). O nome especificado é o nome do arquivo do módulo.
Se a cadeia de caracteres especificar um caminho, mas o arquivo não existir no diretório especificado, a função falhará.
Se um caminho não for especificado e a extensão do nome do arquivo for omitida, a extensão padrão .DLL será acrescentada. No entanto, a cadeia de caracteres do nome do arquivo pode incluir um caractere de ponto à direita (.) para indicar que o nome do módulo não tem extensão. Quando nenhum caminho é especificado, a função usa a Ordem de Pesquisa para Aplicativos da Área de Trabalho.
Return Value
Se a função for bem-sucedida, o valor de retorno será um identificador para o módulo. Em caso de falha, o valor de retorno é NULL.
Remarks
Ele retorna um identificador que pode ser usado para GetProcAddress obter o endereço de uma função DLL.
AfxLoadLibrary também pode ser usado para mapear outros módulos executáveis.
Cada processo mantém uma contagem de referência para cada módulo de biblioteca carregado. Esta contagem de referência é incrementada cada vez AfxLoadLibrary que é chamada e é diminuída cada vez AfxFreeLibrary que é chamada. Quando a contagem de referência atinge zero, o módulo é desmapeado do espaço de endereço do processo de chamada e o identificador não é mais válido.
Certifique-se de usar AfxLoadLibrary e AfxFreeLibrary (em vez das funções LoadLibrary Win32 e FreeLibrary) se seu aplicativo usa vários threads e se ele carrega dinamicamente uma DLL de extensão MFC. Usando AfxLoadLibrary e AfxFreeLibrary garante que o código de inicialização e desligamento que é executado quando a DLL de extensão MFC é carregada e descarregada não corrompe o estado MFC global.
Usar AfxLoadLibrary em um aplicativo requer que você vincule dinamicamente à versão DLL do MFC. O arquivo de cabeçalho para AfxLoadLibrary, Afxdll_.h, só será incluído se MFC estiver vinculado ao aplicativo como uma DLL. Este requisito é por design, porque você tem que vincular à versão DLL do MFC para usar ou criar DLLs de extensão 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
Use AfxLoadLibraryEx para mapear um módulo DLL.
HINSTANCE AFXAPI AfxLoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
Parameters
lpFileName
Aponta para uma cadeia de caracteres terminada em nulo que contém o nome do módulo (um arquivo .DLL ou .EXE). O nome especificado é o nome do arquivo do módulo.
Se a cadeia de caracteres especificar um caminho, mas o arquivo não existir no diretório especificado, a função falhará.
Se um caminho não for especificado e a extensão do nome do arquivo for omitida, a extensão padrão .DLL será acrescentada. No entanto, a cadeia de caracteres do nome do arquivo pode incluir um caractere de ponto à direita (.) para indicar que o nome do módulo não tem extensão. Quando nenhum caminho é especificado, a função usa a Ordem de Pesquisa para Aplicativos da Área de Trabalho.
hFile
Este parâmetro está reservado para uso futuro. Tem de ser NULL.
dwFlags
A ação a ser tomada ao carregar o módulo. Se nenhum sinalizador for especificado, o comportamento dessa função será idêntico ao AfxLoadLibrary da função. Os valores possíveis deste parâmetro estão descritos na LoadLibraryEx documentação.
Return Value
Se a função for bem-sucedida, o valor de retorno será um identificador para o módulo. Em caso de falha, o valor de retorno é NULL.
Remarks
AfxLoadLibraryEx retorna um identificador que pode ser usado para GetProcAddress obter o endereço de uma função DLL.
AfxLoadLibraryEx também pode ser usado para mapear outros módulos executáveis.
Cada processo mantém uma contagem de referência para cada módulo de biblioteca carregado. Esta contagem de referência é incrementada cada vez AfxLoadLibraryEx que é chamada e é diminuída cada vez AfxFreeLibrary que é chamada. Quando a contagem de referência atinge zero, o módulo é desmapeado do espaço de endereço do processo de chamada e o identificador não é mais válido.
Certifique-se de usar AfxLoadLibraryEx e AfxFreeLibrary (em vez das funções LoadLibraryEx Win32 e FreeLibrary) se seu aplicativo usa vários threads e se ele carrega dinamicamente uma DLL de extensão MFC. Usando AfxLoadLibraryEx e AfxFreeLibrary garante que o código de inicialização e desligamento que é executado quando a DLL de extensão MFC é carregada e descarregada não corrompe o estado MFC global.
Usar AfxLoadLibraryEx em um aplicativo requer que você vincule dinamicamente à versão DLL do MFC. O arquivo de cabeçalho para AfxLoadLibraryEx, Afxdll_.h, só será incluído se MFC estiver vinculado ao aplicativo como uma DLL. Este requisito é por design, porque você tem que vincular à versão DLL do MFC para usar ou criar DLLs de extensão MFC.
Requirements
Headerafxdll_.h
AfxMenuTearOffManager
Ponteiro para o gerenciador de menu destacável global.
Syntax
CMenuTearOffManager* g_pTearOffMenuManager;
Requirements
Header:afxmenutearoffmanager.h
AfxMouseManager
Pointer to the global mouse manager.
Syntax
CMouseManager* afxMouseManager;
Requirements
Header:afxmousemanager.h
AfxRegisterClass
Use essa função para registrar classes de janela em uma DLL que usa MFC.
BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);
Parameters
lpWndClass
Ponteiro para uma WNDCLASS estrutura que contém informações sobre a classe de janela a ser registrada. Para obter mais informações sobre essa estrutura, consulte o SDK do Windows.
Return Value
TRUE se a classe for registada com sucesso; caso contrário FALSE.
Remarks
Se você usar essa função, a classe será automaticamente desregistrada quando a DLL for descarregada.
Em compilações não-DLL, o AfxRegisterClass identificador é definido como uma macro que mapeia para a função RegisterClassdo Windows, uma vez que as classes registradas em um aplicativo são automaticamente canceladas. Se você usar AfxRegisterClass em vez de RegisterClass, seu código pode ser usado sem alteração em um aplicativo e em uma 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
Permite que você registre suas próprias classes de janela.
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0);
Parameters
nClassStyle
Especifica o estilo de classe do Windows ou a combinação de estilos, criada usando o operador bitwise-OR (|), para a classe window. Para obter uma lista de estilos de classe, consulte a WNDCLASS estrutura no SDK do Windows. Se NULL, os padrões são definidos da seguinte forma:
Define o estilo do mouse como
CS_DBLCLKS, que envia mensagens de clique duplo para o procedimento de janela quando o usuário clica duas vezes no mouse.Define o estilo do cursor de seta como o padrão
IDC_ARROWdo Windows .Define o pincel de fundo como , para
NULLque a janela não apague o fundo.Define o ícone como o ícone padrão do logotipo do Windows com bandeira ondulante.
hCursor
Especifica um identificador para o recurso de cursor a ser instalado em cada janela criada a partir da classe window. If you use the default of 0, you'll get the standard IDC_ARROW cursor.
hbrBackground
Especifica um identificador para o recurso de pincel a ser instalado em cada janela criada a partir da classe window. 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
Especifica um identificador para o recurso de ícone a ser instalado em cada janela criada a partir da classe window. If you use the default of 0, you'll get the standard, waving-flag Windows logo icon.
Return Value
Uma cadeia de caracteres terminada em nulo que contém o nome da classe. Você pode passar esse nome de classe para a Create função de membro em CWnd ou outras classes derivadas **CWnd-**para criar uma janela. O nome é gerado pela Microsoft Foundation Class Library.
Note
O valor de retorno é um ponteiro para um buffer estático. Para salvar essa cadeia de caracteres, atribua-a a uma CString variável.
Remarks
A Microsoft Foundation Class Library registra automaticamente várias classes de janela padrão para você. Chame essa função se você quiser registrar suas próprias classes de janela.
O nome registrado para uma classe por AfxRegisterWndClass depende exclusivamente dos parâmetros. Se você ligar AfxRegisterWndClass várias vezes com parâmetros idênticos, ele registrará apenas uma classe na primeira chamada. Chamadas posteriores com AfxRegisterWndClass parâmetros idênticos retornam o nome de classe já registrado.
Se você chamar AfxRegisterWndClass várias CWndclasses derivadas com parâmetros idênticos, em vez de obter uma classe de janela separada para cada classe, cada classe compartilha a mesma classe de janela. Esse compartilhamento pode causar problemas se o estilo de CS_CLASSDC classe for usado. Em vez de várias CS_CLASSDC classes de janela, você acaba com apenas uma CS_CLASSDC classe de janela. Todas as janelas C++ que usam essa classe compartilham o mesmo DC. Para evitar esse problema, ligue AfxRegisterClass para registrar a classe.
Consulte a Nota Técnica TN001: Window Class Registration para obter mais informações sobre o registro de classe de janela e a AfxRegisterWndClass função.
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
Define se o aplicativo redireciona o acesso do Registro para o HKEY_CURRENT_USER nó (HKCU).
void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);
Parameters
bEnable
[em] TRUE indica que as informações do registro são direcionadas para o HKCU nó.
FALSE Indica que o aplicativo grava informações do Registro no nó padrão. O nó padrão é HKEY_CLASSES_ROOT (HKCR).
Remarks
Antes do Windows Vista, os aplicativos que acessavam o Registro geralmente usavam o HKEY_CLASSES_ROOT nó. No entanto, com o Windows Vista ou sistemas operacionais posteriores, você deve executar um aplicativo no modo elevado para gravar no HKCR.
Esse método permite que seu aplicativo leia e grave no registro sem ser executado no modo elevado. Ele funciona redirecionando o acesso ao registro de HKCR para HKCU. Para obter mais informações, consulte Páginas de propriedades do vinculador.
Se você habilitar o redirecionamento do Registro, a estrutura redirecionará o acesso de HKCR para HKEY_CURRENT_USER\Software\Classes. Apenas as estruturas MFC e ATL são afetadas pelo redirecionamento.
A implementação padrão acessa o registro em HKCR.
Requirements
Headerafxstat_.h
AfxSetResourceHandle
Use essa função para definir o HINSTANCE identificador que determina onde os recursos padrão do aplicativo são carregados.
void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);
Parameters
hInstResource
O identificador de instância ou módulo para um arquivo .EXE ou DLL a partir do qual os recursos do aplicativo são carregados.
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
Chame essa função em sua CWinApp::InitInstance substituição para inicializar o Windows Sockets.
BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);
Parameters
lpwsaData
Um ponteiro para uma WSADATA estrutura. Se lpwsaData não for igual a NULL, o endereço da WSADATA estrutura será preenchido pela chamada para WSAStartup. Esta função também garante que é chamado para você antes que WSACleanup o aplicativo seja encerrado.
Return Value
Diferente de zero se a função for bem-sucedida; caso contrário, 0.
Remarks
Ao usar soquetes MFC em threads secundários em um aplicativo MFC vinculado estaticamente, você deve chamar AfxSocketInit cada thread que usa soquetes para inicializar as bibliotecas de soquetes. Por padrão, AfxSocketInit é chamado apenas no thread primário.
Requirements
Headerafxsock.h
AfxUserToolsManager
Ponteiro para o gerenciador de ferramentas de usuário global.
Syntax
CUserToolsManager* afxUserToolsManager;
Requirements
Header:afxusertoolsmanager.h
AfxWinInit
Esta função é chamada pela função fornecida WinMain pelo MFC, como parte da CWinApp inicialização de um aplicativo baseado em GUI, para inicializar o MFC.
BOOL AFXAPI AfxWinInit(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow);
Parameters
hInstance
O identificador do módulo em execução no momento.
hPrevInstance
Um identificador para uma instância anterior do aplicativo. Para um aplicativo baseado em Win32, esse parâmetro é sempre NULL.
lpCmdLine
Aponta para uma cadeia de caracteres terminada em nulo especificando a linha de comando para o aplicativo.
nCmdShow
Especifica como a janela principal de um aplicativo GUI seria mostrada.
Remarks
Para um aplicativo de console, que não usa a função fornecida WinMain pelo MFC, você deve ligar AfxWinInit diretamente para inicializar o MFC.
Se você se chamar AfxWinInit , deverá declarar uma instância de uma CWinApp classe. Para um aplicativo de console, você pode optar por não derivar sua própria classe e CWinApp , em vez disso, usar uma instância de CWinApp diretamente. Essa técnica é apropriada se você decidir deixar todas as funcionalidades para seu aplicativo na implementação do main.
Note
Quando cria um contexto de ativação para um assembly, o MFC usa um recurso de manifesto fornecido pelo módulo do usuário. O contexto de ativação é criado em AfxWinInit. Para obter mais informações, consulte Suporte para contextos de ativação no estado do módulo 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
Macros e Globais
CWinApp Classe
CContextMenuManager Classe
CWnd Classe
CFrameWndEx Classe
CMFCToolBar Classe
CKeyboardManager Classe
CMenuTearOffManager Classe
CMouseManager Classe
CShellManager Classe
CUserToolsManager Classe