Ответ
Да, имел опыт поддержки и модернизации legacy приложений на MFC. Это фреймворк для разработки Windows-приложений на C++, который предоставляет обёртки над WinAPI.
Основные аспекты работы с MFC:
- Архитектура документа/представления (Document/View):
class CMyDocument : public CDocument { DECLARE_DYNCREATE(CMyDocument) // Данные документа std::vector<DataPoint> m_points; public: BOOL OnNewDocument() override { if (!CDocument::OnNewDocument()) return FALSE; m_points.clear(); return TRUE; } };
class CMyView : public CView { DECLARE_DYNCREATE(CMyView) CMyDocument GetDocument() const { return reinterpret_cast<CMyDocument>(m_pDocument); } void OnDraw(CDC* pDC) override { // Отрисовка данных из документа for (const auto& point : GetDocument()->m_points) { pDC->Ellipse(point.x-5, point.y-5, point.x+5, point.y+5); } } };
2. **Обработка сообщений Windows через макросы:**
```cpp
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_BN_CLICKED(IDC_BUTTON_OK, &CMyDialog::OnButtonOk)
ON_EN_CHANGE(IDC_EDIT_NAME, &CMyDialog::OnEditChange)
ON_WM_PAINT()
END_MESSAGE_MAP()
- Использование стандартных контролов:
CButton,CEdit,CListCtrl,CTreeCtrlс привязкой данных черезDDX_Text,DDX_Control.
Проблемы и решения:
- Устаревший код: Рефакторинг с выделением бизнес-логики из UI-кода
- Многопоточность: Осторожная работа с UI из рабочих потоков через
PostMessage - Совместимость: Поддержка High-DPI, Unicode (переход с
CStringнаCStringW) - Тестирование: Сложность юнит-тестирования из-за тесной связи с WinAPI
В новых проектах предпочитаю использовать Qt или современные UI-фреймворки, но понимание MFC полезно для поддержки существующих enterprise-приложений.