Что такое частные MFC и почему они не доступны через обычный интерфейс?
Я использую MFC для разработки графического интерфейса и наткнулся на функцию, которая может быть полезна для того, что я пытаюсь сделать. Функция является _AfxCompareClassName. Однако он включен в файл "afximpl.h", который находится в каталоге "VC / altmfc /src/mfc/afximpl.h". Обычные включения mfc находятся в каталоге "VC / atlmfc /include".
Теперь из того, что я собрал, эти файлы и функции, расположенные в src/mfc, считаются закрытыми mfc ( согласно этому парню), и я не должен их использовать. Зачем? Эта функция выглядит красиво. Это помогло бы мне узнать, где в пользовательском интерфейсе я в настоящее время.
В конечном итоге я хотел изменить поведение клавиш Escape/ Return при редактировании текстового поля (Edit Control). Мои вопросы следующие:
- Что такое частная функция MFC?
- Почему я не должен использовать эти функции (из того, что я собрал, они часто меняются, поэтому я не должен их использовать. Есть ли другая причина?)
- Есть ли более чистый способ сделать то, что я ищу?
Я думаю, что было бы неплохо получить некоторую информацию о частном MFC, так как на SO пока что нет.
Большое спасибо, JC
2 ответа
"Частные" файлы 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 и вполне могут измениться.
Если вам действительно нужна функциональность, вы можете скопировать код (с соответствующей атрибуцией) и поместить его в один из ваших классов, хотя это далеко от идеала. Я бы тоже переименовал функцию.