На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> GUI для консольной программы на C++ (Visual Studio 2010)
    Есть работающее консольное приложение на C++ (Visual Studio 2010), в котором идет обращение к функциям Windows API и сторонней DLL, для которой имеются заголовочный файл, файл Lib и DLL. Исходные данные для работы программы находятся в файле XML, обращение к этому файлу идет через библиотеку boost. Программу делал я, она очень далека от идеала, но работает. Возникла задача создать графический интерфейс программы для установки параметров программы, вывода графиков и др. Я слышал о следующих возможностях:
    - создание проекта C++ Windows Forms. Не знаю, насколько при этом тяжело будет обеспечить работу функций Windows API, сторонней и boost библиотеки;
    - перевод программы на QT. Раньше с QT не работал, перейти с Visual Studio на QT для меня будет, наверное, непросто;
    - создание GUI на C#, создание из консольной программы DLL и обращение к функциям DLL из C#. На C# раньше делал простые GUI приложения, несколько раз вызывал из них простые DLL, которые сам и делал.
    Хотел бы узнать о достоинствах и недостатках этих путей решения моей задачи.
      Поздравляю, ты пополнил ряды счастливцев, проигнорировавших FAQ-раздел!

      Графический интерфейс пользователя в приложениях на языке C++

      Добавлено
      От себя добавлю, что для конкретно твоей задачи оптимальным было бы решение на шаблонах диалогов, по-сути, требующее одной единственной правки в проекте: смене типа с _CONSOLE на _WINDOWS, и, соответственно, main на WinMain.
        MFC однозначно :D
          Спасибо за ссылку. Прочитал, понял. Попробую сделать на основе диалогов
            M
            Не забываем про использование функции "Вопрос решён!"
              Переделал программу с Console на Windows (проект RecordSoundWin). Работает нормально, спасибо за подсказку. Решил вначале поработать с проектом Windows Forms, а затем на основе проекта RecordSoundWin создать приложение на основе диалогов. Создал приложение Windows Form в Visual C++ 2010 (RecordSoundNet), посмотрел код. Сделал следующие выводы:
              - в Net проекте Visual C++ напрямую не удастся использовать функцию GetAsioInfo из проекта RecordSoundWin, надо писать какую-то Net-обертку для этой функции;
              - в Net проекте Visual C++ не удастся впрямую вызывать функции WinAPI;
              - для моей задачи единственный способ создать графический интерфейс в Visual С++ (с MFC и QT пробовал работать, не понравилось) без использования сторонних библиотек - это создание приложения на основе диалогов.
              Правильны ли мои выводы?
              Прикреплённый файлПрикреплённый файлRecordSoundWin.zip (22,97 Кбайт, скачиваний: 150)
              Прикреплённый файлПрикреплённый файлRecordSoundNet.zip (11,65 Кбайт, скачиваний: 131)
                Цитата tuchin @
                Переделал программу с Console на Windows (проект RecordSoundWin). Работает нормально, спасибо за подсказку. Решил вначале поработать с проектом Windows Forms, а затем на основе проекта RecordSoundWin создать приложение на основе диалогов.

                а где диалоги? :D
                MFC в зубы и вперед с песней :D
                Сообщение отредактировано: Cfon -
                  Я же указал, что сначала решил попробовать Windows Form. Приложение на основе диалогов (в крайнем случае на MFC буду делать тогда, когда буду уверен, что для моей задачи Visual C++ Windows Form не подходит.Для этого и задал вопросы о возможностях Windows Form применительно к решению моей задачи (использование сторонних библиотек и WinAPI)

                  Добавлено
                  RecordSoundWin не содержит пока диалогов. Я прикрепил его для того, чтобы было ясно, какого типа библиотеки используются и возможно ли их использование в NET C++ без создания сложных NET-оберток
                  Сообщение отредактировано: tuchin -
                    Цитата tuchin @
                    Я же указал, что сначала решил попробовать Windows Form. Приложение на основе диалогов (в крайнем случае на MFC буду делать тогда, когда буду уверен, что для моей задачи Visual C++ Windows Form не подходит.Для этого и задал вопросы о возможностях Windows Form применительно к решению моей задачи (использование сторонних библиотек и WinAPI)

                    Да какой C#! :D
                    Windows Forms для .NET C#, MFC для Win32 API C++.
                    Все!
                      Зачем же тогда создали в Visual C++ проект Windows Form?

                      Добавлено
                      Я думал, что этот тип проекта создан для того, чтобы совместить легкость создания интерфейса C# и низкоуровневые возможности С/C++
                        Цитата tuchin @
                        Зачем же тогда создали в Visual C++ проект Windows Form?

                        Я думал, что этот тип проекта создан для того, чтобы совместить легкость создания интерфейса C# и низкоуровневые возможности С/C++

                        думаю для переноса готовых Win32 приложений на .Net платформу :)
                        ИМХО писать программу под .Net на С++ изврат есть полноценный для этого язык C#. Хотя флаг в руки! :D
                          По-моему, ответы на вопросы автора (сообщение 6) так и не были даны. Мне бы тоже хотелось бы узнать ответы на вопросы:
                          1. Можно ли в Net проекте Visual C++ напрямую использовать функцию (у автора функцию GetAsioInfo), работающую со сторонней библиотекой сишной библиотекой (у автора это bassasio и boost) или нужно создавать Net-обертку для этой функции.
                          2. Можно ли в Net проекте Visual C++ напрямую вызывать функции WinAPI.
                          Я понял автора так: он понимает, что на С# создавать графический интерфейс удобнее и быстрее, но что делать с функциями, которые у него обращаются напрямую к сишным библиотекам и уже работают в проекте на С++? И вопрос в том, позволяет ли Net проект C++ задействовать отлаженные функции, используя для разработки интерфейса Net технологию.

                          Добавлено
                          Цитата Cfon @
                          думаю для переноса готовых Win32 приложений на .Net платформу
                          Вот в этом и вопрос. Как перенести готовое Win32 приложение на Net платформу, не создавая оберток для специфических для C++ функций.
                          Сообщение отредактировано: tumanovalex -
                            Цитата tumanovalex @
                            По-моему, ответы на вопросы автора (сообщение 6) так и не были даны. Мне бы тоже хотелось бы узнать ответы на вопросы:
                            1. Можно ли в Net проекте Visual C++ напрямую использовать функцию (у автора функцию GetAsioInfo), работающую со сторонней библиотекой сишной библиотекой (у автора это bassasio и boost) или нужно создавать Net-обертку для этой функции.
                            2. Можно ли в Net проекте Visual C++ напрямую вызывать функции WinAPI.

                            Юзай PInvoke:
                            ExpandedWrap disabled
                              using namespace System::Runtime::InteropServices;
                               
                              [DllImport("user32")]
                              extern "C" int MessageBoxA(void* hWnd, String^ pText, String^ pCaption, unsigned int uType);
                               
                               
                              [STAThreadAttribute]
                              int main(array<System::String ^> ^args)
                              {
                                  String^ pText = "Hello PInvoke!";
                                  String^ pCaption = "PInvoke Example";  
                                  MessageBoxA(0, pText, pCaption, 0);
                               
                               
                               ...
                              }
                            Сообщение отредактировано: Cfon -
                              1. В FAQ указано следующее: "C++/CLI проект, помимо стандартных библиотек, использует .NET Framework, в том числе и для работы с GUI". Исходя из этого я сделал, видимо, неправильный вывод, что можно взаимодействовать с библиотеками без PInvoke и точно также, как я делал в консольном и Win32 (RecordSoundWin) приложении, которое я сделал с помощью B.V. Взаимодействие с библиотеками через PInvoke возможно и в C#, однако это довольно муторно для большого количества функций в DLL. Видимо, совместить простоту работы с сторонними библиотеками консольного приложения и простоту создания интерфейса в NET проекте С++ невозможно. Очень жаль, если бы это удалось, то получился бы идеальный для меня вариант.
                              2. После прочтения FAQ и чтения ответов в этой ветке я склоняюсь к выбору технологии Dialog Templates (DT) для решения моей задачи. Подскажите, пожалуйста, где я могу найти хороший пример использования этой технологии? Работа с Win32 меня не пугает, постараюсь разобраться.
                                MFC! С Новым Годом петуха! :D
                                Сообщение отредактировано: Cfon -
                                  Или посоветуйте какую-либо толковую книгу или статью по созданию приложений на DT
                                    да какой еще DT :D
                                    существует всего 3 варианта создания программ под Windows: Win32 API напрямую, юзать MFC и Windows Forms под .NET
                                    ВСЕ!

                                    пс. есть конечно еще кросплатформенные решения типа Qt и т.п
                                      Да не нравится мне MFC! Я пробовал программировать на нем, как-то все запутано и нелогично. А прочитав FAQ по графическому интерфейсу, убедился, что он не для меня. Там как-то все зарыто внутри, мне больше нравится, когда я понимаю код и то, что и как он делает. А в FAQ есть упоминание о DT
                                      Сообщение отредактировано: tuchin -
                                        DT - dialog templates? это и есть MFC! :D
                                        а студия сама идет с удобным редактором ресуров.
                                        нет конечно можешь найти левый редактор ресурсов и сляпать на нем шаблон диалога а потом юзать Win32 API так легче да? :D

                                        Цитата tuchin @
                                        Да не нравится мне MFC! Я пробовал программировать на нем, как-то все запутано и нелогично.

                                        ой ой ой какие мы професианалы :D
                                        все там логично. MFC это чисто ОО надстройка над ВинАпи :D

                                        юзай тогда сишный Win32 API он логичнее :D
                                        Сообщение отредактировано: Cfon -
                                          Именно потому, что я не профессионал, MFC и показался очень сложным и запутанным. Подскажите, пожалуйста, тогда, как его правильно осваивать. С наскока у меня не получилось. Может быть есть толковые книги для начинающих? Попробую сделать вторую попытку, раз Вы так убеждены в его незаменимости.
                                            Цитата tuchin @
                                            Именно потому, что я не профессионал, MFC и показался очень сложным и запутанным. Подскажите, пожалуйста, тогда, как его правильно осваивать. С наскока у меня не получилось. Может быть есть толковые книги для начинающих? Попробую сделать вторую попытку, раз Вы так убеждены в его незаменимости.

                                            Лично я по книге "Программирование на Visual C++ 6.0" Д.Круглински, Уингоу, Шеферд осваивал MFC, есть более новая редакция этой книги для новых версий студии.
                                            Еще можно почитать "Visual C++ 2010. Полный курс" Айвор Хортон, но там половина книги идет обучение программированию С++ и С++/CLI, ее можно опустить по желанию, а я прочел :D, другая половина MFC, для начала думаю хватит. Не забываем гуглить, в инете есть много ресурсов по MFC.

                                            Цитата tuchin @
                                            Подскажите, пожалуйста, тогда, как его правильно осваивать. С наскока у меня не получилось.

                                            не не с наскока MFC никак, надо последовательно и методично :)

                                            да еще есть библиотека WTL чисто для ГУЯ, она вроде проще MFC :)
                                            Сообщение отредактировано: Cfon -
                                              Цитата Cfon @
                                              существует всего 3 варианта создания программ под Windows: Win32 API напрямую, юзать MFC и Windows Forms под .NET
                                              ВСЕ!
                                              Ну совсем оптимистично :D

                                              Как насчет VCL у Embarcadero?
                                              tuchin, некоторое время назад только они меня и выручили.
                                              Интерфейс сделал за несколько вечеров.

                                              Касательно лицензии, они раздают в последнее время свой билдер бесплатно с правом коммерческого использования (до $1000 годового оборота компании или лица)
                                                Цитата simsergey @
                                                Ну совсем оптимистично :D

                                                Как насчет VCL у Embarcadero?

                                                не забыл :D
                                                он же на Visual C++, привел для нее варианты :)
                                                  Цитата Cfon @
                                                  Цитата simsergey @
                                                  Как насчет VCL у Embarcadero?
                                                  он же на Visual C++
                                                  :blink: Неожиданно! А будет у вас какая-то ссылка для обоснования сего?
                                                    Цитата Славян @
                                                    Неожиданно! А будет у вас какая-то ссылка для обоснования сего?

                                                    Cfon пишет, что автор темы изначально интересовался Visual C++
                                                    Цитата tuchin @
                                                    Есть работающее консольное приложение на C++ (Visual Studio 2010), в котором идет обращение к функциям Windows API и сторонней DLL

                                                    Он об этом пишет, а не о том, что Вы цитировали :)
                                                      Хор, спасибо! :blush:
                                                        Цитата simsergey @
                                                        Cfon пишет, что автор темы изначально интересовался Visual C++
                                                        Цитата tuchin @
                                                        Есть работающее консольное приложение на C++ (Visual Studio 2010), в котором идет обращение к функциям Windows API и сторонней DLL

                                                        Он об этом пишет, а не о том, что Вы цитировали :)

                                                        :yes: именно так
                                                          Цитата Cfon @
                                                          DT - dialog templates? это и есть MFC!

                                                          Неверно
                                                            Цитата B.V. @
                                                            Цитата Cfon @
                                                            DT - dialog templates? это и есть MFC!

                                                            Неверно

                                                            и что неверно?
                                                              То утверждение, которое я процитировал.
                                                                объясни пожалуйста что такое DT? :)
                                                                  мфц? да, помню в школе лет 15 назад всякие лайнс и прочие поделия лабал на нём... неужели на нем сегодня кто-нибудь что-нибудь серьёзное делает? :wacko: как это ваще с кутэ можно сравнивать :wall:
                                                                    Цитата Cfon @
                                                                    объясни пожалуйста что такое DT?

                                                                    Шаблоны диалогов: https://msdn.microsoft.com/en-us/library/wi...p/ms632588.aspx
                                                                      Цитата _lcf_ @
                                                                      как это ваще с кутэ можно сравнивать
                                                                      А можно в двух словах (для тех кто в танке), в чем есть разница?
                                                                        Цитата _lcf_ @
                                                                        мфц? да, помню в школе лет 15 назад всякие лайнс и прочие поделия лабал на нём... неужели на нем сегодня кто-нибудь что-нибудь серьёзное делает? :wacko: как это ваще с кутэ можно сравнивать :wall:

                                                                        в серьезных конторах программят на MFC :D

                                                                        Добавлено
                                                                        Цитата B.V. @
                                                                        Цитата Cfon @
                                                                        объясни пожалуйста что такое DT?

                                                                        Шаблоны диалогов: https://msdn.microsoft.com/en-us/library/wi...p/ms632588.aspx

                                                                        спс понял имеется ввиду программирование на чистом Win32 API.
                                                                          Попробуй Nana C++
                                                                            simsergey, кутэ это полноценный инструмент из коробки для разработки кроссплатформенных гуёвых приложений. многие телодвижения требующие десяти строк на сях, в кутэ запилены в одну, причем интуитивно понятную. например, qdatetime::currentdatetime.tostring("dd yyyy MMM hh:mm:ss.zzz"), покажите-ка сишный аналог :D хотя есть, естесно, холивары по поводу эффективности отдельных модулей, да лично у меня есть претензии к, например, qtcpsocket или qthread. однако ж никто не мешает особо тонким натурам юзать стд или буст. плюс кошерный механизм сигналов-слотов (сдохните кАлбэки). а мфц... всего лишь сишная либа для создания простейших гуёв. автоматом создающая такую голопомойную иерархию классов, что даже адекватным людям трудно понять, что куда пихать и что где ловить.
                                                                            Цитата Cfon @
                                                                            в серьезных конторах программят на MFC

                                                                            вы отстали от жизни лет на двадцать, подозреваю, что говоря "серьёзные конторы" имеются ввиду болота аля нии, где пропагандируют алгол, фортран, делфи и борланд :lol:
                                                                            Сообщение отредактировано: _lcf_ -
                                                                              Цитата Polinom2686 @
                                                                              Попробуй Nana C++

                                                                              А какие достоинсва-недостатки библиотеки? Она работает с VS2010? В описании нашел только VS2013 и 2015
                                                                                Цитата _lcf_ @
                                                                                simsergey, кутэ это полноценный инструмент из коробки для разработки кроссплатформенных гуёвых приложений. ...

                                                                                Нет сомнений - как и любой другой инструмент.
                                                                                Однако каждый может сделать поиск на своём компе по ключевым
                                                                                символам "QtGui". И тут выяснится, что приложения, основанные
                                                                                на QT есть, но не так уж и много. Logitech, Nokia - используют.
                                                                                Ещё чего-то там. "Partition Wizard".
                                                                                Использование этой библиотеки не ностит массового характера.
                                                                                При этом ни одной игрушки, основанной на QT, я не нашёл.
                                                                                  Цитата _lcf_ @
                                                                                  simsergey, кутэ это полноценный инструмент из коробки для разработки кроссплатформенных гуёвых приложений.
                                                                                  Спасибо. Занятно, надо будет его почитать.
                                                                                    Цитата ЫукпШ @
                                                                                    И тут выяснится, что приложения, основанные
                                                                                    на QT есть, но не так уж и много.

                                                                                    кеды, опера, виртуалбокс, vlc. gparted, да, не густо. думаю, дело в том, что программы на кутэ в первую очередь ориентированные на конкретного заказчика, а не на обществееный рынок. для каждой задачи, как грится, свой инструмент.
                                                                                    Цитата ЫукпШ @
                                                                                    При этом ни одной игрушки, основанной на QT, я не нашёл.

                                                                                    а на чем основаны? простые игры на сях? сетевые - серверная на сях, клиентская на питоне, html, net? что-то мне подсказывает, что mfc там нету :D
                                                                                      Цитата _lcf_ @
                                                                                      а на чем основаны? простые игры на сях? сетевые - серверная на сях, клиентская на питоне, html, net? что-то мне подсказывает, что mfc там нету :D

                                                                                      А вот недавно был тут разговор - собрать движок STALKER-а.
                                                                                      Так какие-то модули действительно на MFC.
                                                                                      Подозреваю, вся (или почти вся) продукция Microsoft-a тоже.
                                                                                      ---
                                                                                      Не исключено, что для Linux Qt действительно используется чаще.
                                                                                      Сообщение отредактировано: ЫукпШ -
                                                                                        Цитата tumanovalex @
                                                                                        А какие достоинсва-недостатки библиотеки?

                                                                                        Из достоинств я бы выделил маленький размер и простоту использования.
                                                                                        Цитата tumanovalex @
                                                                                        Она работает с VS2010?

                                                                                        Похоже что нет. Это я лажанул, не разглядел в заголовке VS2010.
                                                                                        Но ты попробуй, вдруг заработает.
                                                                                          Цитата Polinom2686 @
                                                                                          Попробуй Nana C++

                                                                                          хорошая шутка надо протестить :)
                                                                                          а WTL юзал?
                                                                                            Цитата Cfon @
                                                                                            а WTL юзал?

                                                                                            Не, не юзал. Но надо попробовать.
                                                                                              Цитата ЫукпШ @
                                                                                              Так какие-то модули действительно на MFC.

                                                                                              вангую, что это просто допотопное поделие, которое лень переписывать :whistle:
                                                                                              Цитата ЫукпШ @
                                                                                              Подозреваю, вся (или почти вся) продукция Microsoft-a тоже.

                                                                                              ну они кагбэ сами эти либу запили :-? соответственно и отношение к ней, как ко всему мелкомягкому :D
                                                                                                Цитата _lcf_ @
                                                                                                Цитата ЫукпШ @
                                                                                                Подозреваю, вся (или почти вся) продукция Microsoft-a тоже.

                                                                                                ну они кагбэ сами эти либу запили :-? соответственно и отношение к ней, как ко всему мелкомягкому :D

                                                                                                И ещё я подозреваю, что все разговоры о "сложности" GUI
                                                                                                слегка преувеличены.
                                                                                                Некоторые примитивные опыты и исследования показывают,
                                                                                                что продукция Sysinternals (куплена Microsoft-ом) написана, скорее всего,
                                                                                                "просто на С".
                                                                                                При этом у этих приложений вполне приличные окошки, всё удобно и хорошо.
                                                                                                (Не удивлюсь, если их автор вообще не использует возможности C++, хотя
                                                                                                это и титаническая работа.)
                                                                                                Посмотришь на приложения от Нокии - убогие они какие-то. Нет, не поможет им никакая Qt.
                                                                                                Сообщение отредактировано: ЫукпШ -
                                                                                                  Разумеется, что это во многом зависит от разработчика.
                                                                                                    Попробовал Nana C++. Библиотека понравилась. Создал простое окно "Здравствуй, мир" очень быстро. Проверил быстроту реакции на вопросы в форуме на сайте библиотеки. Реакции никакой не последовало. А есть ли русскоязычный форум по этой библиотеке? Или англоязычный с быстрой реакцией (как например наш форум)
                                                                                                      Цитата tumanovalex @
                                                                                                      с быстрой реакцией (как например наш форум)
                                                                                                      :jokingly: Сейчас посыпятся колкости... :popcorn:
                                                                                                        Цитата tumanovalex @
                                                                                                        Попробовал Nana C++. Библиотека понравилась. Создал простое окно "Здравствуй, мир" очень быстро.

                                                                                                        Вы пробовали для какой версии Visual Studio? Можете разместить проект?
                                                                                                          В разделе Кроссплатформенный С++ создал тему по NANA и дал ссылку на проект Visual Studio 2010. Использовал версию библиотеки nana 0.7.2.c++03.Ссылка на тему Nana C++ - кроссплатформенная библиотека на С++, ссылка на проект https://yadi.sk/d/q_2-yRL6379xUs. Ссылку на проект дал потому, что из-за библиотек LIB проект большой
                                                                                                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                          0 пользователей:


                                                                                                          Рейтинг@Mail.ru
                                                                                                          [ Script execution time: 0,1196 ]   [ 19 queries used ]   [ Generated: 25.04.24, 02:30 GMT ]