Что такое частный MFC и почему они недоступны через обычный интерфейс?
Вопрос
Я использую MFC для разработки GUI, и я наткнулся на функцию, которая может быть полезна для того, что я пытаюсь сделать. Функция - _afxcompareClassName. Тем не менее, он включен в файл "afximpl.h", который находится в каталоге "VC/AltMFC/SRC/MFC/afximpl.h ". Нормальный MFC включает в себя в каталоге" VC/ATLMFC/включают".
Теперь из того, что я собрал, эти файлы и функции, расположенные в SRC/MFC, считаются частными MFC (По словам этого парня) и я не должен их использовать. Почему ? Эта функция выглядит красиво. Это помогло бы мне знать, где я сейчас нахожусь в пользовательском интерфейсе.
В конечном счете, я хотел сделать, это изменить поведение клавиш о побеге/возврате при редактировании поля текста (редактировать контроль). Мои вопросы следующие:
- Что такое частная функция MFC?
- Почему я не должен использовать эти функции (из того, что я собрал, они часто меняются, поэтому я не должен их использовать. Есть ли еще одна причина?)
- Есть ли более чистый способ сделать то, что я хочу сделать?
Хотя мне было бы неплохо получить некоторую информацию о частном MFC, так как, похоже, пока нет.
Большое спасибо, JC
Решение
«Частные» файлы MFC - это детали реализации MFC. Точно так же, как вы не хотели бы или ожидали, что пользователи ваших классов получит частные: данные или методы, вы не должны полагаться на код утилиты на уровне реализации MFC. Обратите внимание, что почти любая крутая вещь, которую вы можете найти в деталях реализации MFC, доступна публично - где -то. Тебе просто нужно копать.
В MFC есть встроенная функциональность, которая делает то, что вы хотите. Это называется Runtime_class, и вот пример кода из MSDN:
// Example for RUNTIME_CLASS
CRuntimeClass* prt = RUNTIME_CLASS( CAge );
ASSERT( lstrcmp( prt->m_lpszClassName, "CAge" ) == 0 );
Другие советы
Это «приватный», так как он расположен в дереве исходного дерева, а не в внешней папке.
Вы не должны использовать функции, определенные в этих файлах, поскольку они являются внутренними для реализации MFC и вполне могут измениться.
Если вам действительно нужна функциональность, вы можете скопировать код (с адекватной атрибуцией) и поместить его в один из ваших классов, хотя это далеко не идеально. Я бы тоже переименовал функцию.