Qu'est-ce que le MFC privé et pourquoi ne sont-ils pas accessibles via l'interface normale?

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

  •  20-09-2019
  •  | 
  •  

Question

J'utilise MFC pour le développement de GUI et je suis tombé sur une fonction qui pourrait être utile pour ce que j'essaie de faire. La fonction est _AfxCompareClassName. Cependant, il est inclus dans le fichier "afximpl.h" qui est situé dans le répertoire "VC / Altmfc /SRC / MFC/afximpl.h ". Les MFC normaux incluent le répertoire" VC / ATLMFC /comprendre".

Maintenant, à partir de ce que j'ai rassemblé, ces fichiers et fonctions situés dans SRC / MFC sont considérés comme un MFC privé (Selon ce gars) et je ne devrais pas les utiliser. Pourquoi ? Cette fonction est belle. Cela m'aiderait à savoir où je suis actuellement dans l'interface utilisateur.

En fin de compte, ce que je voulais faire était de modifier le comportement des touches d'échappement / retour lors de la modification d'un champ de texte (modification du contrôle). Mes questions sont les suivantes:

  • Qu'est-ce qu'une fonction MFC privée?
  • Pourquoi ne devrais-je pas utiliser ces fonctions (d'après ce que j'ai rassemblé, ils changent souvent, donc c'est pourquoi je ne devrais pas les utiliser. Y a-t-il une autre raison?)
  • Y a-t-il une façon plus propre de faire ce que je cherche à faire?

Je pensais que ce serait bien d'obtenir des informations sur le MFC privé car il ne semble pas y en avoir jusqu'à présent.

Merci beaucoup, JC

Était-ce utile?

La solution

Les fichiers MFC «privés» sont les détails d'implémentation de MFC. Tout comme vous ne voudriez pas ou ne vous attendez pas à ce que les utilisateurs de vos classes obtiennent des données privées: données ou méthodes, vous ne devriez pas compter sur le code d'utilité au niveau de l'implémentation MFC. Notez que presque toutes les choses intéressantes que vous pouvez trouver dans les détails de l'implémentation du MFC sont disponibles publiquement - quelque part. Il vous suffit de creuser.

Il existe des fonctionnalités intégrées dans MFC qui font ce que vous voulez. C'est appelé Runtime_class, et voici un exemple de code de MSDN:

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

Autres conseils

Il est "privé" tel qu'il est situé dans l'arbre source plutôt que dans le dossier inclut externe.

Vous ne devez pas utiliser de fonctions définies dans ces fichiers car elles sont internes à l'implémentation de MFC et pourraient bien changer.

Si vous avez vraiment besoin des fonctionnalités, vous pouvez copier le code (avec une attribution adéquate) et le mettre dans l'une de vos classes, bien que ce soit loin d'être idéal. Je renommerais aussi la fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top