Программный интерфейс приложения в Windows 7. Новые функции Win64 API

Изучение основ и других аспектов программирования с использованием Win 32/64 API. Интерфейс программирования приложений Win32. Направления расширения функциональности WinMain и WndProc. Разработка для x64 с помощью языка программирования Visual C++.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 17.10.2017
Размер файла 283,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

UpdateWindow(hWnd);

DispalyList ();

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

display (hWnd);

}

return msg.wParam;

}

BOOL SetWindowPixelFormat(HWND hWnd)

{

int m_GLPixelIndex;

PIXELFORMATDESCRIPTOR pfd;

pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);

pfd.nVersion = 1;

pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;

pfd.iPixelType = PFD_TYPE_RGBA;

pfd.cColorBits = 32;

pfd.cRedBits = 8;

pfd.cRedShift = 16;

pfd.cGreenBits = 8;

pfd.cGreenShift = 8;

pfd.cBlueBits = 8;

pfd.cBlueShift = 0;

pfd.cAlphaBits = 0;

pfd.cAlphaShift = 0;

pfd.cAccumBits = 64;

pfd.cAccumRedBits = 16;

pfd.cAccumGreenBits = 16;

pfd.cAccumBlueBits = 16;

pfd.cAccumAlphaBits = 0;

pfd.cDepthBits = 32;

pfd.cStencilBits = 8;

pfd.cAuxBuffers = 0;

pfd.iLayerType = PFD_MAIN_PLANE;

pfd.bReserved = 0;

pfd.dwLayerMask = 0;

pfd.dwVisibleMask = 0;

pfd.dwDamageMask = 0;

m_GLPixelIndex = ChoosePixelFormat( hDC, &pfd);

if(m_GLPixelIndex==0) // Let's choose a default index.

{

m_GLPixelIndex = TRUE;

if(DescribePixelFormat(hDC,m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR),&pfd)==0)

return FALSE;

}

if (SetPixelFormat( hDC, m_GLPixelIndex, &pfd)==FALSE)

return FALSE;

return TRUE;

}

BOOL resize(int width,int height)

{

glViewport(0,0,width,height);//выбор порта

glMatrixMode( GL_PROJECTION );

glLoadIdentity(); ////???

//glOrtho(-5,5, -5,5, 2,12);//отртографическая(параллельная проекция)

gluPerspective(90.0, width/height, 0.2, 100.0);

glMatrixMode( GL_MODELVIEW );

return TRUE;

}

BOOL display(HWND hWnd)

{

int rot=0;

glClearColor(0.5f,0.5f,0.5f,1.0f); // Будем очищать экран, заполняя его цветом тумана

glEnable(GL_FOG); // Включаем туман (GL_FOG)

glFogi(GL_FOG_MODE, fogMode[fogfilter]);// Выбираем тип тумана

glFogfv(GL_FOG_COLOR, fogColor); // Устанавливаем цвет тумана

glFogf(GL_FOG_DENSITY, fogDensity); // Определяем, на сколько густым будет туман (fogDensity)

glHint(GL_FOG_HINT, fogHint[foghint]); // Вспомогательная установка тумана

glFogf(GL_FOG_START, 1.0f); // Глубина, с которой начинается туман

glFogf(GL_FOG_END, 5.0f); // Глубина, где туман заканчивается.

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glCallList(1);

glPushMatrix();

glTranslated (0.0f+xSide,0.0f+ySide,0.0f+zSide);

glScaled (0.0f+Scale,0.0f+Scale,0.0f+Scale);

glRotated (TurnX, 1, 0, 0);

glRotated (TurnY, 0, 1, 0);

glRotated (TurnZ, 0, 0, 1);

glCallList(2);

glPushMatrix();

glTranslated (0.0f+xSideO,0.0f+ySideO,0.0f+zSideO);

glScaled (0.0f+ScaleO,0.0f+ScaleO,0.0f+ScaleO);

glRotated (TurnXO, 1, 0, 0);

glRotated (TurnYO, 0, 1, 0);

glRotated (TurnZO, 0, 0, 1);

for (int i = 1; i <= objCount; i++){

rot = 360/objCount;

if (i<5) {

glRotated(rot*i, 1, 0, 0);

glRotated(rot*(i-1), 0, 1, 0);

glRotated(rot*(i-2), 0, 0, 1);

glCallList(3);

}

if (i>=5) {

glRotated(rot*i, 1, 0, 0);

glRotated(rot*(i-1), 0, 1, 0);

glRotated(rot*(i-2), 0, 0, 1);

glCallList(4);

glRotated(rot*i, 1, 0, 0);

glRotated(rot*(i-1), 0, 1, 0);

glRotated(rot*(i-2), 0, 0, 1);

glCallList(5);

}

}

glPopMatrix();

glPopMatrix();

glEnd();

SwapBuffers(wglGetCurrentDC());

return TRUE;

}

