|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|
Win32 API, MFC, или Windows Forms?31.07.2015, 02:53. Показов 8224. Ответов 32
Метки нет (Все метки)
Здравствуйте!
У меня очень простая задача на С++, нужно построить графики по точкам (данные из файлов) в разных окнах, масштабировать их и накладывать друг на друга иногда, (консоли недостаточно). Нужно меню и несколько кнопок, окна с графиками. Полноценные Windows приложения никогда не делал. У Щупака "Эффективная разработка" сказано, что надо начинать изучение с Win32 API, с другой стороны, всякие знатоки пишут, что никто сейчас так не делает и нужно MFC использовать. Кто что посоветует? Какую книгу или ресурс в сети русскоязычный, где я смог бы найти все вопросы, с которыми столкнусь при решении своей задачи? И в как правильно поступать изучать Win32 API, искать информацию по MFC, или Windows Forms изучать? У меня Win8.1, VS2013.
0
|
|
| 31.07.2015, 02:53 | |
|
Ответы с готовыми решениями:
32
Посоветуйте, пожалуйста, каким образом будет лучше реализовать мою задачу? (MFC, Win API, Windows Forms)) Win32 API vs MFC vs .NET clr,mfc,windows forms |
|
Заблокирован
|
||||
| 31.07.2015, 18:20 | ||||
![]() На самом деле по моей ссылке было много вариантов того, что можно скачать: Раз установленная VisualStudio, то оптимальным вариантом было бы Qt 5.5.0 for Windows 64-bit (VS 2013, 720MB) - http://download.qt.io/official... -5.5.0.exe А онлайн инсталлятор, это ерунда, он ставит хрен знает что там... Хотя может и поставит что нужно.... но скорее всего лишнего ещё прихватит... Не знаю, когда - то давно один раз ставил так, не помню уже. Это моё упущение, забыл предупредить... Не да ладно, ждём завершения установки. Далее запускаешь QtCreator (зелёненький значок), потом Файл -> создать файл или проект -> Приложение QtWidgets (для теста). Ну там имя, путь - всё по умолчанию ... Как создастся - жми слева - снизу молоточек (собрать), как соберётся, - стрелку - то есть запустить (без жучка) И наслаждайся простым кроссплатформенным окном на Qt! ![]() Теперь можешь слева найти формочку этого окна и что нибуть кинуть на него ![]() Добавлено через 2 минуты Компилятор всё равно будет ошибки на английском выдавать, если у тебя студия английская :-) В Qt нет своего компилятора, он использует либо студийный, либо MinGW под Windows (кстати, в последних версиях MinGw входит в комплект и ставится автоматический) Добавлено через 15 минут Ну что, получилось что - то собрать и запустить? (я через 3 минуты ухожу с работы, на выходных, если не забуду - гляну эту тему) Добавлено через 3 минуты Всё, я ушёл. Не забудь послушать на ютюбе мелодию - Orbital - Halcyon On and On (Aaron Static Bootleg)
1
|
||||
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
||||||
| 01.08.2015, 01:51 [ТС] | ||||||
|
Butt-Head, Поставил, проверил пару своих примеров в консоли, всё работает.
MainWindow тоже получилось для теста, прикольно, время не замерял, но вроде как быстрее чем VS работает. Попробовал приложение Qt Quick, тоже получилось по умолчанию с тремя кнопками. Но вот когда на место имеющегося кода в исходники/main.cpp подставил пример из книги, куча ошибок появляется и не получается Hello World.
Добавлено через 14 минут Butt-Head, Получилось PushButton вставить и откомпилировать, с ней, я счастлив ![]() Добавлено через 3 часа 39 минут Butt-Head, Мелодию тоже прослушал, спасибо
0
|
||||||
|
Заблокирован
|
|||||||||||||||||||||||||
| 01.08.2015, 07:24 | |||||||||||||||||||||||||
Там и редактор для них пока что убогий, ровно как и технологический там много нюансов по их использованию ... Лучше пока что делать GUI вручную в файлах типа QML.Смотри, когда ты делаешь проект в QtCreator, то как бы то, что ты можешь подключать в коде посредствам директивы #include, нужно сперва объявить в PRO файле, см фторой файл сверху под названием проекта слева ![]() Вот эта вот штука:
Так вот, в книге скорее всего про файл левый...Да, кстати, когда модули подключены правильно, то ты когда пишешь #include <... у тебя сразу имя нужно хедера находит, а если нет - значит ты модуль не тот подключил. Короче, ты пример из книги наверное вставил в консольный проект? Тут в принципе не важно, какой проект, все его настройки задаются в PRO файле. В общем, там вся разница с 4.8 Qt (а ты качал 5.5) в хедерах в данном случае... Есть понятие как бы - 4-й Qt и 5-й (ну не считая более ранних, так вот, 4-й хорошо отличается от 5-го). Нынче не модно подключать какую - то ерунду и теперь если ты хочешь использовать класс QLabel, то его и надо подключать.
Короче, этим ты инициализируешь базовый класс для GUIдных приложений и в ретурне запускаешь обработчик событий, который не вернёт управление до тех пор, пока его не попросят, по этому у тебя софт сразу не вылетает. В общем, для того, чтоб твой убогий пример из книги заработал , тебе нужен CPP файл с кодом как выше, в PRO файле должны быть подключены гия и виджеты, допустим так:
Отключается оно так: на левой панели, где кнопки большие "начало", редактор, дизайн, отладка, проекты, анализ и спрака, жмёшь "ПРОЕКТЫ", сверху, где тёмный прямоугольничек с названием твоего комплекта для сборки, жмёшь на кнопку "ЗАПУСК" (сначала там горит "СБОРКА"), то есть ты теперь выставляешь параметры запуска и теперь тебе надо снять галку с "запускать в терминале", этот чек бокс под строкой "рабочий каталог"... Я вообще себе управление, как в визуал студи настроил (Инструменты-Параметра-Среда-Клавиатура)... Иногда обязательно (зависит от комплекта), при добавление новых файлов запускать qmake перед сборкой. В общем новичком от многого спасает (меню сверху - Сборка - Запустить qmake)По поводу PushButton и тд. Я даже не знаю, наверное пока кидаться в QML рановато, попробуй хоть что то сделать на виджетах (то есть проект QWidget, а не QtQuick). Вот допустим создал ты проект обычный (приложение Qt Widget) Зашёл в редактор форм, открыл свою главную форму (mainwindow.ui) (не путать с "плохими" файлами с расширением ui.qml ), перетащил из списка слева на неё допустим PushButton, оо круто! Теперь жмёшь по этому пушбаттану правой кнопкой мыши, ищешь "перейти к слоту" и жмешь по нему левой кнопкой ![]() Тебе автоматом сгенерится код функции, которая будет вызываться при нажатие на эту кнопку. Что б в этом убедится, можешь добавить туда вывод в окно отладки посредствам qDebug
Ну или можешь добавить что по круче:
0
|
|||||||||||||||||||||||||
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|||||||||||||||||||||
| 02.08.2015, 01:55 [ТС] | |||||||||||||||||||||
|
Butt-Head, Здравствуйте! Спасибо Вам большое, за то, что нашли время для меня!
Мне 45 лет, уже нет смекалки пятилетнего... Осмыслить и попробовать всё, сразу не получается. Вот что я понял пока, мне нужно всегда, для Windows приложения создавать проект через Qt Widgets. Когда говорят о виджетах, я представляю, всякие шевелящиеся штуки в телефоне, погода, пробки и всё в таком духе... Конечно прочитал википедию ещё раз про виджет. Второй файл сверху под названием проекта слева у меня HelloWorld.pro вот он:
У Вас
Ещё вопрос, как код отформатировать в Qt Creator, аналог VS Ctrl+K, F есть? И ещё вопрос, строка
Остальное в понедельник буду разбирать, читать, экспериментировать...
0
|
|||||||||||||||||||||
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
||||||
| 04.08.2015, 00:43 [ТС] | ||||||
|
Butt-Head, У меня всегда при создании приложения Qt Widget появляется окно выбор комплекта, и там всегда по умолчанию стоят четыре галочки:
Desktop Qt 5.5.0 NSVC2013 64 bit , ...2012 32 bit, Desktop Qt5.4.2 NSVC2012 OpenGL 32 bit, Desktop Qt 5.4.2 NSVC2013 64 bit2. Их все нужно всегда оставлять включенными или какие-то отключать? Добавлено через 6 часов 55 минут Butt-Head, и ещё, попробовал пример из другой книги по WinAPI
Use Multi-Byte Character Set тогда всё заработало... А как тоже самое включить в Qt Creator? Или причина в другом в чём-то? Ошибки такие: main.cpp:19: ошибка: C2440: '=' : cannot convert from 'char [9]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast main.cpp:34: ошибка: C2664: 'HWND CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DW ORD,int,int,int,int,HWND,HMENU,HINSTANCE ,LPVOID)' : cannot convert argument 2 from 'char [9]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast main.cpp:42: предупреждение: C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data main.cpp:58: ошибка: C2664: 'int DrawTextW(HDC,LPCWSTR,int,LPRECT,UINT)' : cannot convert argument 2 from 'const char [19]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
0
|
||||||
|
1620 / 1185 / 553
Регистрация: 08.01.2012
Сообщений: 4,564
|
|
| 04.08.2015, 00:50 | |
|
имея VS вы послушали того кто громче орет, а нужны лишь были графики, не становиться С++ проф
3
|
|
|
Заблокирован
|
||||||||
| 04.08.2015, 12:14 | ||||||||
|
Используй только последнюю версию, с других галочки снимай, тебе нужна Desktop Qt 5.5.0 MSVC2013 64bit Ерунда всё это. В QtCreator такого конечно же включить нельзя включить, т.к. нужно только для VS. В общем, в Qt так код никто не пишет. Зачем тебе суперкрутой фреймворк Qt, если ты пишешь код не на нём? Под Qt пишут кодом самого Qt. В частности в нём есть QString (для решения проблем с юникодом )Если ты будешь писать платформозависимые вещи в коде на Qt, тогда никакой кроссплатформенности ты не получишь. Понимаешь в чём фокус, всё подобные кроссплатформенные вещи вшиты в недра Qt и он сам знает посредствам всяких #ifdef-ов, когда ему какой код применять в зависимости от платформы. Ты же должен использовать классы Qt (начинаются на букву Q, допустим QString, QVector), стандарт С++, STL, свои класса с платформонезависимым кодом, а так же сторонние кроссплатформенные библиотеки. Про всякие #include <windows.h> - забудь. А что же до твоего примера выше, которые написан на VisualStudio... Ну что ж, если понимать суть, то можно хоть в командной строке собрать, тут ведь нет ничего сложного. Для его сборки в QtCreator тебе необходимо сделать следующее: 1. Создать пустой проект (делай именно так): Файл->Новый файл или проект->Другой проект->Empty qmake Project 2. Добавить туда CPP файл: Файл->Новый файл или проект->(снизу в разделе "файлы и классы")C++->C++ Source File. Вводишь там любое имя ему, жмёшь далее .. далее... 3. В этот файл нужно скопировать свой код под WinApi (VS) и подправить там следующее: a) Короче, в коде перед текстом везде пиши буковку L, например, L"Hello World", это говорит о том, что текст в юникоде. б) Подключи библиотеки винды для винапишных фнукций.. Догадываясь, что ты см это не сделаешь , я тебе всё подправил. Вот готовый код:
0
|
||||||||
|
Неэпический
|
||||||||
| 04.08.2015, 12:37 | ||||||||
0
|
||||||||
|
Заблокирован
|
|
| 04.08.2015, 12:49 | |
|
0
|
|
|
Неэпический
|
||||||||||
| 04.08.2015, 12:59 | ||||||||||
|
CreateWindow, например, макрос, который определяется как
TCHAR бы развернулся как надо, естественно пришлось бы _T("string literal") использовать, вместо L"string literal". А про WinMain на MSDN вообще страшные вещи пишут:
1
|
||||||||||
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
||
| 06.08.2015, 10:52 [ТС] | ||
|
Qt, Butt-Head, Спасибо! Каждое Ваше сообщение, после небольшого редактирования, могло бы стать главой книги.
Всё попробовал, всё работает, мне понравилось, у Вас тут кнопка "+ Спасибо" пропала Многое не знаю, но похоже, что для моих графиков с этим Qt можно всё сделать как мне нужно не понимая полностью, всё как работает...А как мне теперь окно сделать и в нём точки и отрезки ставить? Добавлено через 18 часов 49 минут MansMI,
0
|
||
|
9 / 9 / 0
Регистрация: 26.01.2015
Сообщений: 94
|
|
| 06.08.2015, 11:06 | |
|
Сейчас вроде бы все делают в qt GUI приложения.Про WinApi вообще забудь .Можешь с OpenGL поиграться)
0
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|
| 06.08.2015, 11:16 [ТС] | |
|
Licoze, Про WinApi уже посмотрел, понял...
0
|
|
| 06.08.2015, 11:16 | |
|
Элементы интерфейса на opengl или win32 api? Подскажите, Win API или MFC? Односвязный список на MFC или API Что выбрать: mfc, api, winforms,qt или перейти на с#? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|