Каковы некоторые методы для миграции большого приложения MFC к WPF/.NET?

Каждый столбец в by= сокращается до длины один вместо избыточного дублирования значений до длины группы, .N, занимая больше памяти. Вы по-прежнему можете вычислить сумму путем умножения на .N, хотя:

dt[, x*.N, by=x]

... или вектор полной длины можно добавить к .SD (хотя это никогда не должно быть необходимо): [ 1111]

dt[, sum(.SD$x), by=x, .SDcols="x"]

.SD является «Подмножеством данных» для данной by= группы. Подробности см. В ?.SD или ?.N.

29
задан 17 of 26 27 May 2011 в 14:19
поделиться

5 ответов

Возвращаясь к этому, потому что я успешно заменил наш пользовательский интерфейс MFC верхнего уровня (основной фрейм, окна и панели инструментов) на WPF.

Как оказалось, наш базовый код рисования просто нужно передать HWND для рендеринга. Это позволило очень легко повторно использовать основную часть нашей существующей кодовой базы C ++.

Вот краткое изложение ключевых частей подхода, который я выбрал:

  • Использовал класс .NET HwndHost для размещения HWND для кода рисования C ++ для рендеринга в
  • Созданы оболочки C ++ / CLI для любого собственного кода C ++, который должен быть открыт для кода пользовательского интерфейса WPF / C #
  • Оставил большинство диалогов MFC как есть в собственном коде C ++. Это минимизирует объем работы, необходимый для завершения пользовательского интерфейса. Со временем диалоги MFC могут быть перенесены в WPF.

В качестве примечания, мы используем SandDock и SandRibbon из Divelements и до сих пор очень довольны ими.

10
ответ дан 17 of 26 28 November 2019 в 02:08
поделиться

Я не думаю, что есть более простой способ, который вы не рассмотрели, хотя он, вероятно, будет во многом зависеть от того, насколько хорошо отделена базовая логика от уровня пользовательского интерфейса.

Не желая показаться негативным: ты уверен, что это будет стоить усилий? Если бы я писал большое приложение с нуля, я бы сейчас не начинал с C ++ и MFC, но, увидев, где вы находитесь, что вы действительно выиграете от его переписывания? Будет ли добавлена ​​новая функция, за которую пользователи будут платить? Есть ли пользователи, которых вы отключите, которые не смогут запустить новую версию? Я не могу не подозревать, что вы получите гораздо большую отдачу от инвестиций, если посмотрите на некоторые относительно простые вещи, которые вы можете сделать, чтобы улучшить внешний вид приложения. Например, есть ли у него манифест в стиле XP, чтобы общие элементы управления выглядели как XP? Неужели несколько дней, потраченных на обновление битов (например, с помощью диалоговых окон файлов нового стиля), дадут вам большую часть пути к блестящему новому облику? Имейте в виду, что даже самый новый и блестящий Office 2007 был реализован Microsoft с обычными элементами управления Win32.

3
ответ дан DavidK 28 November 2019 в 02:08
поделиться

Я думаю, вы хорошо разбираетесь в стратегиях. Обратите внимание, что одной из потенциальных проблем при переходе на WPF является то, что не у каждого элемента управления есть дескриптор. К сожалению, это самый неуклюжий сценарий взаимодействия. AFAIK, единственный способ взаимодействия с MFC и WPF - это пройти через WindowsFormsHost . Парадигма WPF также радикально отличается от MFC / WinForms, поэтому там могут быть некоторые проблемы с переводом.

Учитывая вашу большую, но функциональную, унаследованную кодовую базу, я бы, вероятно, поспорил в пользу вашего второго подхода. Начните с одного элемента управления за раз и сделайте его WPF-у. Создайте четко определенный интерфейс между новым управляемым элементом управления и базовой кодовой базой, а затем работайте с этим интерфейсом. Если вы делаете это по одному, вы будете работать с более низкой характеристикой риска: кривая обучения WPF (что довольно круто, imho).

Я чувствую, что важно отметить, что, вероятно, я бы предложил первый подход, если вы собираетесь использовать WinForms. Более тесная парадигма и относительно плавная кривая обучения было бы намного легче проработать сразу.

1
ответ дан Greg D 28 November 2019 в 02:08
поделиться

Мне раньше приходилось проделывать то же самое в проекте, использующем WinForms. Нам нужно было перенести наш проект MFC на .NET 1.1, и мы решили взять все основные функции приложения MFC и написать для них управляемые оболочки. Затем мы написали интерфейс WinForms и по крупицам подключили унаследованный код C ++. Думаю, в конечном итоге мы сделали правильный выбор. Я не могу представить, как бы мы это сделали, если бы одновременно пытались сохранить интерфейс MFC.

2
ответ дан 28 November 2019 в 02:08
поделиться

FWIW, in the interim, you could use the MFC Feature Pack (available with VS2008 SP1) to give your app an Office 2007 look and feel pretty quickly (you can even add a ribbon if it's something your users would like, though this would be more involved.) I revamped the UI for an old MFC app using these new classes in a single day and now, to be fair, it looks fantastic, and my users are very pleased (you can support a whole host of looks and colour schemes.) MS opted for the BCG toolkit, but there are others available if you want to pay a small amount of money (CodeJock for example.)

I know this doesn't answer your question but if it's just UI changes you're after then it might be worth a look.

2
ответ дан 28 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: