Комментарии
- 31 окт 2020 12:32поймите главное отличие дос от виндовс. В дос ваша программа - не зависит не от чего. Вы можете вызывать какие то функции ОС но все равно - программы вы пишите независимую. В виндовс все иначе. Ваша программа не совсем ваша. Ей полностью управляет виндовс. Когда вы в своей программе создаете окно, то на самом деле это окно не совсем ваше. Программа лишь создает окно в виндовс и регистрирует его у себя. А управлет этим окном сама виндовс, через сообщения. Например когда вы нажимаете крестик закрытия, то сначала в виндовс уходит сообщение WM_CLOSE. А в функция майн, постоянно опрашивает очередь сообщения виндовс на всякие сообщения. И она и получит это сообщение. Каждое окно циндовс имеет свой иникальный номер - хендл. Потому вы можете из своей программы управлять окнами других приложений. Вам просто нужно получить хендл этого окна. А дальше вы можете делать с ним тоже что и со своим окном - закрыть, спрятать, свернуть, переместить и т.д.Т.е. возвращаясь к способам закрытия окна, вы получаете третий способ закрыть окно - послать ему сообщение WM_CLOSE. А приложение можно закрыть послав Application сообщение WM_QUIT
Сообщения можно слать с помошью функции SendMessge.
Но вы лучше пока не леьзьте к сообщениям - это уже продвинутый уровень. Только запутаетесть. - 31 окт 2020 13:50Да я с этим уже имел дело. Просто сейчас я на том уровне, где это не используется.
Про сообщения я читал в Visual C++ 6.0, но сам я их не отсылал. У меня всё работало. - 31 окт 2020 13:51И там было так хреново написано, что я до этого лет 15 добирался.
- 31 окт 2020 16:40Помимо программирования я занимаюсь компьютерными играми. вот не мешайте мне играть в Heroes III и Descent. Я сам решу, чем мне заниматься.
- 1 ноя 2020 17:24Он все равно сделает по своему
А тут просто совпало - о чем я говорю, написано в книжке.
- 1 ноя 2020 17:36На самом деле, в большинстве программ и не требуется сообщения отправлять на прямую. Со времен VC++ 6, многое изменилось. Язык развивается. Эти сообщения обернуты в более удобные вещи. Но вы при желании можете спустится на низкий уровень и отправлять сообщения сами.
Да, еще вспомнил важную деталь. Виндовс вся состоит из окон. Например поле ввода Edit - это тоже окно. Это значит что у него тоже есть хендл и его можно получить и управлять. Даже в чужой программе. Но это специфической окно, потому некоторые сообщения для него не имеют смысла и игнорируются им. Например Edit не будет обрабатывать сообщение WM_CLOSE. Но вы можете получить/установить текст в него, опять же - это можно сделать в чужой программе. Раньше так пароли воровали скрытые за звездочками. Сейчас эту багу закрыли, и если вы используете стандартное поле для ввода пароля, то виндовс не позволит спереть пароль. Но в остальном вы в общем то можете порулить кнопками в чужом окне. Кнопки - тоже окна с точки зрения виндовс
Работа с окнами через хендл, это уже довольно низкий уровень через WinAPI. По сути, все функции это обертки на функциями виндовс. Т.е. все окна создаются не вашей программой, а самой виндовс. Ваша программа просто вызывает системные функции виндовс. Именно по этому все программы выглядят одинаково - одинаковые окна, кнопки поля ввод и пр. Стандартизация. - 2 ноя 2020 01:05Ага, он такой.
Я про это собственно и говорил - человек сам себе на уме. Мне вообще не понятно что он хочет.
- 2 ноя 2020 12:55Когда я учился в МФТИ, у меня не было времени на все эти вещи. Учиться было надо.
- 11 ноя 2020 14:08У меня всё получилось. Я создал вторую форму. Разместил на ней поле ввода текста. Уже решил две задачи.
Использовал метод Text.Char ( n ) для получения символа и метод Text.Length для получения длины строки.
Остальные функции ищутся интуитивно. Согласно концепции ООП выражения для строковых переменных перегружены и пишутся так же, как для численных переменных. Я об этом не читал, я об этом догадался, потому что читал книжку по C++ для DOS. - 15 дек 2020 19:50"концепции ООП выражения для строковых переменных перегружены" - вообще не понял о чем вы. Выражение - это к ООП не относится, это общее понятие. Перегруженные (overload) в ООП могут быть методы. Это такие методы, которые имеют одно название, но разные параметры (в рамках класса). И очень жаль что вы не читали - много бы узнали полезного. Концепция ООП одинакова для любых языков и имеет 3 фундаментальных понятия: наследование, инкапсуляция и полиморфизм. Вот зная что это, вам было бы гораздо проще разобраться, даже методом тыка - просто будете знать как это работает и знать что ожидать.
- 15 дек 2020 19:55Вообще ничего не получится - потому что я не планирую продвигаться вперед. Я планирую перерабатывать свои старые материалы. Ну и, может быть, книжки почитаю. Пока не решил. Но в рамках все того же Visual Basic.
Для того чтобы оставить комментарий, войдите или зарегистрируйтесь
Группа для программистов ( programming )
:Юрий Казекин
Здравствуйте.
С предыдущей задачей вы не справились, переходим к следующей.
Задача 2.
Я создал стандартный проект в Visual Basic .Net с формой. Поработал с ней.
На форме кончилось место, и я решил создать вторую форму. На первой форме я сделал кнопку, которая закрывает первую форму.
Как мне запустить вторую форму?
Лично я решения этой задачи не вижу. А оно есть.
Приложение вызывает форму F1 и передает ей ее саму. Поэтому я смог закрыть форму F1. Но ссылку на F2 не дает, форма F1 ничего не знает о F2.
F2 может быть вызвано приложением, но приложение тоже закрывается после закрытия F1.
В данный момент можно лишь написать второе приложение для второй формы. А вот в Visual Basic 5.0 такой проблемы не было.