Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

GUI в С++

23K
05 июня 2009 года
Inc(Dec(i))
61 / / 13.02.2009
Народ, хочу на сях приложения уметь делать не только консольные, но и с гуем, подскажите с чего лучше начать изучать этот вопрос: Windows forms, WinAPI или MFC. А может существуют еще какие варианты?
Страницы:
307
20 июня 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Inc(Dec(i))
Народ, хочу на сях приложения уметь делать не только консольные, но и с гуем, подскажите с чего лучше начать изучать этот вопрос: Windows forms, WinAPI или MFC. А может существуют еще какие варианты?



на самом деле вообще лучше начинать работать с винапи, что бы понимать, что происходит за кулисами!=) винформы на с++ я как то не очень уважаю, а mfc бывает падает хз из за чего, да и написана она не оч тру, так что мой тебе совет, использую qt, wxWidgets или gtk. Постами выше тебе уже дали все ссылочки.

294
20 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: Artem_3A
на самом деле вообще лучше начинать работать с винапи, что бы понимать, что происходит за кулисами!=) винформы на с++ я как то не очень уважаю, а mfc бывает падает хз из за чего, да и написана она не оч тру, так что мой тебе совет, использую qt, wxWidgets или gtk. Постами выше тебе уже дали все ссылочки.


Присоединяюсь практически ко всем пунктам. IMHO, MFC -- довольно тонкая объектно-ориентированная прослойка над WinAPI, очень хорошо подходящая для создания приложений "документ-вид" и начинающая пробуксовывать, как только требуется что-то, выходящее за рамки этой концепции.
Довольно неплоха борландовская библиотека VCL (Delphi, C++Builder) , но мне в нём не нравится слово __published и незащищённость VCL-объектов друг от друга в пределах одной формы (во, блин, завернул! :rolleyes:). И то, что исходные тексты на Паскале.
IMHO, лучше изучать Qt. Нормальный объектно-ориентироованный подход, "врождённая" многоплатформенность.

18K
20 июня 2009 года
dave
35 / / 12.12.2006
ребятюнечки, а вы разделом форума не ошиблись ?
реклама MFC была бы более уместна не в общих вопросах, а в обсуждении MS Visual C++

ps; QT поддерживаю )
294
20 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: dave
ребятюнечки

Да ладно, к чему такая учтивость? Можно как-нибудь и попроще.

32K
21 июня 2009 года
Rififi
54 / / 04.06.2008
Inc(Dec(i))
А может существуют еще какие варианты?
делать gui на с++ имеет смысл только если ты застрял в прошлом веке или страдаешь тяжелой формой любви к мазохизму и извращениям.
Открой для себя C# и WPF
9.3K
21 июня 2009 года
iridum
175 / / 26.08.2007
Цитата: Rififi
Inc(Dec(i))
А может существуют еще какие варианты?
делать gui на с++ имеет смысл только если ты застрял в прошлом веке или страдаешь тяжелой формой любви к мазохизму и извращениям.
Открой для себя C# и WPF



Как критично, попахивает вонючими зомби, любителями .nET :), я не про всех конечно)))
ps. Спорим это тебе рассказал какойто "авторитет" и ты с этим согласился как 5 копеек?

294
21 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: Rififi
Открой для себя C# и WPF


Поддерживаю. Открой C#. Посмотри минуты полторы и закрой. И больше никогда не открывай.
Очередной стандарт на темноту от Microsoft, работающий, естественно, только под ОС от Microsoft.

5
21 июня 2009 года
hardcase
4.5K / / 09.08.2005
Вот только не надо тут холиваров-то разводить. Ясен пень, что еще и JavaFX есть. Тоже стандарт на темноту? ;)
307
21 июня 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Plisteron
...MFC -- довольно тонкая объектно-ориентированная прослойка над WinAPI...



чего то по моему это довольно смешная шутка, в MFC многие принципы ООП нарушены в корне, с остальным согласен!=)

Цитата: Rififi
Inc(Dec(i))
А может существуют еще какие варианты?
делать gui на с++ имеет смысл только если ты застрял в прошлом веке или страдаешь тяжелой формой любви к мазохизму и извращениям.


Крайне профессиональное заявление!=\ С# - вещь хорошая, не спорю, но медленная!!! и скажем так, концепция безопасного кода явно придумана специально для даунов! Каждый язык программирования, библиотека или технология программирования ориентированна зачастую на решение определенного спектра задачь, и говорить что шарп или джава круче крестов, фортрана или делфей просто глупо и некорректно.=))))

