После вызова CWnd::Attach дисэйблится контрол

разрабатываю инструмент, который на основе скрипта создает диалог с элементами управления на MFC. Алгоритм создания примерно таков:

  1. Разбирается скрипт, создаются хеш-таблицы для хранения данных окна и элементов управления
  2. Создается диалог с элементами управления. Элементы управления изначально создаются с помощью CWnd::CreateEx
bRet = CWnd::CreateEx(m_dwStyleEx, m_strClassName, m_strCaption, m_dwStyle, m_Rect, pParent, m_ControlID);
  1. В OnInitDialog для элементов управления создается типы (CEdit, CMoneyEdit — потомок CEdit и т.п.)
CString sType = GetTypeFromField(item.second);
        if (sType.Compare(model::TextBox)==0 && pBaseWnd) {
             item.second.pCtrl = new CEdit();
             CEdit& edt = static_cast<CEdit&>(*item.second.pCtrl);
             BOOL ret = edt.Attach(pBaseWnd->Detach());
             ret= edt.EnableWindow(TRUE);
             if (!ret) {
                 CString msg = utils::GetErrMsg();  //возвращает сообщение на основе GetLastError в данном случае возвращает "Операция успешно завершена"                 
             }
         }
         else if (sType.Compare(model::CurrencyBox) == 0 && pBaseWnd) {
             item.second.pCtrl = new CMoneyEdit();
             CMoneyEdit& edt = static_cast<CMoneyEdit&>(*item.second.pCtrl);
             edt.Attach(pBaseWnd->Detach());
             edt.EnableWindow();
         }

Что наблюдаю в итоге:

  1. Attach возвращает TRUE
  2. EnableWindow(TRUE) возвращает FALSE. Элементы управления заблокированы
  3. GetLastError возвращает 0 "Операция успешно завершена" Но при этом в класс CMoneyEdit в метод PreTranslateMessage приходят сообщения о перемещении мыши, подскажите пожалуйста кто знает в чем может быть дело почему заблокированы элементы управления и как разрешить данную ситуацию?

Основу создания динамического диалога с элементами взял с CodeProject проект TestDynDialog Динамический диалог на MFC


Ответы (0 шт):