После вызова CWnd::Attach дисэйблится контрол
разрабатываю инструмент, который на основе скрипта создает диалог с элементами управления на MFC. Алгоритм создания примерно таков:
- Разбирается скрипт, создаются хеш-таблицы для хранения данных окна и элементов управления
- Создается диалог с элементами управления. Элементы управления изначально создаются с помощью CWnd::CreateEx
bRet = CWnd::CreateEx(m_dwStyleEx, m_strClassName, m_strCaption, m_dwStyle, m_Rect, pParent, m_ControlID);
- В 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();
}
Что наблюдаю в итоге:
- Attach возвращает TRUE
- EnableWindow(TRUE) возвращает FALSE. Элементы управления заблокированы
- GetLastError возвращает 0 "Операция успешно завершена" Но при этом в класс CMoneyEdit в метод PreTranslateMessage приходят сообщения о перемещении мыши, подскажите пожалуйста кто знает в чем может быть дело почему заблокированы элементы управления и как разрешить данную ситуацию?
Основу создания динамического диалога с элементами взял с CodeProject проект TestDynDialog Динамический диалог на MFC