Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Создание проектов в Visual Studio. Изменение настройки параметров проекта. Текст программы, формируемый AppWizard.

Читайте также:
  1. A) изменение среднего диаметра эритроцитов
  2. II. Создание и назидание церквей
  3. Lt;guestion> Укажите, к какому стилю речи относится данный текст: Наречие - неизменяемая часть речи, которая обозначает признаки действия, предмета или другого признака.
  4. Lt;question> Дословная выдержка из какого-либо текста, сочинения или дословно приводимые чьи-либо слова.
  5. Lt;question>Какой жанр учебно-научного подстиля отвечает на вопрос «О чем говорится в первичном тексте?»?
  6. Visual arts
  7. Адвокатська таємниця в контексті судово-правової реформи в Україні.

Технология создания файла-проекта применяется на классическом примере “Hello, world!”. Функция окна будет иметь вид:

LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

PAINTSTRUCT ps;

HDChdc;

TCHAR greeting [] = _T(“Hello, world!”);

 

switch(message)

{

case WM_PAINT:

hdc=BeginPaint(hWnd&ps);

Text Out(hdc, 55, greeting, _tcslen (greeting));

 

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PastQuitMessage(0);

break;

default:

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

break;

}

return 0;

}

 

В данном пошаговом руководстве демонстрируется создание базового приложения на базе Win32, отображающего в окне надпись "Hello, World!". Можно воспользоваться кодом, созданным в этом пошаговом руководстве, в качестве шаблона для создания других приложений на базе Win32.

API-интерфейс Win32 (также известный как Windows API) — это платформа на основе C для создания приложений Windows. Дополнительные сведения об API-интерфейсе Win32 см. в разделе Windows API.

Создание проекта на базе Win32

  1. В меню Файл последовательно выберите пункты Создать и Проект.
  2. В левой области диалогового окна Новый проект щелкните Установленные шаблоны, выберите Visual C++ и щелкните Win32. В средней области выберите Проект Win32.

В поле Имя введите имя проекта, например win32app. Нажмите кнопку ОК.

  1. На начальной странице Мастер приложений Win32 нажмите кнопку Далее.
  2. На странице "Параметры приложения" в разделе Тип приложения выберите Приложение Windows. В поле Дополнительные параметры выберите Пустой проект. Чтобы создать проект, нажмите кнопку Готово.
  3. В окне Обозреватель решений щелкните правой кнопкой мыши проект Win32app, выберите команду Добавить и щелкните Новый элемент. В диалоговом окне Добавление нового элемента выберите Файл C++ (.cpp). В поле Имя введите имя файла, например GT_HelloWorldWin32.cpp. Нажмите кнопку Добавить.

Запуск приложения на базе Win32

  1. Точно так же как каждое приложение C и C++ должно иметь в качестве начальной точки функцию main, каждое приложение на базе Win32 должно иметь функцию WinMain. WinMain имеет следующий синтаксис.

int WINAPI WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow);

2. Поскольку в коде приложения должны использоваться существующие определения, следует добавить в файл операторы включения.

 

#include <windows.h>

#include <stdlib.h>

#include <string.h>

#include <tchar.h>

3. Наряду с функцией WinMain в каждом приложении на базе Win32 также должна быть определена функция оконной процедуры. Обычно эта функция имеет имя WndProc. WndProc имеет следующий синтаксис.

 

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

 

4. Эта функция обрабатывает многочисленные сообщения, которые приложение получает от операционной системы. Например, в приложении с диалоговым окном, в котором расположена кнопка ОК, при нажатии этой кнопки пользователем операционная система отправляет в приложение сообщение о том, что эта кнопка была нажата. Функция WndProc отвечает за реагирование на это событие. В этом примере соответствующей реакцией на это событие может быть закрытие диалогового окна.

Добавление функциональных возможностей в функцию WinMain.

1. В функции WinMain создайте структуру класса окна типа WNDCLASSEX. Эта структура содержит информацию об окне, такую как используемые в приложении значки, цвет фона окна, отображаемое в заголовке окна название, имя функции процедуры окна и т. д. В следующем примере показана типичная структура WNDCLASSEX.

 

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_APPLICATION));

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

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

wcex.lpszMenuName = NULL;

wcex.lpszClassName = szWindowClass;

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

 

Обозначение кода:

cbSize

Тип: UINT

Размер в байтах в структуре. Этот член устанавливается как SizeOf (WNDCLASSEX). Его устанавливают перед вызовом функции

GetClassInfoEx.Тип: UINT

