O que é MFC privado e por que eles não são acessíveis através da interface normal?

StackOverflow https://stackoverflow.com/questions/2044999

  •  20-09-2019
  •  | 
  •  

Pergunta

Estou usando o MFC para o desenvolvimento da GUI e tropecei em uma função que poderia ser útil para o que estou tentando fazer. A função é _afxCompareclassName. No entanto, ele está incluído no arquivo "Afximpl.h", localizado no diretório "VC/Altmfc/src/mfc/AFIXPL.H ". O MFC normal inclui estão no diretório" VC/Atlmfc/incluir".

Agora, pelo que reuni esses arquivos e funções localizados em SRC/MFC, são considerados MFC privados (De acordo com esse cara) e eu não deveria usá -los. Por quê ? Esta função parece bonita. Isso me ajudaria a saber onde na interface do usuário eu estou atualmente.

Em última análise, o que eu queria fazer era alterar o comportamento das chaves de fuga/retorno ao editar um campo de texto (Editar Control). Minhas perguntas são as seguintes:

  • O que é uma função MFC privada?
  • Por que eu não deveria usar essas funções (pelo que reuni, elas mudam com frequência, então é por isso que eu não deveria usá -las. Existe outra razão?)
  • Existe uma maneira mais limpa de fazer o que estou procurando?

Eu pensei que seria bom obter algumas informações sobre o MFC privado, pois não parece haver nenhum até agora.

Muito obrigado, JC

Foi útil?

Solução

Os arquivos MFC 'privados' são os detalhes da implementação do MFC. Assim como você não gostaria ou espera que os usuários de suas classes cheguem ao privado: dados ou métodos, você não deve confiar no código do utilitário no nível da implementação do MFC. Observe que quase qualquer coisa legal que você possa encontrar nos detalhes da implementação do MFC está disponível publicamente - em algum lugar. Você só tem que cavar.

Há funcionalidade interna no MFC que faz o que você deseja. É chamado RUNTIME_CLASS, e aqui está o código de amostra do MSDN:

// Example for RUNTIME_CLASS
CRuntimeClass* prt = RUNTIME_CLASS( CAge );
ASSERT( lstrcmp( prt->m_lpszClassName, "CAge" )  == 0 );

Outras dicas

É "privado", pois está localizado na árvore de origem, em vez da externa, inclui pasta.

Você não deve usar as funções definidas nesses arquivos, pois são internas à implementação do MFC e podem muito bem mudar.

Se você realmente precisar da funcionalidade, pode copiar o código (com atribuição adequada) e colocá -la em uma de suas classes, embora isso esteja longe de ser o ideal. Eu renomearia a função também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top