Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование в среде Visual C++ 6. Учебное пособие
.pdf
и дальнейшие результаты вычислений будут определяться
этим числом, которое невозможно вывести для его прочтения. Компилятор обэтой ошибке сообщить нам не может,
анайти её можно только сочень большим опытом программирования различных приложений. Это Вам совет набудущее. Итак, после строк комментарий сновой строки запишем следующие операторы:
a1=a2=y0=xk=1.0;
x0=0.0;
n=10;
nm=1;
8.7. Создание диалогового окна
В приложениях, выполненных наязыке Visual C++, все ис-
ходные параметры вводятся спомощью диалоговых окон. Вот
его-то инужно нам создать. Номастер MFC AppWizart одно
диалоговое окно уже создал. Оно играет роль информационного окна. Чтобы его посмотреть и отредактировать, нужно
вокне Workspase— ResourseView щёлкнуть левой кнопкой ма-
нипулятора назнак + слева отDiur 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,
даитовформе символьных строк. Анам нужно, чтобы этими данными мог пользоваться класс CDiurDoc, класс документов. Для этого нужно создать функцию, которая перевела эти переменные вкласс документов, причём вмашинном
виде. Создать эту функцию можно следующим образом. Вызовем наэкран монитора окно MFC Class Wisard, воспользовавшись пунктом меню View— ClassWizard. Вокне MFC
Class Wisard откроем пункт Message Maps. Вокне Class name
выделим имя класса CDiurDoc, авокне Object IDs найдём
имя файла IDD_DIALOG1, вокне Messeges выделить пункт
COMAND илевой кнопкой манипулятора щёлкнем накнопку Add Function. Появится окно с предложением назвать
функцию как OnDialog1. Соглашаемся сэтим предложением, щёлкнув левой кнопкой манипулятора на кнопку OK,
а затем натакую же кнопку вокне MFC Class Wisard. Таким образом, вклассе CDiurDoc появилась член-функция
OnDialog1. Чтобы убедиться в этом, достаточно в окне
Workspase вовкладке ClassView раскрыть класс CDiurDo.
Левой кнопкой манипулятора щёлкнем наимени функции
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 определяет номер помеченной кнопки вди-
алоговом окне иобрабатывает соответствующее окно редактирования, где было записано число ввиде строки символов. Для
перевода вмашинный код вклассе CDiurDoc имеются функции для такого преобразования. Функция atof переводит строку символов вчисло сплавающей запятой типа double. Функция atoi переводит строку символов, представляющую число
целого типа, вчисло типа int. Аргументы этих функций— это
члены-данные класса CDialogEdit. Таким образом, исходные
данные попадают в класс документа CDiurDoc. Завершаю-
щим оператором оператора while является:
UpdateAllViews (NULL);
}
Эта функция очищает экран монитора ипередаёт управле-
ние функции OnDraw класса CDiurView.
Теперь организуем функцию, которая должна отреагиро-
вать наактивизирование пункта меню ипанели управ-
— 70 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
