Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Встановлення програми та необхідні файли/каталоги

Поиск

Скопіювати в цільовий каталог файли: «LAB1.exe», «water.bmp», «Microb GRADE1 RUN.bmp», «Microb GRADE1.bmp», «Microb GRADE2 RUN.bmp», «Microb GRADE2.bmp», «Microb GRADE3 RUN.bmp», «Microb GRADE3.bmp».

Запуск програми

Для коректної роботи программи необхідно зберігати у одному каталозі із *.exe файлом наступні файли:

1. «Water.bmp»

2. «Microb GRADE1 RUN.bmp»

3. «Microb GRADE1.bmp»

4. «Microb GRADE2 RUN.bmp»

5. «Microb GRADE2.bmp»

6. «Microb GRADE3 RUN.bmp»

7. «Microb GRADE3.bmp»

У випадку переміщення цих файлів або зміни їхньго імені правильна робота програми не гарантуєтся. Не рекомендуєтся вносити зміни у зміст файлів, правильна робота програми не гарантуєтся.

Щоб запустити программу виконайте *.exeфайл.

Користувацький інтерфейс

Робота із програмою починаєтся із стандартними налаштуваннями, які включають в себе аудиторію, студентів та деканат(рис. 7.1).

Рисунок 7.1 – Початок роботи програми

Для того, щоб змусити студентів рухатись, їх необхідно виділити. Для виділення студента кликніть по ньому лівою кнопкою миші. Виділені студенти обведені рамкою (рис. 7.2). Є можливість виділення декількох студентів.

Рисунок 7.2 – Виділення студентів

Після виділення, студентом можна рухати: студента в аудиторії можна рухати стрілочками, у воді клавішами w/s.

Студенти, що містяться у деканаті будуть автоматично рухатись вправо по треку відповідно до своїх можливостей.

Для видалення студента, виділіть його і натисніть клавішу delete. Будьте уважні, ця команда видаляє усі виділені об’єкти.

Щоб додати нового студента, натисніть клавішу Insert заповніть поля «Ім’я» та «Швидкість», оберіть тип студента і натисніть «Ок» (рис. 7.3). Новий студент з’явится у випадковому місці на робочій поверхні. Для швидкого створення студентів використовуйте клавіші 1/2/3.

Рисунок 7.3 – Діалогове вікно створення нового студента


 

ВИСНОВКИ

 

У ході розробки курсової роботи було визначено основні проблеми які стосуються обраної теми, розглянуто основні питання пов’язані з нею проаналізовано життя, та навчання студентів. Було досліджено різницю між мовами програмування С++, С# та Java і обрано С++, як мову, яка найкраще підходить для реалізації програми. Обрано WinAPI, як найбільш актуальну та вдалу форму розробки програми. Було вивчено базові принципи об’єктно-орієнтованого програмування, ієрархію класів, принципи поліморфізму, інкапсуляції, наслідування. Отримано основні навички та знання необхідні при роботі у WinAPI.


 

ПЕРЕЛІК ПОСИЛАНЬ

 

1. С.Прата. Язык программироваия С++. Лекции и упражнения, 6-е изд.:Пер. С англ.. – М.:ООО «И.Д.Вильямс», 2012. – 1248 с.

2. Isaac Azimov. I, Robot - NY.:Spectra, 1991. – 304 c.

3. Ч. Петзолд. Программирование для Windows 95. Том I. - Санкт – Петербург: BHV, 1997.- 495 c.

4. Шеховцов В. А. Операційні системи. – К.:Видавнича група BHV, 2005. – 576 c.

5. Страуструп, Бьярне. Макросы // Программирование: Принципы и практика использования C++ = Programming: Principles and Practice Using C++. — М.: ООО «И.Д. Вильямс», 2001. — С. 1065, 1066, 1133. — 1248 с.

 


 

ДОДАТКИ


 

Додаток А

Лістинг модуля student.cpp

#include "stdafx.h"