Стиль класса. Этим элементом может быть любая комбинация стилей класса.

lpfnWndProc

Тип: WNDPROC

Указатель на оконную процедуру. Использование функции CallWindowProc помогает вызывать оконную процедуру.

cbClsExtra

Тип: INT

Выделяется дополнительное количество байтов для структуры окна класса. Система сводит байты к нулю.

cbWndExtra

Тип: INT

Выделяется дополнительное количество байтов для экземпляра окна. Система сводит байты к нулю. Если приложение использует WNDCLASSEX, тем самым регистрируя диалоговое окно, созданный с помощью директивы CLASS в файле ресурсов, то такая директива должна установить член DLGWINDOWEXTRA.

HINSTANCE

Тип: HINSTANCE

Ручка к экземпляру, который содержит оконную процедуру для класса.

Hicon

Тип: HICON

Ручка со значком класса. Этот элемент должен быть ручкой с иконкой ресурса. Если этот элемент является NULL, система обеспечивает значок по умолчанию.

HCURSOR

Тип: HCURSOR

Ручка с курсором класса. Этот элемент должен быть дескриптором ресурса курсора. Если этот элемент является NULL, приложение должно явно установить форму курсора, когда мышь движется в окне приложения.

hbrBackground

Тип: HBRUSH

Ручка класса кисти фона. Этот элемент может быть дескриптором кисти, который может использоваться для закрашивания фона, или он может быть значением цвета. Значение цвета должно быть одним из следующих стандартных цветов системы (значение 1 должно быть добавлено к выбранным цветом). Если значение цвета задано, его необходимо преобразовать в один из следующих типов HBRUSH:

COLOR_ACTIVEBORDER

COLOR_ACTIVECAPTION

COLOR_APPWORKSPACE

COLOR_BACKGROUND

COLOR_BTNFACE

COLOR_BTNSHADOW

COLOR_BTNTEXT

COLOR_CAPTIONTEXT

COLOR_GRAYTEXT

COLOR_HIGHLIGHT

COLOR_HIGHLIGHTTEXT

COLOR_INACTIVEBORDER

COLOR_INACTIVECAPTION

COLOR_MENU

COLOR_MENUTEXT

COLOR_SCROLLBAR

COLOR_WINDOW

COLOR_WINDOWFRAME

COLOR_WINDOWTEXT

Система автоматически удаляет класс фоновые щетки, когда класс не зарегистрирован с помощью UnregisterClass. Приложение не должно удалять эти кисти.

Если это поле NULL, приложение должно рисовать свою предысторию, когда требуется нарисовать в своей клиентской области. Чтобы определить, должен ли быть окрашен фон, приложение может либо обработать сообщение WM_ERASEBKGND, либо проверить член fErase структуры PAINTSTRUCT заполненной функции BeginPaint.

lpszMenuName

Тип: LPCTSTR

Указатель на строку с завершающими строку символами, которые определяют имя ресурса меню класса, когда имя появляется в файле ресурсов. Если используеся число для идентификации меню, то при помощи макроса MAKEINTRESOURCE. Если этот член равен значению NULL,то окна, принадлежащие к этому классу, не имеют меню по умолчанию.

lpszClassName

Тип: LPCTSTR

Указатель на строку с нулевым символом. Если этот параметр с нулевым символом, он должен быть нулевым символом класса, созданного предыдущим вызовом функции RegisterClass или RegisterClassEx. Нулевой символ должен быть в младшей функции lpszClassName; старшая функция должна быть нулевой.

Если функция lpszClassName является строкой, то она определяет имя класса окна. Имя класса может быть любым именем, зарегистрированным как RegisterClass или RegisterClassEx. Максимальный размер lpszClassName равен 256 байтам. Если lpszClassName будет больше максимального размера, то функция RegisterClassEx не выполнится.

hIconSm

Тип: HICON

Дескриптор маленького значка, который связан с классом окна. Если этот элемент равен значению NULL, то система ищет иконку ресурсу, указанному членом Hicon для значка соответствующего размера, чтобы использовать в качестве маленькой иконки.

2.После того как класс окна будет создан, необходимо зарегистрировать его. Воспользуйтесь функцией RegisterClassEx и передайте структуру класса окна в качестве аргумента.

 

if (!RegisterClassEx(&wcex))

{

MessageBox(NULL,

_T("Call to RegisterClassEx failed!"),

_T("Win32 Guided Tour"),

NULL);

 

return 1;

}

 

3.Теперь можно создать окно. Воспользуйтесь функцией CreateWindow.

 

static TCHAR szWindowClass[] = _T("win32app");

static TCHAR szTitle[] = _T("Win32 Guided Tour Application");

 

// The parameters to CreateWindow explained:

// szWindowClass: the name of the application

// szTitle: the text that appears in the title bar

// WS_OVERLAPPEDWINDOW: the type of window to create

// CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y)

// 500, 100: initial size (width, length)

// NULL: the parent of this window

// NULL: this application does not have a menu bar

// hInstance: the first parameter from WinMain

// NULL: not used in this application

HWND hWnd = CreateWindow(

szWindowClass,

szTitle,

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

500, 100,

NULL,

NULL,

hInstance,

NULL

);

if (!hWnd)

{

MessageBox(NULL,

_T("Call to CreateWindow failed!"),

_T("Win32 Guided Tour"),

NULL);

 

return 1;

}

 

Эта функция возвращает объект HWND, являющийся дескриптором окна

 

4.Теперь воспользуйтесь следующим кодом, чтобы отобразить окно.

// The parameters to ShowWindow explained:

// hWnd: the value returned from CreateWindow

// nCmdShow: the fourth parameter from WinMain

ShowWindow(hWnd,

nCmdShow);

UpdateWindow(hWnd);

 

На этом этапе в окне не будет отображаться большое количество содержимого, поскольку функция WndProc еще не реализована.

5. Теперь добавьте цикл обработки сообщений для прослушивания отправляемых ОС сообщений. Когда приложение получает сообщение, этот цикл пересылает его функции WndProc для обработки.Цикл обработки сообщений напоминает следующий код.

 

MSG msg;

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

 

return (int) msg.wParam;

На данном этапе функция WinMain должна напоминать следующий код.

 

int WINAPI WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

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_APPLICATION));

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

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

wcex.lpszMenuName = NULL;

wcex.lpszClassName = szWindowClass;

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

 

if (!RegisterClassEx(&wcex))

{

MessageBox(NULL,

_T("Call to RegisterClassEx failed!"),

_T("Win32 Guided Tour"),

NULL);

 

return 1;

}

 

hInst = hInstance; // Store instance handle in our global variable

 

// The parameters to CreateWindow explained:

// szWindowClass: the name of the application

// szTitle: the text that appears in the title bar

// WS_OVERLAPPEDWINDOW: the type of window to create

// CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y)

// 500, 100: initial size (width, length)

// NULL: the parent of this window

// NULL: this application dows not have a menu bar

// hInstance: the first parameter from WinMain

// NULL: not used in this application

HWND hWnd = CreateWindow(

szWindowClass,

szTitle,

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

500, 100,

NULL,

NULL,

hInstance,

NULL

);

 

if (!hWnd)

{

MessageBox(NULL,

_T("Call to CreateWindow failed!"),

_T("Win32 Guided Tour"),

NULL);

 

return 1;

}

 

// The parameters to ShowWindow explained:

// hWnd: the value returned from CreateWindow

// nCmdShow: the fourth parameter from WinMain

ShowWindow(hWnd,

nCmdShow);

UpdateWindow(hWnd);

 

// Main message loop:

MSG msg;

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

 

return (int) msg.wParam;

}

 


Дата добавления: 2015-09-03; просмотров: 74 | Нарушение авторских прав


Читайте в этой же книге: ДИАЛОГОВОЕ ОКНО ШРИФТЫ (FONTS) | Средства и методы GDI. Перья. Кисти. Изменение цветов фона. Изменение цветов текста. | Работа с битовыми образами. Функции BitBlt() и PlgBlt(). Загрузка и вывод на экран битовых образов. Обработка битовых образов при помощи функции Windows NT MaskBlt(). | Вращение графического образа | Изменение цвета фона. Особенности поддержки Win32 в WIN32SWP.C. Функция WinMain(). | Изменение цвета фона. Функция окна. Обработка сообщений WM_PAINT. Обработка сообщения WM_DESTROY. Функция DefWIndowProc(). | Круговые диаграммы Windows NT. Столбиковая диаграмма. Приложение BAR.CPP. | Имена файлов и классов. Создание приложения. Создание простого диалогового приложения MFC. | Базы данных. Поддержка составных документов. Внешний вид приложения и другие опции. Другие опции. | Все начинается с CObject. Важнейшие классы библиотеки. Создание приложения MFC Windows. Выбор количества окон, которые будут поддерживаться приложением. |
<== предыдущая страница | следующая страница ==>
Енохианских посланий.| Библиотека MFC

mybiblioteka.su - 2015-2024 год. (0.029 сек.)