LRESULT CALLBACK WindowFunc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){

float pos[4] = {3,3,3,1};

float dir[3] = {-1,-1,-1};

switch(msg){

case WM_CREATE:

hDC = GetDC(hWnd); // получаем контекст устройства нашего окна

SetWindowPixelFormat(hWnd); // устанавливаем параметры контекста воспроизведения OpenGL

hGLRC = wglCreateContext(hDC); // создаем контекст воспроизведения OpenGL

wglMakeCurrent(hDC, hGLRC); // делаем его текущим

glEnable(GL_ALPHA_TEST); // тест прозрачности, т.е. будет учитываться четвертый параметр в glColor

glEnable(GL_DEPTH_TEST); // тест глубины

glEnable(GL_COLOR_MATERIAL); // glColor будет устанавливать свойства материала

glEnable(GL_LIGHTING); // разрешаем освещение

glEnable(GL_LIGHT0); // включаем нулевую лампу

glEnable(GL_BLEND); // разрешаем смешение цветов

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// устанавливаем положение нулевой лампы

glLightfv(GL_LIGHT0, GL_POSITION, pos);

glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);

return 0;

case WM_DESTROY:

if (hGLRC) {

wglMakeCurrent(NULL, NULL);

wglDeleteContext(hGLRC); // удаляем созданный выше контекст воспроизведения OpenGL

}

ReleaseDC(hWnd, hDC); // освобождаем контекст устройства нашего окна

PostQuitMessage(0);

return 0;

case WM_SIZE:

resize(LOWORD(lParam), HIWORD(lParam));

return 0;

case WM_KEYDOWN: // Была ли нажата кнопка?

switch (wParam)

{

case VK_DECIMAL: // NUM.

foghint+=1;

if(foghint>2) foghint=0;

break;

case VK_NUMPAD0: // NUM 0

fogfilter+=1;

if(fogfilter>2) fogfilter=0;

break;

case VK_MULTIPLY: // NUM *

fogDensity+=0.025;

if(fogDensity>=0.5)

fogDensity=0.5;

break;

case VK_DIVIDE: // NUM /

fogDensity-=0.025;

if(fogDensity<=0.05)

fogDensity=0.05;

break;

case VK_ADD: // NUM +

objCount+=1;

if(objCount>=10)

objCount=10;

break;

case VK_SUBTRACT: // NUM -

objCount-=1;

if(objCount<=1)

objCount=1;

break;

case 0x57: //W

newTranslate(0,0,1);

//xSideObj+=1.5f;

break;

case 0x53: //S

newTranslate(0,0,-1);

//xSideObj-=1.5f;

break;

case 0x41: //A

newTranslate(1,0,0);

//ySideObj+=1.5f;

break;

case 0x44: //D

newTranslate(-1,0,0);

//ySideObj-=1.5f;

break;

case 0x20:// space

newTranslate(0,-1,0);

//zSideObj+=1.5f;

break;

case 0x11:// ctrl

newTranslate(0,1,0);

//zSideObj-=1.5f;

break;

case VK_UP:

newRotate(5,1,0,0);

/*ySide=1.5f;*/

break;

case VK_DOWN:

newRotate(-5,1,0,0);

/*ySide=-1.5f;*/

break;

case VK_LEFT:

newRotate(-5,0,1,0);

/*xSide=-1.5f;*/

break;

case VK_RIGHT:

newRotate(5,0,1,0);

/*xSide=1.5f;*/

break;

case 0x45://E

newRotate(-5,0,0,1);

/*zSide=-1.5f;*/

break;

case 0x51://Q

newRotate(5,0,0,1);

/*zSide=1.5f;*/

break;

case VK_OEM_PLUS:

Scale+=0.01;

break;

case VK_OEM_MINUS:

Scale-=0.01;

break;

//case 0x50: //P

// glLoadIdentity();

// Scale=0.8;

// break;

case 0x54: //T

xSide+=1;

break;

case 0x47: //G

xSide-=1;

break;

case 0x48: //H

ySide+=1;

break;

case 0x46: //F

ySide-=1;

break;

case 0x59: //Y

zSide+=1;

break;

case 0x52: //R

zSide-=1;

break;

case VK_NUMPAD6:

TurnY+=5;

break;

case VK_NUMPAD4:

TurnY-=5;

break;

case VK_NUMPAD8:

TurnX+=5;

break;

case VK_NUMPAD2:

TurnX-=5;

break;

case VK_NUMPAD9:

TurnZ+=5;

break;

case VK_NUMPAD7:

TurnZ-=5;

break;

case 0x49:

TurnYO+=5;

break;

case 0x4B:

TurnYO-=5;

break;

case 0x4C:

TurnXO+=5;

break;

case 0x4A:

TurnXO-=5;

break;

case 0x55:

TurnZO+=5;

break;

case 0x4F:

TurnZO-=5;

break;

case 0x4E:

ScaleO+=0.01;

break;

case 0x4D:

ScaleO-=0.01;

break;

}

return 0;

default:

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

}

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

}

Руководство пользователя.

Данное приложение является полностью графическим приложением, разработанное на базе Win32 API с помощью библиотек OPENGL. В приложении представлена модель абстрактного вещества. Есть возможность свободного полета "камеры" - точки обзора наблюдателя, движение атома по всем 3-м осям (х, y, z) и управление параметрами тумана: изменение формул прорисовки тумана и густоты тумана. Управление камерой происходит с помощью кнопок:

W/S - движение камеры вперед и назад.

A/D - движение камеры влево и вправо (straif).

CTRL/SPACE - движение камеры вверх и вниз.

UP/DOWN - поднятие и опускание камеры.

LEFT/RIGHT - повороты камеры влево и вправо.

Q/R - поворот камеры относительно оси, перпендикулярной экрана.

+/- на боковой цифровой клавиатуре увеличивает число атомов, находящихся вокруг ядра.

*и / - увеличивают или уменьшают густоту тумана.

NUMPAD0 - меняет качество прорисовки.

Литература

1. Знакомство с Win32 и Win64: http://www.williamspublishing.com/PDF/5-8459-0879-5/part1.pdf.

2. Джонсон М. Харт "Системное программирование в среде Windows". Третье издание.

3. Кибер форум программистов: http://www.cyberforum.ru/win-api/thread947523.html.

4. Библиотека MSDN: http://msdn.microsoft.com/ru-ru/library/bb384843%28v=vs.90%29.aspx.

5. Журнал RSDN Magazine #4-2005 (информация о журнале http://www.rsdn.ru/mag/main.htm).

6. Обучающее видео по созданию оконных приложений с использованием Win32 API: http://rutube.ru/video/3152ae06f75044f4331a29a4aa5cbf0d/.

7. Н.А. Литвиненко "Теория программирования на языке С++. WIN API.

Размещено на Allbest.ru


Подобные документы

  • Исследование теоретических аспектов разработки программы посредством использования Visual Basic. Анализ достоинств и недостатков данного языка программирования. Изучение особенностей создания интерфейса приложения. Основные этапы реализации программы.

    практическая работа [460,6 K], добавлен 22.01.2013

  • Интерфейс API, реализация функций API на уровне ОС, системы программирования и с помощью внешних библиотек. Характеристики сетевого интерфейса прикладного программирования Winsock, особенности его применения в операционных системах UNIX и Windows.

    контрольная работа [74,2 K], добавлен 04.06.2015

  • Исследование базовых концепций программирования приложений под операционную систему Windows. Изучение истории создания универсального языка программирования Си. Разработка графического пользовательского интерфейса. Обзор правил игры и алгоритма работы.

    курсовая работа [58,2 K], добавлен 09.11.2012

  • Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.

    курсовая работа [2,8 M], добавлен 27.01.2010

  • Теоретические основы написания Windows-приложений с использованием библиотеки MFC. Основы программирования под Windows. Проектирование приложений в среде Microsoft Visual C++. Описание логической структуры приложения, его функциональное назначение.

    курсовая работа [1,3 M], добавлен 12.12.2011

  • Разработка Windows-приложений с использованием библиотеки MFC. Базовый набор классов, написанных на языке С++ и предназначенных для упрощения процесса программирования под Windows. Фундаментальные идеи объектно-ориентированного программирования.

    курсовая работа [348,1 K], добавлен 02.07.2011

  • Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.

    контрольная работа [25,1 K], добавлен 14.03.2015

  • Разработка программного продукта с помощью языка программирования Visual Basic. Описание интерфейса пользователя и возможностей программы. Исходный код основных модулей. Программа, демонстрирующая основные возможности диаграмм и среды Visual Basic.

    контрольная работа [989,9 K], добавлен 29.03.2011

  • Исследование возможностей и областей использования языка программирования JavaScript. Сравнительный анализ языков программирования JavaScript и PHP. Разработка интерактивного Web-приложения на примере теста по теме "Программирование на языке Delphi".

    практическая работа [26,0 K], добавлен 04.02.2015

  • Программная реализация настольного приложения с использованием языка программирования C#. Проектирование и структура пользовательского интерфейса, требования к нему и оценка функциональности. Разработка руководства пользователя и его использование.

    курсовая работа [297,6 K], добавлен 10.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.