ЗЫ а тему и вправду пора закрывать пока тут не разразилась очередная священная война!=)

9
21 июня 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: Artem_3A
... и скажем так, концепция безопасного кода явно придумана специально для даунов!


Крайне профессиональное заявление.

19K
21 июня 2009 года
Rost
45 / / 05.07.2007
Цитата: iridum
Как критично, попахивает вонючими зомби, любителями .nET :), я не про всех конечно)))
ps. Спорим это тебе рассказал какойто "авторитет" и ты с этим согласился как 5 копеек?


Мой выбоа WinApi, мне даже как то нагляднее.. приятно ведь когда понимаешь, что происходит и в какой последовательности :)
".net интерфейсы" я бы стал использовать если были бы проблеммы со сроками разработки, причем большие :)

А так.. каждый выбирает инструмент в меру своих знаний и возможностей :p

307
21 июня 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Lerkin
Крайне профессиональное заявление.



возможно я конечно и не прав, но мое мнение: если руки растут из нужного места, то код и на асме будет безопасным, а если нет, то хоть на чем ты пиши, все будет крайне небезопасно падать! разве вы не согласны?

зы: к слову о шарпе, меня крайне порадовала обработка конца файла в виде исключения! блин, прочли весь файл, ужас, что делать дальше, это ну просто очень исключительная ситуация???=)))

5
21 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Artem_3A
возможно я конечно и не прав, но мое мнение: если руки растут из нужного места, то код и на асме будет безопасным, а если нет, то хоть на чем ты пиши, все будет крайне небезопасно падать! разве вы не согласны?

Не нужно путать теплое с мягким: небезопасный код и управляемый код - разные вещи.

Цитата: Artem_3A
зы: к слову о шарпе, меня крайне порадовала обработка конца файла в виде исключения!

К языку C# это заявление совершенно никакого отношения не имеет. Это контракт работы с экземпляром Stream. Не поверите, сколько работаю с .NET никогда на него не нарывался. Честно.

87
21 июня 2009 года
Kogrom
2.7K / / 02.02.2008
Вообще, возможно, ошибочно то, что нет какого-то стандартного GUI для C++. Ведь включили же стандартные контейнеры STL, несмотря на то, что свои контейнеры были и во многих других библиотеках. Но почему-то остановились на пол-пути.

Вторая вещь, которая меня огорчает, что часто язык привязывается к определенным платформам. Например, жалко, что на Java, C# и т.д. без извратов я не смогу создать компактное нативное приложение для определенной ОС. Зачем мне 250 Мегабайт дополнительного ПО, если я делаю приложение типа "Здравствуй Мир" или даже что-то немного сложнее?

Однажды не удержусь и сделаю свой язык, к нему свою IDE, GUI... Шучу.
9
22 июня 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: Kogrom

Однажды не удержусь и сделаю свой язык, к нему свою IDE, GUI...


... OC, hardware...

5
22 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Kogrom
Вообще, возможно, ошибочно то, что нет какого-то стандартного GUI для C++. Ведь включили же стандартные контейнеры STL, несмотря на то, что свои контейнеры были и во многих других библиотеках. Но почему-то остановились на пол-пути.

Вообще правильное замечание.

Цитата: Kogrom
Зачем мне 250 Мегабайт дополнительного ПО, если я делаю приложение типа "Здравствуй Мир" или даже что-то немного сложнее?

Платформы нужны не для таких приложений, согласись. Здравствуй мир на ассемблере будет дико компактным. Вот когда придется организовывать удаленное взаимодействие (ремотинг), обращения к веб-сервисам и СУБД, и при том все это в приличном графическом интерфейсе аля-вижуал студия, тогда-то и раскрываются все прелести фреймворков. Уже не смотришь сколько весит платформа - смотришь на то, насколько она рутинные операции автоматизирует.

Цитата: Kogrom
Однажды не удержусь и сделаю свой язык, к нему свою IDE, GUI... Шучу.

А на чем можно быстро сделать компилятор и не мучаться с проектированием стандартной библиотеки? ;)

5
22 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Lerkin
... OC, hardware...


Купить плату с ПЛИСиной, да САПР хакнутый типа ISE, процессор сбацать не проблема, да и готовых ядер полно на опен-корес. :D

9.3K
22 июня 2009 года
iridum
175 / / 26.08.2007
Цитата:

Вообще, возможно, ошибочно то, что нет какого-то стандартного GUI для C++. Ведь включили же стандартные контейнеры STL, несмотря на то, что свои контейнеры были и во многих других библиотеках. Но почему-то остановились на пол-пути.



Интервью с дедушкой Страуструпом:

Цитата:

Бьерн Страуструп: Я хотел бы видеть, что наступающее изменение стандарта C++ сосредотачивается на библиотеках. Работа над самим языком может быть ограничена коррекцией ошибок, созданием языка более однородным, обеспечением незначительных расширений для поддержки популярных парадигм, и обеспечении поддержки, необходимой для библиотек.

...

Рассмотрим "основные" средства языка, часто предлагаемые для внесения в C++:

...

* Графический интерфейс пользователя (GUI): было бы хорошо иметь стандартный GUI-каркас, но я не вижу, как такое может быть политически возможно.

...

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



http://www.softcraft.ru/paradigm/common/siw.shtml

87
22 июня 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Lerkin
... OC, hardware...



Существующие ОС меня устраивает. Проектирование hardware (отладка, доработка и т.д.) - это было моей работой пару лет назад. В какой-то степени и сейчас. Правда, проектировал не компы, а измерительные и управляющие железяки. С ПЛИСами работал мало (XILINX). Больше строил системы на микроконтроллерах (Microchop PIC, STMicroelectronics ST10).

В принципе, самое мощное, что я могу сделать (теоретически) - это какой-нибудь примитивный язык, который можно было бы компилировать в код на C++ или C. Может, интерпретатор к нему.

Выкинул бы из него обычные указатели, упростил бы синтаксис, ввел стандартное GUI и т.п. Синтаксис наверно передрал бы с Boo большей частью.

Но, врядли бы я использовал для этого C++, наверно воспользовался каким-нибудь Питоном или еще чем-нибудь подобным.

Но все это я буду делать, если кончится терпение. А терпения у меня много :)

Цитата: hardcase
Платформы нужны не для таких приложений, согласись. Здравствуй мир на ассемблере будет дико компактным.


Я со всем соглашусь. Я примерно понимаю логику создателей ПО. Но всё равно, для меня это печально :)

262
22 июня 2009 года
Iktomy
1.2K / / 11.10.2004
Цитата: Plisteron
Поддерживаю. Открой C#. Посмотри минуты полторы и закрой. И больше никогда не открывай.
Очередной стандарт на темноту от Microsoft, работающий, естественно, только под ОС от Microsoft.



А Mono?

Кста, как я понял, автор программирует под Windows. Тогда я бы все-таки советовал начать с MFC (тут уже неоднократно охаяного). Поймешь принцип, а потом и до WinAPI подымешься.

9.3K
22 июня 2009 года
iridum
175 / / 26.08.2007
Цитата: Kogrom

Но все это я буду делать, если кончится терпение. А терпения у меня много :)



Гдето в инете видел огромное кладбище операционных систем, некоторых с гуи под специфические платформы, сложен этот путь ), повсюду "агенти хаосу":p.

Цитата: Kogrom

Я со всем соглашусь. Я примерно понимаю логику создателей ПО. Но всё равно, для меня это печально :)



Логика содержит всебе что-то сатанинское, связанное с деньгами и властью :p

294
22 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: Iktomy
А Mono?

Mono, вообще-то, штука хорошая. Но... Поскольку открытого стандарта (типа rfc) для .NET нету (это один из стандартов на темноту), mono создаётся по принципу "сделать так, как это у Microsoft", при этом обходя всякие запатентованные куски кода и додумывая, что же имела в виду Microsoft, когда изучить принцип действия платформы .NET в каком-то конкретном случае (реверсить-то, не нарушив мируканского законодательства, нельзя) не представляется возможным. Т.е., Mono не гарантирует точно такого же поведения программы, как под .NET и по определению находится в роли догоняющего.

Цитата: Iktomy
Кста, как я понял, автор программирует под Windows. Тогда я бы все-таки советовал начать с MFC (тут уже неоднократно охаяного). Поймешь принцип, а потом и до WinAPI подымешься.

Тонкий английский юмор... :)
Имеется в виду топикастер или некто Plisteron? Если второй, то он начинал программирование под Windows (тогда ещё 3.1) именно в WinAPI. В данный момент он пока продолжает разработку программ с использованием совершенно непортабельной VCL, но постепенно переползает на Qt.

262
22 июня 2009 года
Iktomy
1.2K / / 11.10.2004
Plisteron, заменив слово "автор" на "топикстартер", мы все поймем, кого я имел в виду.

За неразделение двух частей ответа приговариваю себя к самозабаниванию на сутки... или чуть меньше.:)
307
22 июня 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Kogrom

