GUI в С++
на самом деле вообще лучше начинать работать с винапи, что бы понимать, что происходит за кулисами!=) винформы на с++ я как то не очень уважаю, а mfc бывает падает хз из за чего, да и написана она не оч тру, так что мой тебе совет, использую qt, wxWidgets или gtk. Постами выше тебе уже дали все ссылочки.
Присоединяюсь практически ко всем пунктам. IMHO, MFC -- довольно тонкая объектно-ориентированная прослойка над WinAPI, очень хорошо подходящая для создания приложений "документ-вид" и начинающая пробуксовывать, как только требуется что-то, выходящее за рамки этой концепции.
Довольно неплоха борландовская библиотека VCL (Delphi, C++Builder) , но мне в нём не нравится слово __published и незащищённость VCL-объектов друг от друга в пределах одной формы (во, блин, завернул! :rolleyes:). И то, что исходные тексты на Паскале.
IMHO, лучше изучать Qt. Нормальный объектно-ориентироованный подход, "врождённая" многоплатформенность.
реклама MFC была бы более уместна не в общих вопросах, а в обсуждении MS Visual C++
ps; QT поддерживаю )
Да ладно, к чему такая учтивость? Можно как-нибудь и попроще.
А может существуют еще какие варианты?
делать gui на с++ имеет смысл только если ты застрял в прошлом веке или страдаешь тяжелой формой любви к мазохизму и извращениям.
Открой для себя C# и WPF
А может существуют еще какие варианты?
делать gui на с++ имеет смысл только если ты застрял в прошлом веке или страдаешь тяжелой формой любви к мазохизму и извращениям.
Открой для себя C# и WPF
Как критично, попахивает вонючими зомби, любителями .nET :), я не про всех конечно)))
ps. Спорим это тебе рассказал какойто "авторитет" и ты с этим согласился как 5 копеек?
Поддерживаю. Открой C#. Посмотри минуты полторы и закрой. И больше никогда не открывай.
Очередной стандарт на темноту от Microsoft, работающий, естественно, только под ОС от Microsoft.
чего то по моему это довольно смешная шутка, в MFC многие принципы ООП нарушены в корне, с остальным согласен!=)
А может существуют еще какие варианты?
делать gui на с++ имеет смысл только если ты застрял в прошлом веке или страдаешь тяжелой формой любви к мазохизму и извращениям.
Крайне профессиональное заявление!=\ С# - вещь хорошая, не спорю, но медленная!!! и скажем так, концепция безопасного кода явно придумана специально для даунов! Каждый язык программирования, библиотека или технология программирования ориентированна зачастую на решение определенного спектра задачь, и говорить что шарп или джава круче крестов, фортрана или делфей просто глупо и некорректно.=))))
ЗЫ а тему и вправду пора закрывать пока тут не разразилась очередная священная война!=)
Крайне профессиональное заявление.
ps. Спорим это тебе рассказал какойто "авторитет" и ты с этим согласился как 5 копеек?
Мой выбоа WinApi, мне даже как то нагляднее.. приятно ведь когда понимаешь, что происходит и в какой последовательности :)
".net интерфейсы" я бы стал использовать если были бы проблеммы со сроками разработки, причем большие :)
А так.. каждый выбирает инструмент в меру своих знаний и возможностей :p
возможно я конечно и не прав, но мое мнение: если руки растут из нужного места, то код и на асме будет безопасным, а если нет, то хоть на чем ты пиши, все будет крайне небезопасно падать! разве вы не согласны?
зы: к слову о шарпе, меня крайне порадовала обработка конца файла в виде исключения! блин, прочли весь файл, ужас, что делать дальше, это ну просто очень исключительная ситуация???=)))
Не нужно путать теплое с мягким: небезопасный код и управляемый код - разные вещи.
К языку C# это заявление совершенно никакого отношения не имеет. Это контракт работы с экземпляром Stream. Не поверите, сколько работаю с .NET никогда на него не нарывался. Честно.
Вторая вещь, которая меня огорчает, что часто язык привязывается к определенным платформам. Например, жалко, что на Java, C# и т.д. без извратов я не смогу создать компактное нативное приложение для определенной ОС. Зачем мне 250 Мегабайт дополнительного ПО, если я делаю приложение типа "Здравствуй Мир" или даже что-то немного сложнее?
Однажды не удержусь и сделаю свой язык, к нему свою IDE, GUI... Шучу.
Однажды не удержусь и сделаю свой язык, к нему свою IDE, GUI...
... OC, hardware...
Вообще правильное замечание.
Платформы нужны не для таких приложений, согласись. Здравствуй мир на ассемблере будет дико компактным. Вот когда придется организовывать удаленное взаимодействие (ремотинг), обращения к веб-сервисам и СУБД, и при том все это в приличном графическом интерфейсе аля-вижуал студия, тогда-то и раскрываются все прелести фреймворков. Уже не смотришь сколько весит платформа - смотришь на то, насколько она рутинные операции автоматизирует.
А на чем можно быстро сделать компилятор и не мучаться с проектированием стандартной библиотеки? ;)
Купить плату с ПЛИСиной, да САПР хакнутый типа ISE, процессор сбацать не проблема, да и готовых ядер полно на опен-корес. :D
Вообще, возможно, ошибочно то, что нет какого-то стандартного GUI для C++. Ведь включили же стандартные контейнеры STL, несмотря на то, что свои контейнеры были и во многих других библиотеках. Но почему-то остановились на пол-пути.
Интервью с дедушкой Страуструпом:
Бьерн Страуструп: Я хотел бы видеть, что наступающее изменение стандарта C++ сосредотачивается на библиотеках. Работа над самим языком может быть ограничена коррекцией ошибок, созданием языка более однородным, обеспечением незначительных расширений для поддержки популярных парадигм, и обеспечении поддержки, необходимой для библиотек.
...
Рассмотрим "основные" средства языка, часто предлагаемые для внесения в C++:
...
* Графический интерфейс пользователя (GUI): было бы хорошо иметь стандартный GUI-каркас, но я не вижу, как такое может быть политически возможно.
...
Если бы не графические интерфейсы пользователя, я бы с оптимизмом утверждал, что все эти изменения стандарта могли бы быть сделаны без несоответствующей дискуссии до 2005 года. Конечно, это честолюбиво, но альтернативой честолюбивым целям является застой. Я думаю, что сообщество открытых кодов играет большую роль, чтобы участвовать в этом, потому что ни одна из этих библиотек не будет принята в стандарт, если мы не получим опыт на основе качественных реализаций, являющихся основой стандарта.
Существующие ОС меня устраивает. Проектирование hardware (отладка, доработка и т.д.) - это было моей работой пару лет назад. В какой-то степени и сейчас. Правда, проектировал не компы, а измерительные и управляющие железяки. С ПЛИСами работал мало (XILINX). Больше строил системы на микроконтроллерах (Microchop PIC, STMicroelectronics ST10).
В принципе, самое мощное, что я могу сделать (теоретически) - это какой-нибудь примитивный язык, который можно было бы компилировать в код на C++ или C. Может, интерпретатор к нему.
Выкинул бы из него обычные указатели, упростил бы синтаксис, ввел стандартное GUI и т.п. Синтаксис наверно передрал бы с Boo большей частью.
Но, врядли бы я использовал для этого C++, наверно воспользовался каким-нибудь Питоном или еще чем-нибудь подобным.
Но все это я буду делать, если кончится терпение. А терпения у меня много :)
Я со всем соглашусь. Я примерно понимаю логику создателей ПО. Но всё равно, для меня это печально :)
Очередной стандарт на темноту от Microsoft, работающий, естественно, только под ОС от Microsoft.
А Mono?
Кста, как я понял, автор программирует под Windows. Тогда я бы все-таки советовал начать с MFC (тут уже неоднократно охаяного). Поймешь принцип, а потом и до WinAPI подымешься.
Но все это я буду делать, если кончится терпение. А терпения у меня много :)
Гдето в инете видел огромное кладбище операционных систем, некоторых с гуи под специфические платформы, сложен этот путь ), повсюду "агенти хаосу":p.
Я со всем соглашусь. Я примерно понимаю логику создателей ПО. Но всё равно, для меня это печально :)
Логика содержит всебе что-то сатанинское, связанное с деньгами и властью :p
Mono, вообще-то, штука хорошая. Но... Поскольку открытого стандарта (типа rfc) для .NET нету (это один из стандартов на темноту), mono создаётся по принципу "сделать так, как это у Microsoft", при этом обходя всякие запатентованные куски кода и додумывая, что же имела в виду Microsoft, когда изучить принцип действия платформы .NET в каком-то конкретном случае (реверсить-то, не нарушив мируканского законодательства, нельзя) не представляется возможным. Т.е., Mono не гарантирует точно такого же поведения программы, как под .NET и по определению находится в роли догоняющего.
Тонкий английский юмор... :)
Имеется в виду топикастер или некто Plisteron? Если второй, то он начинал программирование под Windows (тогда ещё 3.1) именно в WinAPI. В данный момент он пока продолжает разработку программ с использованием совершенно непортабельной VCL, но постепенно переползает на Qt.
За неразделение двух частей ответа приговариваю себя к самозабаниванию на сутки... или чуть меньше.:)
Выкинул бы из него обычные указатели, упростил бы синтаксис, ввел стандартное GUI и ...
и мы получили бы C# второго поколения!=))))(тонкий английский юмор)
Нет. Тут цель - быть независимым от прослоек. Я бы сделал тупой язык, заточенный на компиляцию в C++ или в C (ну, и заодно в Java, C#, и т.д. шутка). Но с учетом того, что код сгенерирует робот, а не человек. Тогда можно будет допустить многие ошибкоопасные конструкции в генерируемом коде. Ну, примерно этого пытаются добиться в Cython, если я ничего не путаю. Только у меня главной целью бы было стандартное GUI.
Таким образом, я бы убил нескольких зайцев: простое GUI, язык для "даунов", и генерируемый код, который я могу передать заказчику в "исходном" виде, не боясь, что он обойдется без меня :)
... и получил бы Qt! :D
Таким образом, я бы убил нескольких зайцев: простое GUI, язык для "даунов", и генерируемый код, который я могу передать заказчику в "исходном" виде, не боясь, что он обойдется без меня :)
помоему проще по завету дедушки страуструпа добавить в стандарт толковую библиотеку для GUI, к примеру wxWidgets или QT, а еще лучше их гибрида!=) хотя идея может и не плохая, если только язык не тупой сделать, а нормальный, да и опять же, есть С++, зачем изобретать велосипед!=)
Исключительно на C++ сделать нормальную GUI библиотеку не получится (выйдет что-то вроде MFC). Альтренативой может быть тот же Qt, как и борландовские расширения C++ (впрочим, их GUI изначально писан вообще на Object Pascal).
кстати, а ни кто не заметил сходство между дотНет и КЮТ?=) в некоторых местах прям очевидное!=) Ребята из мелкомягких, что бы о них не говорили, молодцы, тырят все удачные технологии у конкурентов при чем иногда реализуют это лучше чем в оригинале!=)
ЗЫ сорри за офтоп
да, совершенно согласен, с++ просто не был предназначен для написания GUI, так что если в стандарт и войдет когда нить библиотека для GUI, то по любому она будет расширять сам язык, собственно как и поступает QT.
Нет. Qt - это круто и громоздко. Я бы изобрел что-то попроще, полегче, что-то для решения простых задач, но не FLTK :) Можно было бы обойтись скриптами на JScript/JavaScript. Но возможности их маловаты, да и различаются в разных браузерах.
Можно, конечно, для простых задач обойтись и консольным приложением...
В общем, стало понятно - я собрался изобрести Delphi.
И вот тут вопрос, прямой и в упор. Выбор для чего?
Выбор не может быть абстрактным, он следует из задачи. Какова задача?
Есть вариант, когда и то и то присутствует:p, ну как в совке "бейсик и разширенный бейсик с графическими возможностями" :p
Если бы Оксотника не простили, он бы был Дуфифой(смайлег)
Подитоживая все вышесказанное:
уважаемый топикстартер, как Вы можеет видеть, ваш конгениальный и архиважный (...и пусть лицемеры забросают меня камнями) вопрос породил холиварный флуд. А все от чего? Смею предположить, что все от того, что Ваш вопрос поставлен некоректно.
Какого типа приложения "с мордой" и для каких целей Вы собираетесь писать? Что критично для ваших приложений, неповторимая красота снежинки или хардкорная скорость выполнения, переносимость или что либо другое?
Поставив вопрос корректно, Вы, уважаемый автор, получили бы более путевые советы. А пока Вам придется определится в намеченых целях и задачах и выбирать самому из предложенного списка технологий и решений.
В любом случае - желаю удачи. И благодарю, что выбрали наш форум.
З.Ы. Не обращайте внимания на мой треп - ночной deployment, это ЗЛО!!!
Какого типа приложения "с мордой" и для каких целей Вы собираетесь писать? Что критично для ваших приложений, неповторимая красота снежинки или хардкорная скорость выполнения, переносимость или что либо другое?
Ну вот это и интересно какраз узнать, кто что думает, вектор общественного мнения, мне так точно.
Голословные утверждения. Многие популярные сегодня библиотеки для GUI зарождались почти одновременно с самим C++. То, что делали позже - выглядит красивее, да и код генерит компактнее (естественно, по словам авторов). Другое дело, что новые библиотеки развиваются слабо, у них маленькие сообщества, малая востребованность и т.д.
Например, так выглядит простая программка на SmartWin++ :
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++.