![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Schlodii |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.5.2013 Где: Минск, Беларусь Репутация: нет Всего: нет |
Здравствуйте, уже несколько недель читаю форумы и сайты по C++, просматривал книги на английском языке, но всё не то.
Вопрос в следующем. Я пишу программу на Visual Basic.NET, что-то типа энциклопедии - графический интерфейс + всякие окошки + много текста в них. Хочется переписать программу на чистом Win32 API. О сложностях осведомлён, ограничений по времени нет (хоть год, хоть два). Проблема в том, что на всех сайтах описывают либо консольные приложения (мне это не нужно), либо решение математических задач (тоже не нужно), либо особенности языка С++ (читаю, внимаю). Нигде не пишут о том, какие файлы .cpp и хидеры нужны для простейших графических программ и в какой последовательности их создавать. Пробовал копировать исходный код из книг Румянцева, Щупака, Финогенова... Они пишут исходный код как бы для одного файла .cpp Затем в общих словах упоминают подключение хидеров. Где-нибудь можно почитать пошаговое руководство, какие конкретно .cpp и .h файлы нужны для простейшей программы с графическим интерфейсом? Например в таком виде. 1. создаём файл ххх.h, вписываем туда то-то и то-то (или копируем из SDK). 2. создаём файл .cpp, -//- 3. и далее по тексту. Т.е. нужно описание того, как зависят хидеры от .cpp. Пусть это будет самая примитивная программа, но хочется понять именно логику работы. Как ни странно, но сам язык С++ мне кажется более простым, чем понимание логики работы с хидерами и .cpp. Хотел создать новую тему, но потом решил, что такой простой вопрос стыдно задавать в отдельной теме. Английский хорошо знаю, поэтому буду благодарен за любые подсказки на любом языке - где прочитать эти основы. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Язык С++ очень сложный. И сложность его в кажущейся простоте...
Твой выбор winapi32 я, да и много кто, положительно оценить не сможем. Это совершенно неблагодарная работа, которая не стоит затраченного времени. Если хочешь писать на С++, то изучи язык на консольных программах. Так как если ты сразу же кинешься писать гуй, то через какое-то время загонишь себя в такую задницу, что переписать заново будет проще, чем найти ошибку. После изучения языка, ты можешь брать какую-нибудь удобную библиотеку для создания гуя (например Qt) и писать свою прогу. |
|||
|
||||
Schlodii |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.5.2013 Где: Минск, Беларусь Репутация: нет Всего: нет |
bsa, изучение консольных приложений всегда сопровождается математическими примерами и задачами, алгоритмами. Если человек хочет писать серьёзные программы на С++, то ему нужны фундаментальные знания. Мне же нужны только азы. На сайте MSDN я нашёл пример простейшего GUI на С++. Вполне рабочий. От него уже можно идти дальше.
Я понимаю, что вопрос новичка о GUI на C++ вызывает закономерный скепсис у продвинутых программистов. Но у меня есть одно пояснение, которое многое объяснит. Программа, которую я пишу (на данный момент на vb.net, о чём упоминал в первом сообщении), представляет из себя энциклопедию вроде ... Википедии, только с абсолютно другой систематизацией материалов и другими фактами (чтобы любой человек мог буквально за минуту узнать информацию, которую в сети почти невозможно или очень трудно найти, хотя, конечно, есть и общеизвестные факты). В энциклопедии есть раздел программирование, на данный момент там содержится информация только о языке программирования Visual Basic.NET. То, чем я занимаюсь, можно назвать документированием известной информации, но она раскидана по разным сайтам и книгам, я же потихоньку собираю в одном месте. К профессии программиста я не имею ни малейшего отношения (пишу диссертацию по историографии, короче, историк), vb.net начал изучать только с января этого года. В этом есть как минусы (понятные), так и плюсы. Сначала читаю все доступные книги, сравниваю исходный код, набираю, изменяю, разбираюсь в логике работы и только потом вношу в свою энциклопедию информацию в максимально подробном и доступном виде (т.е. документирую). В случае с С++ ситуация выглядит похуже. Исходные коды из книг на моей Visual Studio 2010 компилируются с ошибками. После многочисленных неудачных попыток решил отталкиваться от рабочих примеров. Основу (простейший GUI) взял с MSDN, использование хидеров и .c (.cpp) посмотрел в исходниках Реактоса (удалял строки, менял, уточнял по reference назначение конкретных хидеров). Для профессионалов моё объяснение наверняка выглядит смешным, но благодаря этому получил хоть какое-то представление об азах построения GUI. Следующий шаг - документирование каждой строчки и аргументов (есть в MSDN). Мне важно не столько объяснить вроде бы банальный код
но и записать пояснения того, почему на сайте Майкрософта есть эти строчки
а во многих учебниках нет. Если я смогу задокументировать все необходимые вещи, то почему бы не рискнуть с GUI? |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Schlodii, есть подозрение, что когда Вы закончите писать GUI-программу на Си++ на WinAPI, не будет ни первого, ни второго, ни третьего. GUI, наверное, всё-таки, останется, но изменится до неузнаваимости (3D, голография и т.п.)
А по теме: Вы и так нашли единственный нормальный и полный ресурс по GUI на WinAPI - MSDN. P.S. Безумству храбрых поём мы песню ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
alexSl |
|
|||
![]() проходил мимо Профиль Группа: Участник Сообщений: 28 Регистрация: 22.2.2008 Репутация: нет Всего: нет |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Schlodii, писать программу на winapi тоже самое, что строить небоскреб из кирпичей. Для создания программ с гуи используют другие средства, которые позволяют сократить время на рутиную работу. Например, Qt, Windows forms и пр.
|
|||
|
||||
Schlodii |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.5.2013 Где: Минск, Беларусь Репутация: нет Всего: нет |
"Только тот, кто сам пришел к какой-нибудь заманчиво простой идее, сразу начинает сходить от нее с ума. Все остальные требуют подтверждения, прежде чем присоединиться к его танцам с бубном" (Д.Уотсон). ![]() На этот счёт можно вспомнить известный анекдот советского времени. - Рабинович, как ваша жизнь? - Не дождётесь! ![]() Спасибо, гляну. bsa, если я ничего не путаю, то Qt такой же фрэймворк, как и .NET. Возможно с той лишь разницей, что компиляция кода под .NET проходит через несколько этапов. С Windows Forms то же самое - CLR медленнее чистого С++ и тоже требует .NET. В теории программа на чистом С++ должна занимать меньше места, чем с использованием C++/CLR или VB.NET. К тому же программы на платформе .NET легко вскрываются с помощью того же Рефлектора. Плюсов очень много, минус один, поэтому сложно удержаться от соблазна. ![]() И немного по теме. Посмотрел два образца с GUI, оба взяты с Майкрософта. Приведу только начало. 1.
2.
string.h и tchar.h отвечают за работу с текстовыми данными и кодировками (?). Для чего конкретно здесь нужен stdlib.h - пока не знаю. ![]() Разница между программами в том, что вторая выводит текст в основном окне, а первая - лишь пустая форма. На одном из русскоязычных сайтов нашёл исходник простейшего GUI, но он у меня компилируется с ошибками. Может кто-нибудь проверить?
|
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
В 99.99% гуишный код не критичен к производительности. Ты не заметишь разницы между откликом в 20 и 10 мс, хотя отличаются они в 2 раза. А вот есть 0.01% кода, который критичен. Можно все писать низкоуровневыми средствами и потратить 1 год на гуи, и месяц на бизнеслогику, а можно такую же программу написать за пару месяцев и получить от этого еще и удовольствие. Так как очень часто потратив много времени на гуй, желание писать самое интересное - бизнес логику, пропадает И рекомендую все-таки прислушиваться к нашему (профессиональных программистов) мнению. Мы когда-то были молодыми и тоже пытались писать программы и на винапи, и на ассемблере... Поэтому и советуем не совершать наших ошибок. |
|||
|
||||
Schlodii |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.5.2013 Где: Минск, Беларусь Репутация: нет Всего: нет |
bsa, т.е. приложения (не только сам GUI), написанные на С++ с использованием Qt, обладают теми же преимуществами, что и программы, написанные на чистом С++ - компактные, быстрые? Что насчёт просмотра исходного кода программ - Qt выглядит получше NET или такая же дырявая? Если я хочу, чтобы моя программа шла и на других компьютерах - под XP и 7 - нужно ли устанавливать отдельно библиотеки? Не хочется вместе с простой программой поставлять несколько десятков мегабайт dll. Я раньше смотрел Qt, но меня смутила отличная от С++ терминология (например, слоты). Если я начну изучать Qt, то придётся одновременно одним глазком сравнивать с С++? Или достаточно одного Qt? Спасибо за совет! Хотя не скрою, что обидно спускаться на грешную землю. ![]() |
|||
|
||||
kamre |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
А на чистом C++ не бывает программ GUI, всегда используются библиотеки (winapi/MFC/VCL/Qt/Gtk/Wx/...). По компактности врядли что-то может сравниться с winapi, по скорости уже больше зависит от того, как приложение написать. Но при использовании Qt и скромного набора модулей (core/widgets/opengl без всяких там icu/webkit) после сжатия упаковщиками вполне можно уложиться в 5-10мб. Добавлено через 10 минут и 46 секунд
Qt - обычная библиотека с кодогенератором для C++, программы с ее использованием собираются обычным C++ компилятором. Поэтому получить исходный код из собранного бинарника нельзя.
В windows почти всегда приложения таскают необходимые библиотеки вместе с собой в инсталяторе. Простую программу можно будет упаковать до 5-10мб. Сигналы/слоты - обычные функции C++, часть кода для их работы получается при запуске кодогенератора moc. Изучать нужно С++, и разбираться в том как все устроено в Qt. Не получится хорошо знать только Qt, не разбираясь в C++. |
||||
|
|||||
Schlodii |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.5.2013 Где: Минск, Беларусь Репутация: нет Всего: нет |
10 мегабайт многовато будет. А если ограничиться только окошками + меню + текст? И больше ничего - ни картинок, ни аудио, ни математических вычислений. Даже на Visual Basic.NET размер исчисляется сотнями килобайт, а тут С++ и мегабайты... Странно как-то. |
|||
|
||||
kolesnle |
|
|||
![]() Упертый сишник ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 22.3.2013 Репутация: нет Всего: нет |
Размер самого экзешника - да.... А .NET? Забыли? Кстати, на большом кол-ве компов Qt прописан в переменных окружения, поэтому иногда таскать Qt не надо с собой |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Schlodii, программа написанная с использованием qt может быть очень маленькой по объему. Но для ее работы нужны будут библиотеки, а вот они уже большие. Причем, чем навороченней программа, тем больше библиотек таскать придется.
С другой стороны, где ты видел программы на несколько килобай последнее время? У тебя только иконки сожрут столько. |
|||
|
||||
Schlodii |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.5.2013 Где: Минск, Беларусь Репутация: нет Всего: нет |
Отлично.
Библиотеки таскают, но некоторые программы весьма компактны. Sony Vegas - очень яркий пример компактной (для своего функционала) программы. HelpScribble - ужасная по удобству, но очень маленькая по размеру (может быть и GUI написан через API). Видимо, есть разработчики, которым не лень оптимизировать свои продукты.
И при этом основы С++ вряд ли сильно помогут в GUI-строительстве с помощью Qt. 99,999% учебников по С++ вообще никак графический интерфейс не затрагивают. Не забыл. В Windows 7 изначально установлена .NET, поэтому пользователи эти нюансы никогда не заметят. Разве что при загрузке .NET'овских программ винчестер сильно шуршит.
Разве одних библиотек в составе программы будет недостаточно? Не мой случай. Мне окошки, текст и меню и... всё.
Известный программист Нир Софер (http://nirsoft.net/about_nirsoft_freeware.html) написал свыше 100 бесплатных программ. И все используют Win32 API. И обновляет их или каждый день, или через день, или через два. Максимальный размер - около 200 килобайт. Минимальный - 6 килобайт. Это сообщение отредактировал(а) Schlodii - 13.5.2013, 01:21 |
||||||||
|
|||||||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Господа, вы что, эти dll-ки на себе таскаете? Или у вас Win7 на микроконтроллере с 640 КБ установлен? Да какая к чёрту разница, сколько будет весить дистрибутив?
> Кстати, на большом кол-ве компов Qt прописан в переменных окружения, поэтому иногда таскать Qt не надо с собой Хммммм... С каких это пор? Или ты про линукс? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |