BobCat
Интересующийся
Offline
Пол:
|
|
« : 19-04-2009 19:34 » |
|
Всем привет! Ситуация такая: много книжек по С++ прочитал, можно сказать язык понимаю. Кое-что писал в С++Builder'e, там очень удобно визуально на форму тащим нужные компоненты и программируем обработчики событий на обычном С++, со стандартными типами данных. В vs2005 насколько я понял так можно делать только с windows forms, но все эти компоненты уже под .NET, а соответственно классы и типы данных CLR , получается, надо учить эту библиотеку, но это уже не классический С++ А вот собсно, вопросы: 1. Можно ли в vs визуально проектировать интерфейс, но без .NET ? 2. Есть ли в vs аналог диспетчера действий Action Manager из С++Builder'а? 3. Как грамотно делать обработчики различных событий(писать весь код обработчика в .h-файле формы как-то несерьезно, значит нужно создавать свой клас или просто функции в отдельном файле .ccp+.h? и как тогда обращаться из своих функций к компонентам формы?) То есть нет общего понимания вопроса. Также буду благодарен если посоветуете ХОРОШУЮ книгу вроде книги Архангельского, т.к. все что есть по vs относится только к vs6!!! P.S. против .NET ничего не имею, просто немного смущает то что тогда моя прога полностью зависит от того, установлен ли фреймворк на компе или нет. И еще мне кажется что с .NET-ом лучше работать на С#...
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
nikedeforest
|
|
« Ответ #1 : 19-04-2009 20:05 » |
|
Сначала тогда определись, буедшь ли ты писать на чистом API, или на MFC. Исходя из этого будут отвечать тебе на вопросы. Ну а так в принципе: 1. Да можно 2.Не о чем таком не слышал, но я и не знаю что это. Кто работал на С++ Билдере точно скажет 3. Зависит от того, что решишь исполльщовать АПИ или МФЦ. В АПИ бужешь все сообщения окна обрабатывать в функции обратного вызова для этого окна. Соотвественно для каждого окна своя функция. По поводу МФЦ опять же не знаю, я тот ужас знакомства с нею до сих пор с дрожью вспоминаю . По поводу книги опять жде определяйся будешь ли использовать библиотеку MFC или будешь писать только используя API. И еще мне кажется что с .NET-ом лучше работать на С#...
Абсолютно согласен, тот С++ уже не то. P.S. против .NET ничего не имею, просто немного смущает то что тогда моя прога полностью зависит от того, установлен ли фреймворк на компе или нет.
А что мешает поставлять фрэймворк вместе с программой?
|
|
« Последнее редактирование: 19-04-2009 20:09 от nikedeforest »
|
Записан
|
ещё один вопрос ...
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #2 : 19-04-2009 21:19 » |
|
Сначала тогда определись, буедшь ли ты писать на чистом API, или на MFC так как толком не знаю ни того, ни другого, то все зависит от именно визуальной разработки, то есть я хочу сперва кинуть компоненты на форму и получить сгенерированный код, и в него дописать обработчики событий. Но насколько я понял с чистым АPI это не прокатит, нужно самому писать код, создающий окно, функцию обработки сообщений и т.д. После с++ Builder'a мне это показалось слишком долго и нерационально... Но если я не прав и все до сих пор так делают, поправьте меня и буду учить API В общем, нужен совет, что использовать в vs : API, MFC, или .NET чтобы это было быстро и современно. Тогда я стану подробно изучать указанную технологию. В Диспетчере действий мы создаем некоторый код, а после можем вызывать его из обработчиков событий, панели инструментов и меню нашего приложения
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
nikedeforest
|
|
« Ответ #3 : 19-04-2009 21:29 » |
|
На чистом АПИ сейчас никто не пишет, может разве что за редким исключением, ввиде низкоуровневых утилит а-ля Акронис
|
|
« Последнее редактирование: 19-04-2009 21:42 от nikedeforest »
|
Записан
|
ещё один вопрос ...
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #4 : 19-04-2009 22:06 » |
|
сразу не заметил 1. Да можно nikedeforest, как именно это сделать?
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
nikedeforest
|
|
« Ответ #5 : 19-04-2009 22:17 » |
|
Что ты имеешь ввиду под проектированием интерфейса? Бросание контролов на форму приложения? Так можно и на АПИ и на МФЦ. Если имеешь ввиду помощь в обработке сообщений и прочего, то только в мФЦ. Как это сделать я тебе не подскажу, подскажет тот, кто с МФЦ работает, таких много, скоро придут .
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #6 : 19-04-2009 22:32 » |
|
они суровы и приходят только после полуночи при полной луне! да, да, да я хочу кидать кнопочки, метки, комбобоксы мышкой на форму, после выбирать событие onClick, onChange, и писать обработчики этих событий, причем делать это грамотно, профессионально
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
nikedeforest
|
|
« Ответ #7 : 19-04-2009 22:34 » |
|
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 20-04-2009 03:06 » |
|
они суровы и приходят только после полуночи при полной луне! они не выспались просто да, да, да я хочу кидать кнопочки, метки, комбобоксы мышкой на форму, после выбирать событие onClick, onChange, и писать обработчики этих событий, причем делать это грамотно, профессионально ну так в чём проблема то, бери, всё по пунктам и делай Пока что не видю, в чём помогать
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #9 : 20-04-2009 05:07 » |
|
BobCat, такого инструмента "как в Builder'e" нет. Сам столкнулся с подобной проблемой когда учился Самое близкое, что нашел в VS -- это редактор ресурсов. Но логика работы с ним отличается от того, что ты видел в Билдере (после билдера, покажеться корявой и неудобной ) А вообще, если есть время напиши пару прог на "чистом" API. Очень помогает для понимания "как это все живет". А все остальное (и МФЦ, и даже, формы/классы билдера) -- это просто обертки, вокруг этого API. И если хорошо представлять себе как работает АПИ, то потом гораздо легче понимать работу "обертки" Что касается книжки, то самое хорошое описаниие работы АПИ мне встретилось у Герберта Шилда. Он еще для 95-ой там все описывал
|
|
« Последнее редактирование: 20-04-2009 05:11 от Артем »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 20-04-2009 05:09 » |
|
Артем, редактор ресов в студии отличный, зачем наговариваешь
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #11 : 20-04-2009 05:16 » |
|
Артем, редактор ресов в студии отличный, зачем наговариваешь Я, наверное, не очень корректно выразился Я хотел сказать, что логика работы редактора ресурсов в студии отличная от логики работы всего Builder'a. Что лучше/хуже -- конечно-же зависет от поставленной задачи и привычки программиста. Конечно же все это сугубо ИМХО
|
|
|
Записан
|
|
|
|
nikedeforest
|
|
« Ответ #12 : 20-04-2009 05:20 » |
|
Артем, может не Шилдт, а Чарльз Петзольд? Не перепутал?
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #13 : 20-04-2009 05:34 » |
|
nikedeforest, нет, не перепутал. Конечно у Чарльз Петзольд более полное описание и эту книгу можно найти в электронном виде. Но мне в свое время попался именно Шилдт "программирование BORLAND c++" (пусть вас не смущает слово BORLAND ). Там была всего одна глава про пользовательский интерфейс Вин95. Но именно, после прочнения той глава, у меня в голове "что-то щелкнуло" и я стал начинать понимать, что такое WINDOWS P.S. Чтоб не создавать новой темы: Я с .NET почти не знаком. Просто ради любопытства вопрос:.NET -- это тоже "обертки" вокруг старого доброго АПИ ? Или там есть что-то свое, изначально реализованное на классах, которое не дергает этот разрозненный набор функций (гордо именуемый Win API) ? Может тот самый фреймворк?
|
|
« Последнее редактирование: 20-04-2009 07:18 от Артем »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #14 : 20-04-2009 09:32 » |
|
.NET -- это тоже "обертки" вокруг старого доброго АПИ ? В части WinForms - да. Но начиная с .NET 3.5 для построения GUI создана новая библиотека WPF.NET - полный отказ от WinAPI для GUI, и это стратегическая линия развития в Windows - отказ от старого WinAPI с последующей сменой архитектуры GUI в самой ОС. Там целиком свой движок построения изображений, в основе которого лежит DirectX 10. Алексей1153++, так что готовься морально
|
|
« Последнее редактирование: 20-04-2009 09:34 от dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 20-04-2009 09:50 » |
|
dimka, пущай наваяют сначала винду рабочую и не тормозявую, а там сообразим
|
|
|
Записан
|
|
|
|
nikedeforest
|
|
« Ответ #16 : 20-04-2009 15:24 » |
|
Артем, понятно, не знал, что есть у него такая книга. Да, .НЕТ по сути обертка,но уже далеко не во всем, стоит хотя бы взять такаое понятие .НЕТ, как домен, я так понимаю - никаких аналогов в .НЕТ нету. Ну и ряд механизмов, которые может и основаны на АПИ, но делают код и приложение лучше, например пул потоков. То, что сказал Димка, я не знал, было познавательно. Это совершенно новый подход к программированию ГУИ, правда на него надо перестраиваться, пока не садился, но было интересно посмотреть. А по поводу глючности винды, имхо все от кривизны рук зависит, у кого-то она совсем не глючит
|
|
« Последнее редактирование: 20-04-2009 15:26 от nikedeforest »
|
Записан
|
ещё один вопрос ...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #17 : 20-04-2009 17:08 » |
|
nikedeforest, это было по поводу глючности висты (а где ещё DX10 ? Ну, глядишь седьмую винду нормально сделают ) А XP не глючит.
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #18 : 20-04-2009 17:25 » |
|
ну так в чём проблема то, бери, всё по пунктам и делай Пока что не видю, в чём помогать Алексей1153++, непонятно, как именно это сделать, алгоритм действий, а то в книжках только классы по отдельности описываются, а метод научного тыка никак не помог. Артем, а какова именно логика работы, в двух словах если не затруднит? а книжку пойду сейчас искать
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 20-04-2009 17:34 » |
|
BobCat, окошко с деревом ресурсов нашёл ?
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #20 : 20-04-2009 18:07 » |
|
Алексей1153++, Да, нашел!!! вижу папки акселератор, диалог, икон, меню, стринг тэйбл, тулбар, версион добавил в папку диалог русурс IDD_FORMWIEW, но не вижу окошка главной формы. Может дело в типе проекта? ... бла-бла-бла ... непродолжительные эксперименты, и Вуаля! Оказалось все дело было в типе проекта - мне нужен был диалог , а стоял MDI! Плюс я совершенно не знал о редакторе ресурсов! А нужен был всего лишь небольшой толчок!
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #21 : 20-04-2009 18:11 » |
|
Артем, а какова именно логика работы, в двух словах если не затруднит? все еще актуально, хочется знать в чем же различия и где ждать подводных камней?
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 20-04-2009 18:26 » |
|
BobCat, ну так то да, дважды кликаешь по иконке ресурса диалога - и он открывается для редактирования )
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #23 : 20-04-2009 18:32 » |
|
Алексей1153++, спасибо! это то что мне и надо было!
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
nikedeforest
|
|
« Ответ #24 : 20-04-2009 18:36 » |
|
Да, от Висты я тоже не в восторге. Но думаю это сыроватый продукт, поспешили, да и не обкатали. На семерку все надежды, что-томне подсказывает, что на нее мы не нарадуемся. А может это просто желание такое?
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #25 : 20-04-2009 18:37 » |
|
Артем, а какова именно логика работы, в двух словах если не затруднит?
Первое, что бросается в глаза: -- обработка сообщений -- карта сообщений для МФЦ, или (одна) функция с большим switch'ом для "чистого" API -- нет аналога "формы", т.е. нельзя, просто перетаскивать любые элементы в окно. Хотя тут могу ошибаться. Лучше уточнить у Алексей1153++. Он, кстати, может и книжку хорошую посоветует про МФЦ. а книжку пойду сейчас искать
книжка та про работу на чистом АПИ. Там (почти) нет про редактор ресурсов.
|
|
« Последнее редактирование: 20-04-2009 18:41 от Артем »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #26 : 20-04-2009 19:14 » |
|
обработку сообщений можно и в отдельных функциях сделать, если это от кнопок, даже удобнее. А бывает, удобнее большую группу элементов завернуть в один обработчик, это делается не с помощью редактора ресурсов, а при помощи кода класса окна, где диалог используется
палитра стандартных элементов присутствует, ищи )
Книжку не посоветует, ни одной не помню
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #27 : 21-04-2009 05:14 » |
|
Похоже и правда есть какие-то особенности. карту сообщений нашел, есть обработчик onClick для кнопки, которую я на форму перетащил, но вот непонятно как обращаться к свойствам метки или edit'а, которые я тоже просто перетащил на форму, не нашел их объявления и от какого класса они унаследованы, конструкция вида this->MyEdit их не видит. есть только вот это #define EDIT1 1003 но это просто константа. я в замешательстве похоже дальше без хорошей книги не обойтись
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 21-04-2009 05:20 » |
|
в классе диалога получить доступ к элементу можно двумя способами 1) добавить член-переменную (зажать CTRL и дважды щёлкнуть по контролу в редакторе). Добавится связанная с контролом переменная m_... , с которой можно работать как обячно. Только синхронизацию придётся выполнять между переменной и окном по UpdateData (имхо, не всегда удобно) 2) где нужно, доставать указатель на контрол, только нужно знать класс: например CEdit* pEdit=(CEdit*)GetDlgItem(IDC_...); if(pEdit) { ... }
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #29 : 21-04-2009 05:26 » |
|
Ок, спасибо, п.2 понял, а п.1 Только синхронизацию придётся выполнять между переменной и окном по UpdateData это получается уже программно во время исполнения нужно проводить UpdateData ? я видел этот метод в карте сообщений
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #30 : 21-04-2009 05:39 » |
|
BobCat, ну как бы перед началом работы с контролами в процедуре в первом методе нужно вызвать UpdateData(1). При этом данные с экрана запишутся в переменные (если где то будет ошибка, то вернётся FALSE а на экране ещё окошко выскочет, что там то там то косяк). поработали, закидываем всё обратно на экран - UpdateData(0) я когда то этим пользовался, но потом меня перестало устраивать, слишком негибко. Теперь только 2 способ у меня
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #31 : 21-04-2009 22:06 » |
|
Ну вот, наконец-то в голове сложилась более-менее целостная картина о том как работать в вижуал студии. Много отличий от Билдера(там все проще) но будем считать что все эти неудобства закаляют дух настоящего программиста Благодарствую старшим братьям-программистам, и привожу работающий код : void Cmfc_dialogDlg::OnBnClickedButton1() { CEdit* pEdit=(CEdit*)GetDlgItem(EDIT1); CString a("проверка"); pEdit->SetWindowTextW(a); }
Скачал хорошую книгу Visual C++ Разработка Windows-приложен помощью MFC и API-функц В.Давыдов 2008(+ CD-ROM), многое проясняет и врубает сразу и в API и MFC, есть даже про редактор ресурсов!
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #32 : 21-04-2009 22:13 » |
|
ещё варианты: CEdit* pEdit=(CEdit*)GetDlgItem(EDIT1); pEdit->SetWindowTextW("проверка");
((CEdit*)GetDlgItem(EDIT1))->SetWindowTextW("проверка");
SetDlgItemText(EDIT1,"проверка");
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #33 : 21-04-2009 22:45 » |
|
а вот и нет pEdit->SetWindowTextW("проверка"); я уже началь было бится головой ап стену, пока смог привести тип: error C2664: 'CWnd::SetWindowTextW' : cannot convert parameter 1 from 'const char [9]' to 'LPCTSTR'попутно открыл для себя что не прокатывает даже , так как нету такого конструктора для класса CString, а уж раз там конструкнор, подумал я, значит надо создавать объект, а не присваивать ему значение, тогда только родилось а ведь в билдере все приведения типов происходят автоматически, и даже не надо самому прописывать указатель на нужный контрол, после перетаскивания мышкой на форму, к нему можно просто сразу обращаться по имени, прям на "ты" а за варианты работы с указателями спасибо, буду знать
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #34 : 21-04-2009 22:57 » |
|
SetWindowText без W )
и CString a = "проверка"; тоже прекрасно работает
вообще то, типы приводятся не в борланде или студии, а в языке си++
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #35 : 21-04-2009 23:07 » |
|
Алексей1153++, это я значит не отключил юникод в настройках проекта, просто SetWindowTextW выбирал из выпадающего списка, а в тот момент там без W не было. Сейчас юникод отключил и все заработало!
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #36 : 21-04-2009 23:12 » |
|
SetWindowText это макрос потому что )
|
|
|
Записан
|
|
|
|
BobCat
Интересующийся
Offline
Пол:
|
|
« Ответ #37 : 21-04-2009 23:20 » |
|
вот за всеми этими тонкостями и премудростями чистый С++ немного теряется плюс это куча заморочек только под винду, а есть есче линукс... как объять необъятное?
|
|
|
Записан
|
Отлаживать код вдвое сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. Брайан Керниган
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #38 : 22-04-2009 08:24 » |
|
Это всё происходит от того, что смешиваются такие понятия как программирование и язык программирования, язык программирования и среда разработки под определённую платформу, синтаксис языка и API. Вот когда поймёшь в чём между ними разница, а точнее пропасть, жить станет легче.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|