Выкинул бы из него обычные указатели, упростил бы синтаксис, ввел стандартное GUI и ...



и мы получили бы C# второго поколения!=))))(тонкий английский юмор)

87
22 июня 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Artem_3A
и мы получили бы C# второго поколения!=))))(тонкий английский юмор)



Нет. Тут цель - быть независимым от прослоек. Я бы сделал тупой язык, заточенный на компиляцию в C++ или в C (ну, и заодно в Java, C#, и т.д. шутка). Но с учетом того, что код сгенерирует робот, а не человек. Тогда можно будет допустить многие ошибкоопасные конструкции в генерируемом коде. Ну, примерно этого пытаются добиться в Cython, если я ничего не путаю. Только у меня главной целью бы было стандартное GUI.

Таким образом, я бы убил нескольких зайцев: простое GUI, язык для "даунов", и генерируемый код, который я могу передать заказчику в "исходном" виде, не боясь, что он обойдется без меня :)

294
22 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: Kogrom
Я бы сделал тупой язык, заточенный на компиляцию в C++

... и получил бы Qt! :D

307
22 июня 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Kogrom
Нет. Тут цель - быть независимым от прослоек. Я бы сделал тупой язык, заточенный на компиляцию в C++ или в C (ну, и заодно в Java, C#, и т.д. шутка). Но с учетом того, что код сгенерирует робот, а не человек. Тогда можно будет допустить многие ошибкоопасные конструкции в генерируемом коде. Ну, примерно этого пытаются добиться в Cython, если я ничего не путаю. Только у меня главной целью бы было стандартное GUI.

Таким образом, я бы убил нескольких зайцев: простое GUI, язык для "даунов", и генерируемый код, который я могу передать заказчику в "исходном" виде, не боясь, что он обойдется без меня :)



помоему проще по завету дедушки страуструпа добавить в стандарт толковую библиотеку для GUI, к примеру wxWidgets или QT, а еще лучше их гибрида!=) хотя идея может и не плохая, если только язык не тупой сделать, а нормальный, да и опять же, есть С++, зачем изобретать велосипед!=)

5
22 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Artem_3A
есть С++, зачем изобретать велосипед!=)

Исключительно на C++ сделать нормальную GUI библиотеку не получится (выйдет что-то вроде MFC). Альтренативой может быть тот же Qt, как и борландовские расширения C++ (впрочим, их GUI изначально писан вообще на Object Pascal).

307
22 июня 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Plisteron
... и получил бы Qt! :D



кстати, а ни кто не заметил сходство между дотНет и КЮТ?=) в некоторых местах прям очевидное!=) Ребята из мелкомягких, что бы о них не говорили, молодцы, тырят все удачные технологии у конкурентов при чем иногда реализуют это лучше чем в оригинале!=)

ЗЫ сорри за офтоп

307
22 июня 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: hardcase
Исключительно на C++ сделать нормальную GUI библиотеку не получится (выйдет что-то вроде MFC). Альтренативой может быть тот же Qt, как и борландовские расширения C++ (впрочим, их GUI изначально писан вообще на Object Pascal).



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

260
22 июня 2009 года
Ramon
1.1K / / 16.08.2003
Для пущей радости даешь и Jpeg либу, видеокодеки, и библиотеку дяди Васи для расчета химических реакций и орбиты спутника, да и вообще все в стандарт и настанет вселенское счастье идиота.
87
22 июня 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Plisteron
... и получил бы Qt!


Нет. Qt - это круто и громоздко. Я бы изобрел что-то попроще, полегче, что-то для решения простых задач, но не FLTK :) Можно было бы обойтись скриптами на JScript/JavaScript. Но возможности их маловаты, да и различаются в разных браузерах.

Можно, конечно, для простых задач обойтись и консольным приложением...

В общем, стало понятно - я собрался изобрести Delphi.

63
22 июня 2009 года
Zorkus
2.6K / / 04.11.2006
Цитата: Rost
Мой выбоа WinApi,


И вот тут вопрос, прямой и в упор. Выбор для чего?
Выбор не может быть абстрактным, он следует из задачи. Какова задача?

11
22 июня 2009 года
oxotnik333
2.9K / / 03.08.2007
хм... если бы у бабушки были яйца - она была бы дедушкой...
9.3K
23 июня 2009 года
iridum
175 / / 26.08.2007
Цитата: oxotnik333
хм... если бы у бабушки были яйца - она была бы дедушкой...



Есть вариант, когда и то и то присутствует:p, ну как в совке "бейсик и разширенный бейсик с графическими возможностями" :p

