Я нашел решение. Причина, по которой у меня были такие трудные времена, заключается в том, что я не использовал Class Wizard для создания нового класса, что усложняло ситуацию. Если вы просто используете мастер классов, у вас есть возможность добавить управляющие переменные к своим производным классам, как если бы они были обычными классами, если базовый класс является правильным классом для вашего элемента. Это не обязательно, хотя. Все, что вам нужно сделать, это создать указатель типа вашего производного класса и привести объект, который вы пытаетесь получить, как вы обычно делаете с не производным классом.
Пример доступа к элементу управления Edit с использованием класса, производного от CEdit
CMyCustomEdit * editPtr = (CMyCustomEdit*)GetDlgItem(IDC_EDIT1);
Как упомянуто ниже другим участником (спасибо за это), использование GetDlgItem не очень хорошая идея. На самом деле, в моем коде я обнаружил подклассы, чтобы я мог использовать свой новый класс с уже существующими элементами управления Edit. Как упоминалось ранее, я не понимал, что элемент управления Edit не обязательно был присоединен к CEdit, поэтому приведенный выше пример должен дать четкое представление о том, что ваш IDC_EDIT можно использовать как CMyCustomEdit, а также CWnd и т. Д .; он будет вести себя естественно, пока вы ссылаетесь на него с правильными классами.
Теперь для подкласса. Если вы действительно хотите, чтобы ваш элемент управления Edit всегда вызывал производный класс перед базовым классом, вам придется сделать его подклассом. Не думайте об этом как об объектно-ориентированной концепции, это только для того, чтобы сообщения (типа WN_CHAR) сначала проходили через ваш производный класс, а затем вызывали базовый класс.
Пример подкласса CMyCustomEdit для элемента управления Edit:
Сначала вам нужно включить файл .h вашего нового класса в .cpp и .h вашего диалогового окна. Это те, которые обычно имеют то же имя, что и ваш проект. Здесь это будет MyMainDialog.
#include "CMyCustomEdit.h"
В производном диалоговом классе включите переменную типа вашего нового производного класса:
class MyMainDialog : public CDialogEx
{
protected:
CMyCustomEdit m_cmCEdit;
}
Затем в OnInitDialog () вашего производного диалогового класса (MyMainDialog) подкласс вашего элемента управления редактирования. В целях безопасности добавьте это после обычного кода в функции и перед возвратом (как обычно):
m_cmCEdit.SubclassDlgItem(IDC_EDIT1, this);
После того, как это будет сделано, когда вы сделаете что-либо в вашем элементе управления Edit с идентификатором IDC_EDIT1, сообщения будут проходить через CMyCustomEdit перед переходом в CEdit. Это обычно необходимо, когда вам нужно перезаписать сообщения из базовых классов.
Надеюсь, это поможет любому с подобным вопросом.