Was ist private MFC und warum sind sie nicht über die normale Schnittstelle zugänglich?

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

  •  20-09-2019
  •  | 
  •  

Frage

Ich verwende MFC für die GUI -Entwicklung und bin auf eine Funktion gestoßen, die für das, was ich versuche, nützlich sein könnte. Die Funktion ist _afxCompareClassName. Es ist jedoch in der Datei "afximpl.h" enthalten, die sich im Verzeichnis befindet. "VC/ALTMFC/SRC/MFC/afximpl.h ". Normale MFC inklusive im Verzeichnis" VC/ATLMFC/enthalten".

Nach dem, was ich diese Dateien und Funktionen in SRC/MFC gesammelt habe, gelten sie als privates MFC (als private MFC (Laut diesem Typen) und ich sollte sie nicht benutzen. Wieso den ? Diese Funktion sieht gut aus. Es würde mir helfen, zu wissen, wo ich mich derzeit in der Benutzeroberfläche bin.

Letztendlich wollte ich das Verhalten der Flucht-/Rückgabetasten bei der Bearbeitung eines Textfeldes (Kontrolle bearbeiten) ändern. Meine Fragen sind die folgenden:

  • Was ist eine private MFC -Funktion?
  • Warum sollte ich diese Funktionen nicht verwenden (nach dem, was ich gesammelt habe, ändern sie sich oft, also sollte ich sie nicht verwenden. Gibt es einen anderen Grund?)
  • Gibt es eine sauberere Möglichkeit, das zu tun, was ich tun möchte?

Ich war, obwohl es schön wäre, ein paar Informationen über private MFC zu erhalten, da es so weit in keiner Weise zu geben scheint.

Vielen Dank, JC

War es hilfreich?

Lösung

Die 'privaten' MFC -Dateien sind die Implementierungsdetails von MFC. So wie Sie nicht möchten oder erwarten möchten, dass Benutzer Ihrer Klassen in privaten: Daten oder Methoden erhalten, sollten Sie sich nicht auf den MFC-Versorgungscode auf Implementierungsebene verlassen. Beachten Sie, dass fast alle coolen Sache, die Sie in den MFC -Implementierungsdetails finden können, an einem Ort öffentlich verfügbar ist. Du musst nur graben.

In MFC gibt es integrierte Funktionen, die das tut, was Sie wollen. Es heißt RUNTIME_CLASS, und hier ist ein Beispielcode von MSDN:

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

Andere Tipps

Es ist "privat", da es sich eher im Quellbaum als im externen Ordner befindet.

Sie sollten keine Funktionen verwenden, die in diesen Dateien definiert sind, da sie für die Implementierung von MFC intern sind und sich durchaus ändern können.

Wenn Sie wirklich die Funktionalität benötigen, können Sie den Code (mit angemessener Zuschreibung) kopieren und in eine Ihrer Klassen einfügen, obwohl dies alles andere als ideal ist. Ich würde auch die Funktion umbenennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top