ГЛАВА 2.
25.08.00

Глава 2. Кнопочки и сообщения.

Во имя Отца, и Сына, и Духа Святого, Enter!
(Молитва программиста)

Вернемся к тому, что мы сотворили в первой главе. Сначала посмотрим, из чего же состоит исходный код нашей программы. Для этого пощелкаем в единственном пока окне - "Project::2000.ide" на всех плюсах. Развернется полная структура проекта - см.рис.2.1.

Рисунок 2.1. Развернутая структура проекта.

Собственно, каждая строка - это отдельный файл. С большинством из них можно (и придется) работать в текстовом режиме. Но есть и такие места, где можно все делать мышкой.

2.1. Создание своей кнопки в окне программы.

Выделим строку "2000app.rc" в проекте и дважды щелкнем на ней. Появится новое окно, которое называется редактором ресурсов. Развернем, нажав на плюс, пункт "DIALOG", и выделим единственный подпункт - "IDD_CLIENT (2000)" - см.рис.2.2. (И вот тут я понял, что имя для нашей программы - 2000 - я выбрал не совсем удачно. То, что Вы видите в скобках - 2000 - это идентификационный номер ресурса "диалога" - и он никак не связан с выбранным нами именем программы. Выберите в следующий раз другое имя - но здесь Вы увидите все равно " IDD_CLIENT (2000)" ). Но продолжим. Справа мы увидим нечто, очень похожее по внешнему виду на нашу программу. В общем-то, это она и есть. То, что там вверху написано "Dialog Client" и нет справа крестика, не должно вас смущать - все это меняется и добавляется в других частях программы - вспомните, что парой абзацев выше мы узнали, что проект содержит много разных исходных файлов.

Рисунок 2.2. Редактор ресурсов.

Теперь дважды щелкнем на выделенном пункте - "IDD_CLIENT (2000)" - и мы получим возможность изменить вид нашей программы. В новом открывшемся окне вы должны снова увидеть внешний вид вашей программы, а также панель "Controls" - см.рис.2.3.

Рисунок 2.3. Панель создания элементов управления и оформления.

Если такой панели у вас не видно, то щелкните правой кнопкой мыши вне прямоугольника "Dialog Client" и в появившемся меню пометьте галочкой пункт "Control Palette" - см.рис.2.4.

Рисунок 2.4. Показ разных панелей редактора ресурсов.

Кстати, может пометить и пункт "Grid" - это сетка, которая поможет выравнивать все, что вы нарисуете на своей программе.

Но вернемся к панели "Controls". Нажмите кнопку, на которой нарисована кнопка (убедитесь сами, что это не каламбур, а так оно и есть) с надписью "OK". Если вы теперь переведете курсор на вашу программу, то увидите, что он принял вид перекрестья. Ткните где-нибудь на программе - и вы получите вашу собственную кнопку - см.рис.2.5.

Рисунок 2.5. Новая кнопка.

С этой кнопкой можно сделать многое, если навести на нее курсор и нажать правую кнопку. Появившееся меню - см.рис.2.6 - содержит ряд полезных опций, но пока мы зайдем в пункт "Properties".

Рисунок 2.6. Изменение свойств кнопки.

Появившееся меню свойств представляет тоже много возможностей, но для начала ограничимся тем, что в поле "Caption" введем вместо надписи "Button3" надпись "Нажимать здесь" - чтобы будущий пользователь вашей программы не промахнулся - см.рис.2.7.

Рисунок 2.7. Изменение надписи на кнопке.

Нажав затем "OK", Вы увидите, что кнопка попыталась показать на себе Вашу надпись, но не смогла, поскольку кнопка маленькая, а надпись длинная - см.рис.2.8.

Рисунок 2.8. Надпись не убралась на кнопку.

Проблема? Устраним! Беретесь за один из левых или правых квадратиков и растягиваете кнопку до нужных размеров - см.рис.2.9.

Рисунок 2.9. Нормальная кнопка с надписью.

Чтобы полюбоваться на результат, закроем все окна, оставив только проект, и нажмем на кнопку "Run".

Когда я писал эти строки и по ходу выполнял все описываемые действия, то после нажатия на кнопку "Run" я получил сообщение, с которым большинство из нас, наверное, хорошо знакомо - см.рис.2.10.

Рисунок 2.10. Бывает, что творческий процесс прерывается на самом интересном месте.

Значит, самое время сказать, что, вообще-то, я кнопкой "Run" обычно не пользуюсь. Но вернемся сначала к Borland-у. Если у Вас (на что я надеюсь) он не вылетел, то все равно прочитайте следующие абзацы - они полезны и для нормальной работы.

Итак, если у Вас вдруг произошло то же самое - то снова запускаем его, но теперь уже через меню "File-Open" ищем наш файл - "2000.ide". Если открылся - хорошо. Еще раз идем в редактор ресурсов (если забыли, как - вернитесь к рис.2.1) и убеждаемся, что созданная нами кнопка не пропала - поскольку при закрытии редактора ресурсов он автоматически сохраняет все изменения. Снова его закрываем и нажимаем на кнопку "Build" (см.рис.1.7).

Теперь объясняю, как я обычно проверяю работу программы при ее создании. Да все просто - я держу открытой папку, в которой лежит наш проект - и там всегда есть файл "2000.exe", который я и запускаю как обычную программу. А чтобы заново создать эту программу после внесения каких-либо изменений - служат кнопки "Build" и "Make" (см.рис.1.7). Сразу скажу и о последней. Опять же, обычно я пользуюсь именно "Make" - она заново создает файл "2000.exe", но при этом перекомпилирует только те файлы, которые изменились с момента последнего создания файла "2000.exe" (Borland ведет учет всех изменений). Кнопка же "Build" перекомпилирует ВСЕ файлы (независимо от того, изменялись они или нет), что, конечно, требует больше времени. Короче, после внесения изменений нажимайте на "Make", а если потом ваша программа почему-то не запустится (а должна бы - по вашему мнению) - попробуйте "Build" - иногда помогает.

Значит, нажали на "Make" (или "Build"), получили сообщение, что все "Success" ("успешно") - см.рис.2.11.

Рисунок 2.11. Удачное завершение создания (билдинга) файла "2000.exe"

Затем открываем папку с файлом "2000.exe" и запускаем его. Радостно замечаем, что программа имеет нашу кнопку - см.рис.2.12.

Рисунок 2.12. Программа с нашей кнопкой.

На эту кнопку можно даже нажимать - она будет утопать под курсором, как и положено приличной кнопке. К сожалению, в результате нажатия не происходит никаких действий, но это мы сейчас поправим.

2.2. Заставим кнопку работать.

Как говорится в одной умной книжке, кнопка в программе - это самый простой, интуитивно понятный и удобный элемент. С кнопками мы знакомы по обычной - внекомпьютерной - жизни. Любому ясно - если есть кнопка, то надо на нее нажать: и посмотреть, что получится

Закроем нашу программу и вернемся в Borland. Зайдем в редактор ресурсов и дойдем снова до меню, показанного на рис.2.6. Только теперь в этом меню выберем пункт "ClassExpert". В нашем случае можно было бы попасть в "ClassExpert" и не заходя в редактор ресурсов, но обычно этот заход делается сразу после того, как мы нарисовали новую кнопку. Вы должны увидеть новое окно - см.рис.2.13 - это и есть "ClassExpert".

Рисунок 2.13. "ClassExpert"

Если Вы внимательно изучали предыдущие картинки, то можете вспомнить, что обозначение IDC_BUTTON1 Вы видели в свойствах нашей кнопки - см.рис.2.7. Это ее идентификатор в рамках нашего проекта. Щелкнем на плюсе слева от IDC_BUTTON1 и мы увидим кучу действий, на которые может реагировать кнопка - см.рис.2.14.

Рисунок 2.14. Действия, на которые может реагировать кнопка.

Самое естественное для кнопки - это реагировать на нажатие - поэтому выделим пункт BN_CLICKED ("кликание на батоне" - расширенный русский перевод этого сокращения) и нажмем правую кнопку мыши. Снова появится меню - см.рис.2.15.

Рис.2.15. Продолжение процесса работы с кнопкой.

Выберем "Add handler", нажав на нем. Появится еще один запрос, в котором уточнят, каково будет внутреннее имя действия этой кнопки. Потом ведь у Вас кнопок в программе будет много, и чтобы легко отличать их в тексте программы друг от друга, лучше, чтобы их имена отличались. Назовем ее "BNClickedOne" - см.рис.2.16.

Рисунок 2.16. Присвоение внутреннего имени кнопке.

Теперь в "ClassExpert" идентификатор кнопки и действие BN_CLICKED будут помечены галочками, а в нижней части этого эксперта появится кусочек текста какого-то файла, в котором появилась строка с именем, только что введенным нами - см.рис.2.17.

Рисунок 2.17. Мы уже на полпути к работоспособной кнопке.

Давайте закроем "ClassExpert" и редактор ресурсов, вернувшись к окну, в котором есть только окно проекта. В этом окне выделим и дважды щелкнем на строке "2000dlgc.cpp" - это один из файлов исходного кода, который мы и будем, в основном, редактировать вручную. Этот файл откроется в своем собственном окне. Пойдем туда и найдем кусок, который мы ранее видели в "ClassExpert" - см.рис.2.18.