#include "student.h"

#include "class.h"

 

#define MAX_LOADSTRING 100

 

// Global Variables:

HINSTANCE hInst; // current instance

TCHAR szTitle[MAX_LOADSTRING]; // The title bar text

TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name

 

// Forward declarations of functions included in this code module:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

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

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

 

int APIENTRY _tWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

 

// TODO: Place code here.

MSG msg;

HACCEL hAccelTable;

 

// Initialize global strings

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_STUDENT, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

 

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

 

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_STUDENT));

 

// Main message loop:

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

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

 

return (int) msg.wParam;

}

 

//

// FUNCTION: MyRegisterClass()

//

// PURPOSE: Registers the window class.

//

// COMMENTS:

//

// This function and its usage are only necessary if you want this code

// to be compatible with Win32 systems prior to the 'RegisterClassEx'

// function that was added to Windows 95. It is important to call this function

// so that the application will get 'well formed' small icons associated

// with it.

//

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

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

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

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_STUDENT);

wcex.lpszClassName = szWindowClass;

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

 

return RegisterClassEx(&wcex);

}

 

//

// FUNCTION: InitInstance(HINSTANCE, int)

//

// PURPOSE: Saves instance handle and creates main window

//

// COMMENTS:

//

// In this function, we save the instance handle in a global variable and

// create and display the main program window.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

 

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

 

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

 

return TRUE;

}

 

//

// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)

//

// PURPOSE: Processes messages for the main window.

//

// WM_COMMAND - process the application menu

// WM_PAINT - Paint the main window

// WM_DESTROY - post a quit message and return

//

int n=10;

int j=-1;

//

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

{

 

static bool first = true;

int i0,x=0,y=0;

if(first){

first=false;

 

arr = new student *[n];

for(int i=0;i<n;i++)

arr[i]= new student();

}

 

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

 

switch (message)

{

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// Parse the menu selections:

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_LBUTTONDOWN:{

 

 

int mx=LOWORD(lParam);

int my=HIWORD(lParam);

 

for(int i=0;i<n;i++)

arr[i]->activ(mx,my);

 

::InvalidateRect(hWnd, NULL, true);

}break;

case WM_KEYDOWN:{

switch(wParam)

{

 

case VK_ESCAPE:

for(int j=0;j<n;++j)

arr[j]->esc();break;

 

case VK_UP:

for(int i=0;i<n;++i)

arr[i]->ruh("y",-5);

break;

 

case VK_DOWN:

for(int i=0;i<n;++i)

arr[i]->ruh("y",5);;

break;

 

case VK_LEFT:

for(int i=0;i<n;++i)

arr[i]->ruh("x",-5);;

break;

 

case VK_RIGHT:

for(int i=0;i<n;i++)

arr[i]->ruh("x",5);;

break;

 

case VK_DELETE:{

 

for(int i=0;i<n;i++)

if(arr[i]->ret()==true)j=i;

 

if(j!=-1){

for(int i=j;i<n-1;++i)arr[i]=arr[i+1];

n--;j=-1;}

}

break;

 

}

 

::InvalidateRect(hWnd,NULL,true);

}break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

 

for(int i=0;i<n;i++)

arr[i]->DRAW(hdc);

// TODO: Add any drawing code here...

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

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

}

return 0;

}

 

// Message handler for about box.

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;

}


 

Додаток Б

Лістинг модуля student2.cpp

#include "stdafx.h"

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

using namespace System;

 

 

class Student

{

public:

int serBal, rik_naroj;

float znannia_mov, weight;

char Name[50];

int *referen;

 

void Zdawses();

 

Student operator-- ()

{

rik_naroj--;

return (*this);

}

 

Student(int riknar, int serbal, float znmov)

{

referen = new int[2];

referen[1]=4+serbal;

referen[0]=riknar * 5;

printf ("\nKonstruktor vuklukano:\nVvedit' imya studenta z poperednimu parametramu:\n");

rik_naroj=riknar;

znannia_mov=znmov;

serBal=serbal;

gets(Name);

weight=0.4F;

}

 

Student & operator= (Student &arg)

{

if(this == &arg) return (*this);

delete []referen;

referen = new int[2];

referen[0] = arg.referen[0];

referen[1] = arg.referen[1];

int le=strlen(Name),

len2=strlen(arg.Name),

kc=(le>len2)?le:len2;

for(int i=0; i<kc; i++)

{

if(i<le)

Name[i]=arg.Name[i];

else

Name[i]='\0';

}

return (*this);

}

 

Student()

{

}

 

Student(const Student & arg)

{

serBal=arg.serBal;

rik_naroj=arg.rik_naroj;

znannia_mov=arg.znannia_mov;

int le=strlen(Name),

len2=strlen(arg.Name),

kc=(le>len2)?le:len2;

for(int i=0; i<kc; i++)

{

if(i<le)

Name[i]=arg.Name[i];

else

Name[i]='\0';

}

referen = new int[2];

referen[0] = arg.referen[0];

referen[1] = arg.referen[1];

}

 

void about()

{

printf("student %s %i %.1f %i ",this->Name,rik_naroj,znannia_mov,serBal);

}

void about(short ll)

{

printf("student %s %i %.1f %i ((%i %i)\n",this->Name,rik_naroj+100,znannia_mov,serBal,ll<<3,!ll);

}

 

friend Student operator*(Student &o1, Student &o2);

 

};

 

void Student::Zdawses()

{

}

Student operator*(Student &o1, Student &o2)

{

Student tmp(o1.rik_naroj*o2.rik_naroj, o1.znannia_mov*o2.znannia_mov, o1.serBal+o2.serBal);

return tmp;

}

 

int main(array<System::String ^> ^args)

{

char vybMas='1', juven;

int kolic1=0, kolic2=0, kilk, indeks, i;

printf("Vvedy kilkist obyektiv:>");

kilk = Convert::ToInt32(Console::ReadLine());

int jj=9;

Student *typ1 = new Student[kilk], **typ2 = new Student*[kilk];

bak:

switch(getch())

{

case 'l':

printf("Masyv obyektiv\n");

if(vybMas=='1')

{

for(i=0;i<kolic1;i++)

{

typ1[i].about();

typ1[i].Zdawses();

puts("");

}

}

else

{

for(i=0;i<kolic2;i++)

{

typ2[i]->about();

typ2[i]--;

puts("");

}

}

break;

case 'x':

goto end_g;

case 's'://сортувати

printf("Vvedy '1' dlia sort. po movah '3' dlia sortuvannia poci narojen\n");

bk: juven=getch();

if(juven!='1' && juven!='3')

goto bk;

int j;

if(vybMas=='1')

{

for(i=0;i<kolic1;i++)

for(j=1;j<kolic1;j++)

if(juven=='1' && typ1[j].znannia_mov<typ1[j-1].znannia_mov || juven=='3' && typ1[j].rik_naroj<typ1[j-1].rik_naroj)

{

Student YYy = typ1[j];

typ1[j] = typ1[j-1];

typ1[j-1]=YYy;

}

}

else

{

for(i=0;i<kolic2;i++)

for(j=1;j<kolic2;j++)

if(juven=='1' && typ2[j]->znannia_mov<typ2[j-1]->znannia_mov || juven=='3' && typ2[j]->rik_naroj<typ2[j-1]->rik_naroj)

{

Student *YYy = typ2[j];

typ2[j] = typ2[j-1];

typ2[j-1] = YYy;

}

}

break;

case 'i':

if(kilk>0)

{

Student kkk (typ1[kilk-1]);

jj=kkk.rik_naroj*3;

}

printf("Vvedy pozyciyu elementu i vin vyvedeccia %i\n",jj);

indeks = Convert::ToInt32(Console::ReadLine());

if(vybMas=='1')

{

if(indeks>=kolic1) break;

typ1[indeks].about();

Student k (typ1[indeks]);

}

else

{

if(indeks>=kolic2) break;

typ2[indeks]->about(28);

}

puts("");

break;

case 'd':

printf("\nVvedy pozyciyu elementa yaky hoch vydalyty\n");

indeks = Convert::ToInt32(Console::ReadLine());

if(vybMas=='1')

{

for(i=indeks;i<kolic1;i++)

typ1[i] = typ1[i+1];

kolic1--;

}

else

{

for(i=indeks;i<kolic2;i++)

typ2[i] = typ2[i+1];

kolic2--;

}

break;

case 'a':

int a1,a2; float a3;

if(kolic1==kilk && vybMas=='1' || kolic2==kilk && vybMas=='2')

break;

printf("Vvedy pozyciyu v masyvi kudy vstavyty obyekt\n");

indeks = Convert::ToInt32(Console::ReadLine());

a3 = Convert::ToSingle(Console::ReadLine());

a2 = Convert::ToInt32(Console::ReadLine());

a1 = Convert::ToInt32(Console::ReadLine());

if(vybMas=='2')

{

for(i=kolic2;i>indeks;i--)

typ2[i] = typ2[i-1];

typ2[indeks] = new Student(a1,a2,a3);

kolic2++;

}

else

{

for(i=kolic1;i>indeks;i--)

{

if(i%3==2)

{

Student aa1 (typ1[i-1]);

printf(" %i\n",aa1.rik_naroj);

}

typ1[i] = typ1[i-1];

}

typ1[indeks].rik_naroj=a1;

typ1[indeks].serBal=a2;

typ1[indeks].znannia_mov=a3;

kolic1++;

}

break;

case 'f':

printf("\nVybery typ masyvu >");

bck:

vybMas=getch();

if(vybMas!='1'&&vybMas!='2') goto bck;

printf("\nVybrany masyv %c typu", vybMas);

break;

}

goto bak;

end_g:

delete(typ1);

delete(typ2);

return 0;

}


 

Додаток В

Лістинг модуля student3.cpp

#include "StdAfx.h"

#include "student.h"

 

 

HBITMAP bmpExercising;

student **arr=0;

int MAX=0;

int W=0;

int H=0;

student::student()

{

x=0;

y=0;

active=false;

 

}

 

student::~student()

{

}

 

student student::operator-- ()

{

kilkist_rokiv--;

return (*this);

}

 

student & student::operator= (student &arg)

{

if(this == &arg) return (*this);

int le=strlen(Name),

len2=strlen(arg.Name),

kc=(le>len2)?le:len2;

for(int i=0; i<kc; i++)

{

if(i<le)

Name[i]=arg.Name[i];

else

Name[i]='\0';

}

x=arg.x;

y=arg.y;

active=arg.active;

return (*this);

}

student::student(const student & arg)

{

vozrast=arg.vozrast;

rist=arg.rist;

vaga=arg.vaga;

int le=strlen(Name),

len2=strlen(arg.Name),

kc=(le>len2)?le:len2;

for(int i=0; i<kc; i++)

{

if(i<le)

Name[i]=arg.Name[i];

else

Name[i]='\0';

}

x=arg.x;

y=arg.y;

active=arg.active;

 

}

 

student::student(char *name,int vaga, int vik, float rist,int _vozrast)

{

vik=vik;

vaga=vaga;

vozrast=_vozrast;

strcpy(Name,name);

vaga=0.4F;

x=rand()%500;

y=rand()%500;

active=false;

}

 

bool student::is_whithin(int mx,int my)

{

if(mx<x||mx>x+W||my<y||my>y+H)return false;

return true;

}

 

void student::draw(HDC hdc)

