Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в среде Visual C++ 6. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
и дальнейшие результаты вычислений будут определяться этим числом, которое невозможно вывести для его прочте­ния. Компилятор обэтой ошибке сообщить нам не может, анайти её можно только сочень большим опытом програм­мирования различных приложений. Это Вам совет набуду­щее. Итак, после строк комментарий сновой строки запи­шем следующие операторы:
a1=a2=y0=xk=1.0; x0=0.0; n=10; nm=1;
8.7. Создание диалогового окна
В приложениях, выполненных наязыке Visual C++, все ис-
ходные параметры вводятся спомощью диалоговых окон. Вот его-то инужно нам создать. Номастер MFC AppWizart одно диалоговое окно уже создал. Оно играет роль информацион­ного окна. Чтобы его посмотреть и отредактировать, нужно вокне Workspase— ResourseView щёлкнуть левой кнопкой ма- нипулятора назнак + слева отDiur resources, появится спи­сок ресурсов нашего приложения. Затем щёлкнем левой копкой манипулятора назнак + слева отслова Dialog, появится список диалоговых окон. Унас оно пока единственное сименем IDD_ ABOUTBOX. Если на этом имени дважды щёлкнуть левой кнопкой манипулятора, наэкране монитора появится это окно. Справа появится ещё окно сименем Controls синструмента­ми редактирования. Если его нет, тонужно обратиться вменю Tools— Customize. Вграфе Toolbars появится список панелей. Слева отимени панели Controls нужно поставить «птичку» ле­вой кнопкой манипулятора, иэта панель появится наэкране монитора.
— 61 —
Для перевода диалогового окна нарусский язык нужно вы­звать панель Properties, а левой кнопкой манипулятора щёл­кнуть наимени диалогового окна, инапанели Properties вокне Language выбрать русский язык, он позволяет использовать одновременно ирусский, и английский языки. Теперь можно щёлкнуть левой кнопкой манипулятора на заголовок панели (наверху панели) ивокне Caption панели Properties заменить английское название на русское . Аналогичным способом название кнопки OK заменить на русское . Две строчки наанглийском языке можно нетрогать, номож­но добавить свои пояснения. Для этого левой кнопкой мани­пулятора нужно зацепиться за середину нижней грани окна ипотянуть эту грань вниз, увеличив высоту окна. Затем левой кнопкой манипулятора вокне Controls зацепить пункт кноп­ку Aa –статический текст иперетянуть его насвободную часть диалогового окна. Можно эту процедуру повторить иоргани­зовать другую строчку статического текста. Теперь нужно вы­звать окно Properties, закрепить его, левой кнопкой выделить первую строку ивокне Caption заменить текст своим, напри­мер, указать Фамилию синициалами, город, предприятие. Пе­рейдя надругую строку, можно указать кратко порядок работы программы. Всё. Это диалоговое окно готово. Вид его приведён нарис.8.7.
Рис.8.7. Пример диалогового окна 
— 62 —
Теперь перейдём корганизации диалогового окна для вво-
да исходных данных. Для этого вменю Insert щёлкнуть левой кнопкой манипулятора на пункт Resource, на экране мони­тора появится окно со списком допустимых ресурсов. Левой кнопкой щёлкнем дважды на пункт Dialog. Наэкране мони­тора появится окно будущего диалогового окна. Вызовем окно Properties изакрепим его. Как ивпредыдущем случае, удлиним наше окно. Обе кнопки OK иCansel левой кнопкой манипуля­тора перетащим нанижнюю строку. Вокне Workspase появит- ся название окна IDD_DIALOG1. Если заименем диалогового окна будут скобки суказанием наанглийский язык, товыдели­те это имя левой кнопкой манипулятора ивокне Properties вы­берите русский язык. Выделив заголовок окна DIALOG, спо- мощью окна Caption заменить его нарусское  
. Аналогично название кнопки OK заменить нарусское , аCancel на.
Теперь нужно заполнить наше диалоговое окно. Здесь нуж­но выбрать метод ввода. Можно сразу ввести все исходные данные. Нопотом, если нужно заменить только одно значение, нужно всё равно снова вводить все данные. Аможно вводить данные поодному, апотом иредактировать можно тоже поод­ному. Удобнее второй метод. Для выделения вводимого данного используем кнопки. Внашем примере шесть исходных данных, поэтому столько раз повторим следующую процедуру. Левой копкой манипулятора в поле Controls перетащим символ наполе нашего диалогового окна ирасположим все их столби­ком. Спомощью меню Layout эти кнопки можно выровнять полевой стороне окна ивыровнять расстояние между кноп­ками. Название кнопок можно заменить названиями наших переменных a1, a2, x0, xk, y0, n. Теперь ккаждой кнопке нужно из панели Controls поместить окна редактирования данных.
— 63 —
Для этого опять шесть раз зацепить левой кнопкой манипуля­тора кнопку ab| вполе Controls иперетащить её наполе наше­го диалогового окна, поместив их справа отназвания кнопки. Делать нужно последовательно отверхней кнопки книжней. Если это делать произвольно, то наши кнопки не будут со­впадать с соответствующими полями редактирования. Затем нужно выделить первую кнопку ивполе Properties вокошеч­ке Group поставить «птичку». Тогда этой кнопке присвоится номер 0, а остальные кнопки получат соответствующие по­рядковые номера. Получим окно, вид которого представлен нарис.8.8.
Рис.8.8. Вид диалогового окна для ввода исходных данных
Вы можете в любое время сделать перерыв. Для этого
вменю File выбрать пункт Exit исогласиться спредложением сохранить все изменения. Возобновить работу можно так. За­пустить программу Microso Visual C++, вменю File открыть пункт Recent Workspaces и щёлкнуть на имени своей про- граммы. Чтобы вызвать наэкран монитора диалоговое окно, нужно вокне Workspace открыть вставку Resources иоткрыть папку Dialog.
— 64 —
8.8. Создание класса CDialogEdit
Пока что мы сВами получили только картинку нашего диа­логового окна. Нужно теперь организовать класс, который будет знать всё онашем окне. Для этого, пока наше диалого­вое окно находится вцентре экрана монитора, левой кнопкой манипулятора щёлкнем наменю View— ClassWisard. Мастер MFC AppWizard не находит класса для нашего диалогового окна ипредлагает создать новый класс. Вы сэтим соглашае­тесь и левой кнопкой манипулятора щёлкаете накнопку OK вокне предложения мастера. Наэкране монитора появляется окно, как нарис.8.9.
 окно просит назвать новый класс, при этом сообщая имя родительского класса и какому окну оно соответствует. Название класса должно обязательно начинаться сзаглавного символа C. Далее следует составное имя издвух имён, изкото­рых одно должно иметь имя Dialog, адругое— произвольное, например, Edit (русское редактирование). Пусть имя класса будет CDialogEdit. Если ClassWisard будет чем-то недоволен, нужно сменить имя класса, аиногда нужно просто перезагру­зить компьютер.
Рис.8.9. Окно для создания класса кдиалоговому окну
— 65 —
В появившемся на экране монитора окна MFC Class
Wisard открыть пункт Member Variables. Появится окно, как нарис.8.10, спомощью которого можно создавать члены данных этого класса. Здесь попорядку перечислены все окна редактирования, каждому изкоторых нужно присвоить имя изнаших переменных. Имена пусть будут такимиже, как они названы вкнопках, только пусть они будут сзаглавными сим­волами (хотя это инеобязательно).
Итак, выделим первое окно, левой кнопкой манипулятора
щёлкнем на пункт Add Variable (добавить переменную), по- явится другое окно, как нарис.8.11. Вокне после символов m_ напишем имя A1. Таким образом, полное имя переменной, со­ответствующей кнопке a1 будет m_A1. Тип этой переменной будет String, тоесть символьная строка.
Рис.8.10. Окно для создания членов-данных класса
Таким же образом следующей переменной присвоим имя
m_A2, затем m_X0, m_XK, m_Y0, m_N, последней переменной IDC_radio1 присвоим имя m_com типа int. Вокне MFC Class Wisard щёлкнем левой кнопкой манипулятора накнопку OK,
икласс CDialogEdit полностью создан.
— 66 —
Рис.8.11. Окно создания новой переменной
Не забывайте после каждого изменения, связанного сок­ном MFC Class Wisard, воздействовать левой кнопкой мани- пулятора накнопку OK этого окна.
Теперь нужно связать наше диалоговое окно с пунктами меню ипанели управления, созданными нами ранее. Для это­го левой кнопкой манипулятора щёлкнем либо нанаше диало­говое окно, или её имени впункте Workspace— Resources— Dialog — Dialog1, в окне Properties в окошке ID прочтём изапомним идентификатор нашего диалогового окна. Затем откроем наше ранее созданное меню, щёлкнув левой кнопкой манипулятора на пункт Workspace— Resources— Menu— IDR_MainFrame, наэкране монитора появится наше меню, откроем пункт — , ивокне Properties вокне ID за- писать запомненный нами идентификатор диалогового окна. Тоже самое проделаем спунктом Workspace— Resources— Toolbar— IDR_MainFrame . Таким образом, ипункт на­шего меню — , и пункт панели управления  одинаково связаны сдиалоговым окном Dialog1. Аналогично поступим, объединив идентификаторы пункта нашего меню  и соответствующий пункт  панели управления. Для этого откроем пункт меню Workspace — Resources —
— 67 —
Menu — IDR_MainFrame – — , и в панели Properties в окошечке ID запишем IDD_PUSK. Тоже самое проделаем спунктом Workspace — Resources— Toolbar— IDR_MainFrame. — .
8.9. Создание функции OnDialog1
Если теперь нашу программу откомпилировать и запу-
стить, тоуже можно вводить наши исходные данные. Ноэти­ми данными обладать может только класс CDialogEdit, даитовформе символьных строк. Анам нужно, чтобы эти­ми данными мог пользоваться класс CDiurDoc, класс доку­ментов. Для этого нужно создать функцию, которая переве­ла эти переменные вкласс документов, причём вмашинном виде. Создать эту функцию можно следующим образом. Вы­зовем наэкран монитора окно MFC Class Wisard, восполь­зовавшись пунктом меню View— ClassWizard. Вокне MFC Class Wisard откроем пункт Message Maps. Вокне Class name выделим имя класса CDiurDoc, авокне Object IDs найдём имя файла IDD_DIALOG1, вокне Messeges выделить пункт COMAND илевой кнопкой манипулятора щёлкнем накноп­ку Add Function. Появится окно с предложением назвать функцию как OnDialog1. Соглашаемся сэтим предложени­ем, щёлкнув левой кнопкой манипулятора на кнопку OK, а затем натакую же кнопку вокне MFC Class Wisard. Та­ким образом, вклассе CDiurDoc появилась член-функция
OnDialog1. Чтобы убедиться в этом, достаточно в окне Workspase вовкладке ClassView раскрыть класс CDiurDo.
Левой кнопкой манипулятора щёлкнем наимени функции
OnDialog1 (), на экране монитора раскроется содержание этой функции, хотя содержания пока что ещё нет, его пред­стоит нам составить. Указан только тип функции void икка-
— 68 —
кому классу принадлежит. Свои коды можно вставлять всле­дующую строку после комментария. Первый оператор:
CDialogEdit dig;
Он даёт возможность обращаться к переменным класса CDialogEdit через приставку dig. Следующий оператор:
nm=1;
Он неразрешает ещё производить интегрирование. Следу­ющий оператор:
while (dig.Domodal () ==IDOC)
{
Он определяет, былали активизирована кнопка  (ста­рое OK) вдиалоговом окне. Вклассе CDialogEdit понаслед- ству отродительского класса есть функция Domodal () логи­ческого типа. Если активизируется кнопка , именуемая в классе CDialogEdit как IDOC, выражение в скобках опе­ратора while принимает значение . Вместо оператора while можно использовать оператор if, новэтом случае про- грамма сразуже убирает сэкрана монитора диалоговое окно, иего придётся вызывать снова. При использовании операто­ра while диалоговое окно будет находиться наэкране монито­ра, пока вместо кнопки  небудет активизирована кнопка . Оператор, управляемый оператором while, будет со­ставным, иего следует заключить вфигурные скобки:
switch (dig.m_com)
{
case 0:
a1=atof (dig.m_A1);
break;
case 1:
a2=atof (dig.m_A2);
— 69 —
break; case 2: x0=atof (dig.m_X0); break; case 3: xk=atof (dig.m_XK); break; case 4: y0=atof (dig.m_Y0); break; case 5: n=atoi (dig.m_N); } Завершающий оператор; Оператор switch определяет номер помеченной кнопки вди-
алоговом окне иобрабатывает соответствующее окно редакти­рования, где было записано число ввиде строки символов. Для перевода вмашинный код вклассе CDiurDoc имеются функ­ции для такого преобразования. Функция atof переводит стро­ку символов вчисло сплавающей запятой типа double. Функ­ция atoi переводит строку символов, представляющую число целого типа, вчисло типа int. Аргументы этих функций— это члены-данные класса CDialogEdit. Таким образом, исходные данные попадают в класс документа CDiurDoc. Завершаю- щим оператором оператора while является:
UpdateAllViews (NULL); } Эта функция очищает экран монитора ипередаёт управле-
ние функции OnDraw класса CDiurView.
Теперь организуем функцию, которая должна отреагиро-
вать наактивизирование пункта  меню ипанели управ-
— 70 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]