- •Лабораторный практикум «Основы разработки приложений Windows» Книга 1
- •Часть 1. Теоретические сведения4
- •Часть 2. Лабораторный практикум95
- •Часть 1 Теоретические сведения
- •1. Структура приложения Windows Простейшая программа с главным окном
- •Структура программы
- •Главная функция WinMain()
- •Регистрация класса окна
- •Создание и показ окна
- •Сообщения Windows и цикл их обработки
- •Оконная функция
- •Макрос handle_msg и структурирование программы
- •2. Интерфейс графических устройств
- •Простая программа, использующая средства gdi
- •Обработка сообщений wmpaint
- •Контекст устройства
- •Использование графических инструментов
- •3. Ресурсы: меню Простая программа с меню
- •Файл ресурсов
- •Описание меню в файле ресурсов
- •Сообщение wmcommand
- •Программное создание меню
- •Плавающее меню
- •Инструментальная панель
- •Всплывающие подсказки
- •0,"Первая строка"
- •1,"Вторая строка"
- •2,"Третья строка"
- •4. Ресурсы: диалоговые окна
- •Простая программа с меню и диалогом
- •Описание диалога в файле ресурсов
- •Обслуживание модального диалога
- •Модальный диалог как главное окно приложения
- •Немодальный диалог
- •Список в диалоговом окне
- •Окно редактирования и статический элемент управления
- •Графика в диалоговом окне
- •Перекрашивание диалогового окна и его элементов
- •Часть 2 Лабораторный практикум Работы лабораторного практикума Работа 1. Вызов функций Windows
- •Работа 2. Главное окно приложения (пример 1-1 из настоящего пособия)
- •Работа 3. Вывод в главное окно приложения текста и фигур (пример 2-1 из настоящего пособия)
- •Работа 4.Вывод в главное окно приложения текста и фигур (индивидуальное задание а)
- •Работа 5. Меню и модальный диалог (пример 4-1 из настоящего пособия)
- •Работа 6.Меню (индивидуальное задание в)
- •Работа 7.Модальный диалог в качестве главного окна приложения (индивидуальное задание с)
- •Работа 8.Вывод графика в главное окно приложения (индивидуальное заданиеD)
- •Работа 9. Немодальный диалог
- •Работа 10. Диалог с окном редактирования
- •Работа 11. Программное создание меню
- •Работа 12. Плавающее меню
- •Работа 13. График в диалоговом окне
- •Работа 14. Инструментальная панель (tool bar)
- •Работа 15. Инструментальная панель со всплывающими подсказками (tool tips)
- •Работа 16. Пользовательские пиктограммы и курсоры
- •Работа 17. Локализация программных продуктов
- •Индивидуальные задания лабораторного практикума
Окно редактирования и статический элемент управления
Создадим на базе диалогового окна простенький калькулятор, который будет вычислять, например, значение синуса для вводимого с клавиатуры значения аргумента, задаваемого в градусах. Для ввода аргумента используем элемент управления – окно редактирования (называемое иногда окном ввода), а для вывода значения функции – статический элемент управления, т. е. просто текстовую строку. Вывод этой программы приведен на рис.4.6. Как видно из рисунка, диалоговое окно, как и в предыдущей программе, выступает в качестве главного окна приложения.
Рис. 4.6. Окно редактирования и статический элемент управления
/*Пример 4-5. Окно редактирования и статический элемент*/
/*Файл 4-5.RC*/
#include "4-5.h"
Dlg DIALOG 20, 20, 96, 39
STYLE WS_CAPTION | WS_SYSMENU
CAPTION "Значения синуса" {
CONTROL "", ID_INPUT, "EDIT", WS_BORDER, 6, 4, 84, 10
CONTROL "", ID_RES, "STATIC", SS_LEFT, 6, 24, 58, 10
}
/*Файл 4-5.CPP*/
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <math.h>
#include "4-5.h"
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int){
DialogBox(hInst,"Dlg",NULL,DlgProc);
return 0;
}
BOOL CALLBACK DlgProc(HWND hwnd,UINT msg,WPARAM
wParam,LPARAM lParam){
switch(msg){
HANDLE_MSG(hwnd,WM_COMMAND,DlgOnCommand);
default:
return FALSE;
}
}
void DlgOnCommand(HWND hwnd,int id,HWND,UINT){
char str[20];
float arg;
if(id==ID_INPUT){
GetDlgItemText(hwnd,ID_INPUT,str,19);
arg=atoi(str)*M_PI/180;
float y=sin(arg);
sprintf(str,"%f",y);
SetDlgItemText(hwnd,ID_RES,str);
}
if(id==IDCANCEL)
EndDialog(hwnd,0);
}
В файле ресурсов описывается состав модального диалогового окна: окно редактирования (класс EDIT, стиль WSBORDER, чтобы у окна была рамка) истатический элемент (классSTATIC,стильSSLEFT, позиционирующий текст влево).Идентификаторы элементов управления, как и всегда, определены в файле4-5.H.
В оконной функции диалога DlgProc() обрабатывается единственное сообщениеWMCOMMAND, которое поступает в приложение при вводе текста в окно редактирования, а также при нажатии кнопки. Поскольку этих событий всего два, в функцииDlgOnCommand()для их отбора вместо конструкцииswitch-case используется операторif.
При вводе в окно ввода каждой цифры аргумента управление передается на блок, следующий за оператором if (id == IDINPUT). Здесь последовательно выполняется несколько операций. Прежде всего текст, введенный в окно редактирования, с помощью функцииGetDlgItemText() копируется в символьную строкуstr.Полученная строка с помощью функцииatoi() преобразуется в целое число, которое в этом же предложении умножением на π (константаMPI) и делением на 180 переводится в число радианов (что требуется для функцииsin()).Далее вычисляется значение синуса (переменнаяy), и полученное число функциейsprintf() помещается в ту же строкуstr. Наконец, с помощью функцииSetDlgItemText() строкаstr копируется в статический элемент управления (идентификаторIDRES).
Стоит заметить, что в отличие от примера 4-2, статический элемент управления заполняется текстом не однократно на этапе создания диалога, а динамически по ходу взаимодействия пользователя с диалоговым окном. Пользователь может многократно вводить в окно редактирования новые данные и получать соответствующий результат вычислений.