262
23 июня 2009 года
Iktomy
1.2K / / 11.10.2004
Цитата: oxotnik333
хм... если бы у бабушки были яйца - она была бы дедушкой...



Если бы Оксотника не простили, он бы был Дуфифой(смайлег)


Подитоживая все вышесказанное:

уважаемый топикстартер, как Вы можеет видеть, ваш конгениальный и архиважный (...и пусть лицемеры забросают меня камнями) вопрос породил холиварный флуд. А все от чего? Смею предположить, что все от того, что Ваш вопрос поставлен некоректно.

Какого типа приложения "с мордой" и для каких целей Вы собираетесь писать? Что критично для ваших приложений, неповторимая красота снежинки или хардкорная скорость выполнения, переносимость или что либо другое?

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

В любом случае - желаю удачи. И благодарю, что выбрали наш форум.

З.Ы. Не обращайте внимания на мой треп - ночной deployment, это ЗЛО!!!

9.3K
23 июня 2009 года
iridum
175 / / 26.08.2007
Цитата: Iktomy

Какого типа приложения "с мордой" и для каких целей Вы собираетесь писать? Что критично для ваших приложений, неповторимая красота снежинки или хардкорная скорость выполнения, переносимость или что либо другое?



Ну вот это и интересно какраз узнать, кто что думает, вектор общественного мнения, мне так точно.

87
23 июня 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: hardcase
Исключительно на C++ сделать нормальную GUI библиотеку не получится (выйдет что-то вроде MFC)



Голословные утверждения. Многие популярные сегодня библиотеки для GUI зарождались почти одновременно с самим C++. То, что делали позже - выглядит красивее, да и код генерит компактнее (естественно, по словам авторов). Другое дело, что новые библиотеки развиваются слабо, у них маленькие сообщества, малая востребованность и т.д.

Например, так выглядит простая программка на SmartWin++ :

Код:
#include "SmartWin.h"
using namespace SmartWin;


class HelloWinClass
    : public WidgetFactory< WidgetWindow, HelloWinClass >
{
private:
    WidgetMenuPtr    itsMainMenu;
    WidgetButtonPtr itsButton;
    WidgetCheckBoxPtr itsCheckBox;
   
public:
    void menuSayHello( WidgetMenuPtr menu, unsigned item )
    {
        createMessageBox().show( _T("Hello !" ), menu->getText( item ) );
    }

    void menuClose( WidgetMenuPtr menu, unsigned item )
    {
        close();
    }

    void buttonClicked( WidgetButtonPtr button )
    {
        if ( itsCheckBox->getChecked() ) {
            createMessageBox().show( _T("Hello World!" ), button->getText() );
        } else {
            createMessageBox().show( _T("Hello !" ), button->getText() );
        }
    }

    void initAndCreate()
    {
        createWindow();
        setText( _T("Hello SmartWin") );    // Title

        SmartWin::Rectangle desktop( getDesktopSize() );
        setBounds( desktop.top(0.2).left(0.3) , true );

        itsButton = createButton();
        itsButton->setText( _T("Hello from a button") );
        itsButton->onClicked( &HelloWinClass::buttonClicked );
        itsButton->setBounds( itsButton->getPosition(), Point( 200, 30 ), true );

        itsCheckBox = createCheckBox();
        itsCheckBox->setText( _T("&Global") );
        itsCheckBox->setBounds( itsButton->getPosition(), Point( 200, 30 ), true );

        // Creating main menu
        itsMainMenu = createMenu();
        WidgetMenuPtr file = itsMainMenu->appendPopup( _T("&MenuCommands") );
        int m = 1;
        file->appendItem( m++, _T("Hello from the menu"), &HelloWinClass::menuSayHello );
        file->appendItem( m++, _T("Close"), &HelloWinClass::menuClose );

#ifndef WINCE
        itsMainMenu->attach( this );
#endif
        layout();
        onSized( &HelloWinClass::isResized );  
    }

    void isResized( const WidgetSizedEventResult & sz )
    {
        layout();
    }

    void layout()
    {
        SmartWin::Place p;
        SmartWin::Rectangle r( getClientAreaSize() );
        p.setBoundsBorders( r, 4, 4 );
           
        itsCheckBox->setPositionPerPlace( p );
        itsButton->setPositionPerPlace( p );
    }
};

int SmartWinMain( Application & app )
{
    HelloWinClass * testHello = new HelloWinClass;
    testHello->initAndCreate();
    return app.run();
}

На MFC не похоже, хотя и писалось на C++.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог