Программный интерфейс приложения в 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