Что такое частный MFC и почему они недоступны через обычный интерфейс?

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

  •  20-09-2019
  •  | 
  •  

Вопрос

Я использую 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 и вполне могут измениться.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top