![]() 14 / 14 / 3
Регистрация: 16.04.2013
Сообщений: 404
|
||||||
1 | ||||||
Изучение WinAPI07.06.2014, 00:54. Показов 3708. Ответов 14
Метки нет Все метки)
(
Добрый вечер.
Начал изучать WinApi, но как увидел код простого окна, то немного очумел ![]() Расскажите кто как его учил и посоветуйте как лучше изучать, ведь что бы написать код одного окна, это же сколько нужно всего запомнить. Я знаю что можно использовать шаблоны, но хотелось бы понимать и уметь самому писать код. Вот простой код окна с Hello World Меня он как то пугает) Или всё же с опытом придёт?) Спасибо)
0
|
07.06.2014, 00:54 | |
Ответы с готовыми решениями:
14
Изучение Winapi Изучение WINAPI Изучение WinAPI на С++ |
Заблокирован
|
||||||
07.06.2014, 08:51 | 2 | |||||
1. Именно он и есть самое трудное в изучении WinAPI. Все остальное намного легче.
Начните лучше с такого проекта (это его код целиком)
Первый - старинное шаманское средство))))) просто сохраните его в такое место, где он будет под рукой, и копипастите оттуда, как заклинание, не разбираясь, и будет вам счастье)))))))) А второй - разобрать, что все это означает)))))) Объяснения есть тут http://netcode.ru/cpp/?artID=3920 http://softcraft.ru/coding/winapi/generic.shtml - на последнем сайте несколько статей по вашей теме, смотрите все а если они вам не нравятся, именно для этого и существует гугл
2
|
Ушел с форума
![]() ![]() |
|
07.06.2014, 10:04 | 3 |
Придет. Точнее, пройдет.
С опытом Вы поймете, что в этой "портянке" все составляющие нужны. И стартовый код, и регистрация класса, и цикл выборки оконных сообщений, и сама оконная процедура с обработчиками. Просто в серьезных приложениях такие вещи пишутся, как правило, на базе различных GUI-библиотек, которые скрывают всю эту "кашу" за простыми и приятными фасадиками. Но знать, как оно там, внутри, устроено, все равно нужно.
2
|
Программист
![]() 119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
|
|
10.06.2014, 20:45 | 4 |
Доброго времени суток. Есть очень хорошая книжечка: "Юрий Щупак Win32 API Эффективная разработка приложений". Там всё разжевано. В Интернете найти не проблема.
1
|
![]() 68 / 65 / 21
Регистрация: 01.05.2014
Сообщений: 247
|
|
11.06.2014, 10:23 | 5 |
Приветствую - ВСЕХ!
Ни надо ничего учить. Нужно знать - где точку с запятой установить, ну и ещё "пару" мелочей. Просто: нужно грамотно знать структуру, функции "WndProc". Вот ОНА - пожалуй самая Важная и Интересная, т.к. неверный "return" - "завалит" всю программу. Также. Программы создаются ни для того, чтобы показать - вот я , мол программист, для того чтобы Это пользу приносило - непосредственно ВАМ.
0
|
![]() 14 / 14 / 3
Регистрация: 16.04.2013
Сообщений: 404
|
|
12.06.2014, 13:05 [ТС] | 7 |
Спасибо, учу по этой книге)
0
|
Заблокирован
|
||||||||||||||||||||||||||
13.08.2014, 20:50 | 8 | |||||||||||||||||||||||||
Ритуал некродлиннопостирования в честь вопросов вокруг кода с MSDN и его копий и пародий разной степени перевранности.
Код этот кажется чрезмерно сложным, потому что, во-первых, в нем много лишнего, во вторых, он плохо структурирован. Лишнее в коде: 1) стили CS_HREDRAW | CS_VREDRAW. Они вызывают перерисовку окна при растягивании. Что нужна далеко не всегда и иногда лишь приводит к мерцанию содержимого. Достаточно вместо них писать 0. 2) почему используется WNDCLASSEX и RegisterClassEx, а не WNDCLASS и RegisterClass соответственно? Из-за этого приходится заполнять свойство wc.hIconSm. Может при каких-то условиях это и имеет смысл: hIcon -это большая иконка для панели задач, hIconSm - маленькая для заголовка окна. Но здесь все равно в обоих случаях используется одна и та же иконка! Да и она, если уж на то пошло, в хелловорлде необязательна. Достаточно поставить hIcon в NULL и все будет нормально. 3) что может такого случиться, что не получится зарегистрировать класс окна хелловорлда (!) и создать это окно?
А вызывать MessageBox, если не получилось создать основное окно - это, должно быть, что-то в стиле "Не найдена клавиатура, нажмите клавишу F2". Если почему-то не создалось окно, то и MessageBox может не появиться. Вообще, параноики и прочие индусы часто фаршируют учебные коды трукатчами и прочей защитой-от-фиг-пойми-чего, чем их удлинняют. 4) Зачем (HWND)NULL, зачем (HINSTANCE)hInstance? Кто-то передает параметром hWnd или hInstance что-то другое, что не является дескриптором окна или экземпляра приложения? Да еще и в хелловорлде. 5) Зачем это?
Плохая структурированность кода: 1)
2)
Достаточно переделать код в соответствии со всеми этими пунктами - и разобраться в нем станет во много раз легче.
0
|
Ушел с форума
![]() ![]() |
|
13.08.2014, 21:22 | 9 |
Со всеми пунктами согласен, кроме этого:
Чаще приходится видеть код, где на проверки просто забили. Качество такого кода, разумеется, "на высоте" - он хорошо читается и так же "хорошо" предсказуем. А какие занятные ошибки порой в таком коде можно найти, м-м !..
0
|
Заблокирован
|
|||||||||||
13.08.2014, 21:33 | 10 | ||||||||||
Убежденный,
Например, в этом коде есть никому не нужная проверка, зарегистрировался ли класс окна и создался ли дескриптор окна, но зато не учтено, что вот такая конструкция
И что им мешало дописать десяток-другой лишних букаф и сделать вот так?
0
|
Ушел с форума
![]() ![]() |
|
13.08.2014, 23:21 | 11 |
Не проверять ошибки - это беспечность, независимо от того, "нужные"
проверки или нет. Если функция/метод бросает исключение - его нужно ловить. Если функция/метод возвращают bool или код ошибки - его нужно проверять. Всегда и везде. Код, который не следует этому правилу, не может считаться корректным по определению. IMHO. Добавлено через 17 минут Да, и я хотел бы добавить, что "зашумление" кода проверками на каждом шагу - это не приговор. Если сделать грамотное разделение на бизнес-слой и слой обработки ошибок, "шума" не будет. Например, можно спрятать все проверки внутри оберток, кидающих исключения. А исключения ловить на верхних уровнях. В итоге бизнес-уровень останется компактным и выразительным.
0
|
Заблокирован
|
|
13.08.2014, 23:30 | 12 |
Убежденный,
А до того, что покупателям куда важнее чтобы код компилировался в VS как надо, ибо это платный набор GUIшных свистоперделок за штуку баксов, и покупателям его в своих проектах в VS использовать, - дурак начальник просто не допетрит.
0
|
Ушел с форума
![]() ![]() |
|
13.08.2014, 23:40 | 13 |
Водяной Змей, что Вы по существу можете возразить против проверки всего и вся ?
Только давайте не будем про индусов и то, что код, обложенный проверками, вдруг почему-то должен перестать компилироваться. Эти вещи никак друг с другом не связаны: от того, что я лишний раз проверю возвращаемое RegisterClassExW значение, код компилироваться не перестанет. Да, и оговорюсь сразу, что не ставлю никаких "холиварных" целей, боже упаси. Свою позицию по этому вопросу, если интересно, я могу расписать в более подробной форме, но сначала хотел бы услышать Ваш ответ.
0
|
Заблокирован
|
|
14.08.2014, 00:47 | 14 |
Убежденный,
Для всяких платных контролов и прочих средств разработки это особо важно: новичок попробует триал - ничего не поймет - полную версию не купит - да еще и отзыв плохой в инете напишет, так что и профи выберет лучше продукт конкурентов.
0
|
14.08.2014, 06:17 | 15 | ||||||
0
|
14.08.2014, 06:17 | |
Помогаю со студенческими работами здесь
15
С чего начать изучение WinAPI? Посоветуйте с чего начать изучение WinAPI winApi изучение изучение C# изучение с++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
|
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
|
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
|
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
|
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
|
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
|
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
|
Разработка кроссплатформенного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
|
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
|
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
|