Рисунок 2.18. Начинаем редактировать исходный код вручную.

Собственно, если Вы читаете по-английски, то Вам понятно, что написано темно-синим цветом: "ВСТАВЬТЕ Ваш код здесь". Именно на этом месте кончаются движения мышью и начинается работа с клавиатурой. Именно в этом месте мы должны написать то, что будет происходить при возникновении события "Нажатие на кнопку". А происходить у нас будет появление на экране окошка с неким сообщением и кнопкой "ОК".

Делается это не просто, а очень просто - вписываете там, где сказано "вставьте" следующий код:

void T2000DlgClient::BNClickedOne()
{
        // INSERT>> Your code here.
        MessageBox("Вы нажали на кнопку\nСпасибо Вам за это!",
                "Наше сообщение", MB_OK | MB_ICONINFORMATION);
}

К сожалению, это в книге все выглядит красиво. На самом деле, когда вы будете в Borland-е вводить эту строку, то можете столкнуться с тем, что русские буквы отображаются в виде какой-то абракадабры. Это никак не повлияет на работу вашей будущей программы - там русский текст отобразится нормально (взгляните ниже - на рис.2.20). Более того - например, при отладке, в другом окне Borland тоже покажет их нормально. Но вот здесь почему-то не хочет. Это, конечно, создает некоторые неудобства. Или смиритесь с ними, или найдите решение, а потом расскажите мне.

Теперь самое время и место рассказать о последней помеченной, но пока не упомянутой кнопке на рисунке 1.7 - "Compile". При нажатии на эту кнопку происходит компилляция (трансляция) файла, который в данный момент является активным для Borlanda. В нашем случае это файл "2000dlgc.cpp". Что такое компилляция, в общем-то, и неважно. Главное для нас сейчас заключается в том, что после нажатия на кнопку "Compile" Borland проверит наш файл и если там нет ошибок, он радостно скажет нам об этом - см.рис.2.19.

Рисунок 2.19. Компилляция прошла успешно.

Если же Вы получили сообщение об ошибке, то тщательно проверьте набранный Вами текст или перейдите к главе 3 - там мы как раз поговорим об ошибках в программе.

Ну, а после успешной компилляции можно нажать "Make" - должно появиться сообщение об успешной компилляции. Запустим нашу программу на выполнение - кнопкой "Run" или из ее папки. Мы снова увидим знакомую панель с нашей кнопкой. Нажмем на нее. И - о чудо! - появилось сообщение - см.рис.2.20.

Рисунок 2.20. Результат нажатия на нашу кнопку.

2.3. Сообщения MessageBox - чуть более подробно.

Сравнивая увиденное на экране сообщение с тем текстом, который Вы ввели, Вы можете легко понять структуру (или как это принято называть - синтаксис) команды MessageBox. А именно - первая фраза в кавычках - это текст сообщения. Сочетание "\n" означает переход на новую строку. Вторая фраза - это заголовок сообщения. А третья часть - это некие флаги (разделенные вертикальными черточками), определяющие внешний вид сообщения. Так вместо флага MB_ICONINFORMATION можно поставить другие, и тогда вместо восклицательного знака будут появляться другие значки - см. таблицу.

MB_OK - это тоже флаг, и означает он, что в появившемся сообщении будет только одна кнопка - "ОК". Но, очевидно, бывают и сообщения в которых есть более одной кнопки. Вместо флага MB_OK мoгут стоять следующие флаги - см.таблицу.
ФлагЧто дает
MB_ABORTRETRYIGNOREСообщение содержит три кнопки - Abort, Retry и Ignore.
MB_OKСообщение содержит одну кнопку - ОК. Если не поставить никакого флага из этой компании, то по умолчанию принимается именно этот флаг.
MB_OKCANCELСообщение содержит две кнопки - OK и Cancel.
MB_RETRYCANCELСообщение содержит две кнопки - Retry и Cancel.
MB_YESNOСообщение содержит две кнопки - Yes и No.
MB_YESNOCANCELСообщение содержит три кнопки - Yes, No и Cancel.

Попробуйте заменить флаг MB_OK на какой-либо флаг из таблицы, откомпиллируйте и запустите программу. Теперь при нажатии на нашу кнопку будет появляться сообщение с двумя или тремя кнопками - в зависимости от того, что Вы выбрали. Попробуйте понажимать на эти кнопки - результат всегда будет одинаков - окно сообщения закроется и ничего больше не произойдет. Но раз кнопки разные - значит должны происходить разные действия при нажатии на них? Не должны, но могут. Этим мы займемся через одну главу.

Галявов И.Р. e-mail: cborland@mail.ru

Назад | Содержание | Вперед


Interface Ltd.


По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 25.08.00