Что такое частные MFC и почему они не доступны через обычный интерфейс? - PullRequest
1 голос
/ 12 января 2010

Я использую 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 ]

5 голосов
/ 12 января 2010

«Частные» файлы MFC - это детали реализации MFC. Точно так же, как вы не захотите или не ожидаете, что пользователи ваших классов получат конфиденциальные данные или методы, вы не должны полагаться на служебный код уровня реализации MFC. Обратите внимание, что практически любая интересная вещь, которую вы можете найти в деталях реализации MFC, доступна публично - где-то. Вам просто нужно копать.

В MFC есть встроенная функциональность, которая делает то, что вы хотите. Он называется RUNTIME_CLASS , а вот пример кода из MSDN:

// Example for RUNTIME_CLASS
CRuntimeClass* prt = RUNTIME_CLASS( CAge );
ASSERT( lstrcmp( prt->m_lpszClassName, "CAge" )  == 0 );
2 голосов
/ 12 января 2010

Это "личное", так как оно находится в дереве исходных текстов, а не во внешней папке включений.

Вы не должны использовать функции, определенные в этих файлах, поскольку они являются внутренними для реализации MFC и вполне могут измениться.

Если вам действительно нужна функциональность, вы можете скопировать код (с соответствующей атрибуцией) и поместить его в один из ваших классов, хотя это далеко от идеала. Я бы тоже переименовал функцию.

...