WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |   ...   | 6 |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Нижегородский государственный университет им. Н.И. Лобачевского Е.А. Кумагина ПРОГРАММИРОВАНИЕ ПОД WINDOWS Учебно-методическое пособие Рекомендовано методической комиссией факультета ВМК для студентов ННГУ, обучающихся по специальности 080801 «Прикладная информатика» Нижний Новгород 2011 Кумагина Е.А. ПРОГРАММИРОВАНИЕ ПОД WINDOWS. Учебнометодическое пособие. – Нижний Новгород: Нижегородский госуниверситет, 2011. – 55 с.

Рецензент: к.ф.-м.н., ст. преподаватель К.А. Баркалов В учебно-методическом пособии излагается материал по курсу «Программирование под Windows». Пособие содержит базовую информацию по созданию приложений с использованием библиотеки функций Win32API.

Учебно-методическое пособие предназначено для студентов факультета ВМК специальности «Прикладная информатика», изучающих курс «Программирование под Windows».

© Нижегородский государственный университет им. Н.И. Лобачевского, 2011 ©Кумагина Е.А.

2 Оглавление 1. Начало работы..................................................................................................5 1.1. Содержимое папки проекта..................................................................6 1.2. Код простейшего приложения.............................................................7 1.3. Программный интерфейс....................................................................10 2. Типы данных Windows..................................................................................12 3. Механизм сообщений....................................................................................14 3.1. Формат сообщений..............................................................................14 3.2. Обработка сообщений.........................................................................14 3.3. Цикл обработки сообщений...............................................................16 3.4. Функции работы с сообщениями.......................................................3.5. Классификация сообщений по функциональным признакам.........4. Простейшая Windows программа.................................................................4.1. Функция WinMain().............................................................................4.2. Функция окна.......................................................................................5. Работа с окнами..............................................................................................5.1. Стили класса окна...............................................................................5.2. Стили окна, определяющие поведение............................................5.3. Стили окна, определяющие внешний вид.........................................5.4. Сообщения для окон...........................................................................5.5. Функции для работы с окнами...........................................................5.6. MessageBox..........................................................................................6. Основы вывода...............................................................................................7. Контекст устройства......................................................................................7.1. Цвет фона.............................................................................................7.2. Режим фона..........................................................................................7.3. Режим рисования................................................................................7.4. Цвет текста...........................................................................................7.5. Шрифт...................................................................................................7.6. Перо......................................................................................................7.7. Кисть....................................................................................................7.8. Режим отображения............................................................................7.9. Начало системы координат для окна................................................7.10. Начало системы физических координат.........................................7.11. Масштаб осей для окна.....................................................................7.12. Масштаб осей физических координат.............................................8. Работ с общим контекстом отображения....................................................8.1. Общий контекст отображения..........................................................8.2. Рисование точки..................................................................................8.3. Рисование линий.................................................................................8.4. Рисование дуги эллипса.....................................................................8.5. Рисование геометрических фигур......................................................8.6. Области.................................................................................................9. Органы управления........................................................................................9.1. Статический текст...............................................................................9.2. Кнопки..................................................................................................9.3. Элемент редактирования текста........................................................9.4. Списки..................................................................................................10. Работа с мышью...........................................................................................11. Таймер.......................................................................................................... Список литературы...........................................................................................1. Начало работы Для создания приложений можно использовать среду Microsoft Visual Studio. В этой среде информация, необходимая для сохранения, отладки и выполнения приложения хранится в виде проекта. В проекте содержатся имена исходных файлов программы, необходимые библиотечные файлы, список всех опций для компилятора и компоновщика, а также другие средства, используемые для построения программы.



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

1. В меню Файл выберите пункт Создать и затем пункт Проект....

2. В области Типы проектов выберите пункт Win32. Затем в области пункт Проект Win32.

3. Введите имя проекта. В этом примере будет использоваться имя Пример.

Рис. 1 Вид диалогового окна для создания проекта 4. При создании нового проекта Visual Studio помещает проект в решение.

Оставьте имя решения по умолчанию, которое совпадает с именем проекта. Можно принять место размещения по умолчанию, ввести иное место размещения или перейти к каталогу, в который требуется сохранить проект.

5. Для запуска мастера приложений Win32 нажмите кнопку ОК.

6. На странице Общие сведения диалогового окна Мастер приложений Win32 нажмите кнопку Далее.

7. На странице Параметры приложения в поле Тип приложения выберите пункт Приложение Windows.

После выполнения этих шагов будет создан проект c файлами исходного и вспомогательного кода. Эти файлы отображаются в окне Обозреватель решений. Если окно Обозреватель решений не отображается, в меню Вид выберите команду Обозреватель решений.

Рис. 2 Вид окна «Обозреватель решений» Если планируется работать с текстовыми строками, следует изменить свойства проекта, которые были установлены по умолчанию.

В меню Проект выберите пункт Свойства, далее Свойства конфигурации/ Общие Набор знаков – Использовать многобайтную кодировку.

1.1. Содержимое папки проекта Заголовочные файлы Стандартный файл заголовков, в котором определяются новые идентификаторы ресурсов. В 1 Resource.h Microsoft Visual C++ выполняется чтение и обновление содержимого этого файла.

Эти файлы используются для построения файла 2 stdafx.h предкомпилируемых заголовков (PCH) Пример.pch и файла предкомпилируемых типов StdAfx.obj.

3 targetver.h 4 Пример.h Файл заголовков.

Файлы исходного кода 5 Пример.cpp Основной исходный файл приложения.

stdafx.cpp Исходный файл, содержащий только стандартные включаемые модули Файлы ресурсов Перечень всех ресурсов Microsoft Windows, используемых в программе. К ним относятся значки, 7 Пример.rc растровые изображения и курсоры, хранящиеся в подкаталоге RES. Этот файл можно редактировать непосредственно в Microsoft Visual C++.

