Какой хороший способ добавить графический интерфейс MFC в приложение командной строки Win32 C ++? - PullRequest
1 голос
/ 20 декабря 2009

У нас есть приложение командной строки, которое может получить выгоду от графического интерфейса. Мы хотим добавить некоторые функции построения графиков и определили библиотеку построения графиков, которая использует MFC. Первоначально мы разработали отдельное приложение, но мы бы предпочли иметь графический интерфейс в том же пространстве процесса.

Я думал о графическом интерфейсе в MFC DLL, который мог бы быть размещен в производственном приложении И в тестовом приложении.

Вопросы:

  • Какие шаги необходимы для добавления графического интерфейса MFC в приложение командной строки win32
  • Можно ли создать графический интерфейс в MFC DLL и как это сделать? (чтобы разные приложения могли использовать один и тот же графический интерфейс)

EDIT

Я должен добавить, что это неуправляемое приложение (и оно должно оставаться таким - оно должно быть высокопроизводительным, широко использовать шаблоны, поддержку, пользовательские распределители, внутреннюю сериализацию потоков и т. Д.)

РЕЗУЛЬТАТЫ:

Ответ Ника Д. отлично сработал - особенно дополнительная ссылка в его комментарии с подробностями о обычной MFC DLL .

Обратите внимание, что мы будем использовать Qt для следующей итерации. На этот раз изменить нашу среду сборки и привыкнуть к новой среде было слишком много.

Ответы [ 3 ]

3 голосов
/ 20 декабря 2009

Вы можете вызвать / повторно использовать код GUI в dll. (Я даже использую формы Delphi в моих проектах C ++)

Очень простой пример DLL:

// The DLL exports foo() function
void foo()
{
    AFX_MANAGE_STATE( AfxGetStaticModuleState() );

    CDlgFoo dlg;
    dlg.DoModal();
}

В консольной программе у вас будет такой код:

h = ::LoadLibrary( "my.dll" );
::DisableThreadLibraryCalls( h ); 
pfoo = (foo_type*)::GetProcAddress( h, (const char*)1 );
if ( pfoo ) pfoo();
2 голосов
/ 20 декабря 2009

Во-первых, вам придется отказаться от WinMain ().

Если вы все еще хотите сохранить функциональность аргументов командной строки, обработайте аргументы команды в InitInstance () вашего класса App.

1 голос
/ 20 декабря 2009

Прямой подход заключается в добавлении переключателя в вашу программу, и при заданном значении он запустит графический интерфейс, в противном случае используйте параметры командной строки. Что-то вроде "app.exe -mode = gui". Если вы не видите эту команду arg при запуске программы, вернитесь к старому поведению командной строки.

Что касается DLL, вы можете записать все функциональные возможности пользовательского интерфейса в DLL и использовать ее из своего «производственного приложения», где у вас работает цикл обработки сообщений и WinMain. Но какой в ​​этом смысл? Если это для целей тестирования, почему бы просто не отделить презентацию от логики и проверить только логику. Как вы собираетесь тестировать пользовательский интерфейс в вашем тестовом приложении? Имитация нажатия кнопок?

...