Я создал переменную элемента управления для CEdit:
class CGateDlg : public CDialog
{
...
public:
// here is my control's variable
CEdit m_edit_a;
// here I map variable to control
virtual void DoDataExchange(CDataExchange* pDX);
}
И вот как я сопоставляю свою переменную с элементом управления:
void CGateDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_A, m_edit_a);
}
Вот как это работает: пользователь вводит текст в поле для редактирования. Затем он нажимает кнопку «Сброс», которая очищает окно редактирования. Это фрагмент кода, отвечающий за очистку поля редактирования после нажатия кнопки «Сброс»:
void CGateDlg::OnBnClickedReset()
{
// clear edit box
m_edit_a.SetWindowTextW(L"");
}
Приложение запускается без ошибок. Я набираю текст в EditBox и нажимаю кнопку «Сброс». Затем я получаю сообщение об ошибке, которое приводит меня к winocc.cpp, строка 245 (УБЕДИТЕСЬ (это)):
void CWnd::SetWindowText(LPCTSTR lpszString)
{
ENSURE(this);
ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
if (m_pCtrlSite == NULL)
::SetWindowText(m_hWnd, lpszString);
else
m_pCtrlSite->SetWindowText(lpszString);
}
Я думаю, что проблема с hWnd:
this 0x0030fa54 {CEdit hWnd=0x00000000} CWnd * const
а как это исправить?
Все работает нормально, когда я получаю доступ к значению моего элемента управления, используя это:
CEdit *m_edit_a;
m_edit_a = reinterpret_cast<CEdit *>(GetDlgItem(IDC_EDIT_A));
m_edit_a->SetWindowTextW(L"");
Что я делаю не так?