Файл значка для приложения (32x32). Этот значок 8 Пример.ico включается в основной файл ресурсов Пример.rc.

Файл, содержащий уменьшенную версию значка 9 small.ico приложения (16x16). Этот значок включается в основной файл ресурсов Пример.rc.

Вспомогательные файлы В этом файле представлена сводка содержимого всех 10 ReadMe.txt файлов, входящих в состав приложения Пример.

Основной файл проекта VC++, автоматически создаваемый с помощью мастера приложений. В файле представлены сведения о версии Visual C++, 11 Пример.vcproj использованной при создании файла, а также о параметрах платформы, конфигурации и проекта, заданных с помощью мастера приложений.

Основной файл решения. В решении может быть 12 Пример.sln несколько проектов.

Файл IntelliSence Database - подсистемы, которая 13 Пример.ncb делает подсказки по языку.

1.2. Код простейшего приложения Это приложение создано автоматически с помощью мастера приложений.

В него добавлены только комментарии.

// Пример.cpp: определяет точку входа для приложения.

// #include "stdafx.h" #include "Пример.h" #define MAX_LOADSTRING 100 // определяем константу MAX_LOADSTRING // Глобальные переменные:

HINSTANCE hInst; // текущий экземпляр TCHAR szTitle[MAX_LOADSTRING]; // Текст строки заголовка TCHAR szWindowClass[MAX_LOADSTRING];// имя класса главного окна // Отправить объявления функций, включенных в этот модуль кода:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

//функция _tWinMain - точка входа в приложение int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {//Этот макрос задает значения параметрам, которые не используются UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: разместите код здесь.

MSG msg; // сообщение HACCEL hAccelTable; //таблица акселераторов // Инициализация глобальных строк LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);

// Вызывать функцию для регистрации класса приложения MyRegisterClass(hInstance);

// Выполнить инициализацию приложения:

if (!InitInstance (hInstance, nCmdShow)) { return FALSE;

} // Загрузить ресурс – таблицу акселераторов hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));





// Цикл основного сообщения:

while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg);

DispatchMessage(&msg);

} } return (int) msg.wParam;

} // // ФУНКЦИЯ: MyRegisterClass() // // НАЗНАЧЕНИЕ: регистрирует класс окна.

// // КОММЕНТАРИИ:

// // Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код был совместим с системами Win32, не имеющими функции RegisterClassEx' которая была добавлена в Windows 95. Вызов этой функции важен для того, чтобы приложение получило "качественные" мелкие значки и установило связь с ними.

// ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY));

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName= MAKEINTRESOURCE(IDC_MY);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassEx(&wcex);

} // // ФУНКЦИЯ: InitInstance(HINSTANCE, int) // НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.

// КОММЕНТАРИИ:

// В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также создается и выводится на экран главное окно программы.

// BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd;

hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной // Создать окно:

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

// Если окно не создалось, то завершить работу if (!hWnd) { return FALSE;

} ShowWindow(hWnd, nCmdShow); //отобразить окно UpdateWindow(hWnd); //обновить содержимое окна (сообщение WM_PAINT) return TRUE;

} // // ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM) // НАЗНАЧЕНИЕ: обрабатывает сообщения в главном окне.

// WM_COMMAND - обработка меню приложения // WM_PAINT -Закрасить главное окно // WM_DESTROY - ввести сообщение о выходе и вернуться.

// LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

switch (message) { case WM_COMMAND:

wmId = LOWORD(wParam); // Идентификатор пункта меню или //элемента управления wmEvent = HIWORD(wParam); // Код извещения от органа управления // Разобрать выбор в меню switch (wmId) { case IDM_ABOUT:

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

} break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

// TODO: добавьте любой код отрисовки...

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

} return 0;

} // Обработчик сообщений для окна "О программе".

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam);

switch (message) { case WM_INITDIALOG:

return (INT_PTR)TRUE;

case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam));

return (INT_PTR)TRUE;

} break;

} return (INT_PTR)FALSE;

} 1.3. Программный интерфейс API (application programming interface)– это набор готовых констант, структур и функций, используемых при программировании пользовательских приложений и обеспечивающих правильное взаимодействие между приложением и операционной системой.

Функции и константы Win32 API содержатся в трех основных библиотеках:

1. Kernel32.dll. Эта библиотека предназначена для работы с объектами ядра операционной системы и ее функции позволяют управлять памятью, процессами и другими системными ресурсами.

2. User32.dll. Здесь сосредоточены функции для управления окнами, для обработки сообщений, для работы с меню, таймерами.

3. GDI32.dll. Эта библиотека обеспечивает графический интерфейс операционной системы (Graphics Device Interface). Здесь содержатся функции управления выводом на экран и принтер, функции для работы со шрифтами.

Плюсы использования API 1. Расширение функциональности программ, разработанных в RAD-средах (например, круглые окна, нестандартная реакция на сообщения).

2. Создание кода, оптимизированного для исполнения в среде Windows (аналог – html-файл, созданный средствами Word).

3. Конечно, легче писать программы, используя библиотеки VCL или MFC, но эти продукты надо купить. Используя функции API, можно создавать программы при помощи условно бесплатного компилятора.

2. Типы данных Windows Windows-программах стандартные типы данных из языков С или С++, такие как int или char* применяются не часто. Вместо них используются типы данных, определенные в различных библиотечных файлах. Например, WinDef.h или WinNT.h. Все типы определены при помощи директив #define или оператора typedef. Такая замена позволяет отделить программный интерфейс Windows от самой операционной системы Windows, и от конкретных реализаций компиляторов языка Си.

Pages:     || 2 | 3 | 4 | 5 |   ...   | 6 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.