{

HDC cDC=CreateCompatibleDC(hdc);

 

HBITMAP old=(HBITMAP)SelectObject(cDC,bmpExercising); // bitmap=LoadBitmap(hMod,MAKEINTRESOURCE(BIT2)); - загружается из ресурсов dll

 

if(active)

{

::Rectangle(hdc,x-5,y-5,x+W+5,y+H+5);

}

 

StretchBlt(hdc,x,y,W,H,cDC,0,0, W, H, SRCCOPY);

 

SelectObject(cDC,old);

 

DeleteDC(cDC);

 

::TextOutA(hdc,x,y+H+5,(LPCSTR)Name,strlen(Name));

::MoveToEx(hdc,x,y+H+5,0);

::LineTo(hdc,x+W,y+H+5);

}

 

Додаток Г

Лістинг модуля student4fin.cpp

#include "stdafx.h"

#include "lab3.h"

#include "student.h"

#include <ctime>

 

#define MAX_LOADSTRING 100

 

// Глобальные переменные:

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

 

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_LAB3, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

 

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

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

 

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LAB3));

 

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

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

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

 

return (int) msg.wParam;

}

 

void addStud(student * d)

{

student **tmp=new student*[MAX+1];

for(int i=0;i<MAX;++i)tmp[i]=arr[i];

tmp[MAX]=d;

delete [] arr;

arr=tmp;

++MAX;

}

 

void MoveArr(int dx,int dy)

{

for(int i=0;i<MAX;++i)

{

if(!arr[i]->active)continue;

arr[i]->x+=dx;

arr[i]->y+=dy;

}

}

 

void DeleteArr()

{

student **tmp=new student *[MAX];

int k=0;

for(int i=0;i<MAX;++i)

{

if(arr[i]->active)

{

delete arr[i];

continue;

}

tmp[k]=arr[i];

++k;

}

delete [] arr;

MAX=k;

arr=new student *[MAX];

for(int i=0;i<MAX;++i)arr[i]=tmp[i];

delete [] tmp;

}

 

void DiselectArr()

{

for(int i=0;i<MAX;++i)arr[i]->active=false;

}

 

 

//

// ФУНКЦИЯ: 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_LAB3));

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

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

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_LAB3);

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

 

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;

 

 

static int first_flag=0;

 

if(first_flag == 0)

{

first_flag = 1;

srand(time(0));

bmpExercising = (HBITMAP)LoadImage(hInst,L"student.bmp",

IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);

BITMAP b;

GetObject(bmpExercising, sizeof(BITMAP), &b);

W=b.bmWidth;

H=b.bmHeight;

 

arr=new student *[5];

MAX=5;

for(int i=0;i<MAX;++i)

{

arr[i]=new student ("trololo");

}

 

}

 

int dx=0,dy=0;

 

switch (message)

{

case WM_KEYDOWN:

{

switch(wParam)

{

case VK_LEFT:

{

dx=-step;

}break;

case VK_RIGHT:

{

dx=step;

}break;

case VK_UP:

{

dy=-step;

}break;

case VK_DOWN:

{

dy=step;

}break;

case VK_INSERT:

{

student * s=new student ("ololo");

addStud (d);

}break;

case VK_DELETE:

{

DeleteArr();

}break;

case VK_ESCAPE:

{

DiselectArr();

}break;

}

 

MoveArr(dx,dy);

::InvalidateRect(hWnd, NULL, true);

}break;

case WM_LBUTTONDOWN:

{

for(int i=0;i<MAX;++i)

{

if(arr[i]->is_whithin(LOWORD(lParam), HIWORD(lParam)))

{

if(arr[i]->active)

{

arr[i]->active=false;

}

else

{

arr[i]->active=true;

}

}

}

::InvalidateRect(hWnd, NULL, true);

}break;

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: добавьте любой код отрисовки...

for(int i=0;i<MAX;++i)arr[i]->draw(hdc);

EndPaint(hWnd, &ps);

}

break;

case WM_DESTROY:

{

for(int i=0;i<MAX;++i)delete arr[i];

delete [] arr;

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;

}



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 164; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.242.223 (0.009 с.)