на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Розробка програми для демонстрації автомобільного руху через залізнодорожний переїзд
p align="left"> &msg)) // message data

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

DestroyAcceleratorTable(hAccel);

return msg.wParam;

}

BOOL RegClass(WNDPROC Proc, LPCSTR szName,UINT brBackground,UINT ic,UINT cur,UINT menu)

CS_VREDRAW

/* Оконная процедура */

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

{

HDC hCompDC, hdc; // хендли контекстів пристрою

HBITMAP hBmpBckGrnd, hBmpTrain, oBitmap, hBmpCar1, hBmpShlagbaym;

// хендли нашого зображення і старого

BITMAP bitmap; // для зберігання розмірів зображення

RECT r; // для зберігання розмірів екрану

RECT train, car1, shlagbm;

static HWND hStatus;

int pParts[2];

SetTimer(hWnd,1,Speed,NULL);

GetClientRect(hWnd, &r);

pParts[0]=500;

pParts[1]=1000;

shlagbm.top=Y3;

shlagbm.left=X3;

shlagbm.bottom=Y3+215;

shlagbm.right=X3+215;

car1.left=X2;

car1.top=Y2;

car1.right=X2+96+13;

car1.bottom=Y2+168+13;

train.left=X-10;

train.top=Y;

train.right=X+538;

train.bottom=Y+118;

Y=85;

switch(msg)

{

case WM_CREATE:

hStatus=CreateStatusWindow(WS_CHILD

case WM_NOTIFY:

{

LPTOOLTIPTEXT t;

t=(LPTOOLTIPTEXT)lParam;

if (t->hdr.code!=TTN_NEEDTEXT)

return 0;

switch (t->hdr.idFrom)

{

case IDM_START:

t->lpszText="Старт поїзда";

break;

case IDM_EDIT:

t->lpszText="Керування шлагбаумом";

break;

case IDM_INFO:

t->lpszText="Інформація про виконавця";

break;

case IDM_EXIT:

t->lpszText="Вихід";

break;

}

}

case WM_PAINT:

{

PAINTSTRUCT ps; // структура для параметрів контексту

hdc = BeginPaint(hWnd, &ps); // отримуємо хендл контексту пристрою

hBmpBckGrnd = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));

GetObject ( hBmpBckGrnd, sizeof(BITMAP),&bitmap); // отримали розміри зображення

hCompDC = CreateCompatibleDC ( hdc );

oBitmap = (HBITMAP)SelectObject ( hCompDC, hBmpBckGrnd );

// ввели наше зображення у контекст в пам'яті

// і запам'ятали те, що витіснили звідти

StretchBlt (hdc, r.left, r.top, r.right, r.bottom, // куди

hCompDC, 0, 0, bitmap.bmWidth, bitmap.bmHeight, // звідки

SRCCOPY); // як

// “натягнули” зображення в пам'яті на екран

SelectObject ( hCompDC, oBitmap );// повернули в контекст в пам'яті попередній вміст

DeleteObject ( hBmpBckGrnd ); // знищили об'єкт

if (car==0)

{

hBmpCar1 = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP4));

DrawTransparentBitmap(hdc,// Конечный DC.

hBmpCar1,// Битмап, который будет нарисован.

X2, // координата X.

Y2, // координата Y.

0x00FFFFFF); // Цвет для прозрачных

// пикселей (в данном случае белый

DeleteObject ( hBmpCar1 ); // знищили об'єкт

}

if (car==1)

{

hBmpCar1 = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP10));

DrawTransparentBitmap(hdc, // Конечный DC.

hBmpCar1, // Битмап, который будет нарисован.

X2, // координата X.

Y2, // координата Y.

0x00FFFFFF); // Цвет для прозрачных

// пикселей (в данном случае белый

DeleteObject ( hBmpCar1 ); // знищили об'єкт

}

if(par==1)

{

SendMessage(hStatus, SB_SETTEXT, 0, (LONG)"Увага!!!Їде Поїзд!!!");

hBmpTrain = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2));

DrawTransparentBitmap(hdc, // Конечный DC.

hBmpTrain, // Битмап, который будет нарисован.

X, // координата X.

Y, // координата Y.

0x00FFFFFF); // Цвет для прозрачных

// пикселей (в данном случае

DeleteObject ( hBmpTrain ); // знищили об'єкт

}

else

SendMessage(hStatus, SB_SETTEXT, 0, (LONG)"Поїзд ще далеко :)");

if(shlagbaym==0)

{

SendMessage(hStatus, SB_SETTEXT, 1, (LONG)"Увага! Шлагбаум відкрито!");

if (w==0)

{

InvalidateRect(hWnd, &shlagbm, FALSE);

w++;

}

hBmpShlagbaym = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP9));

DrawTransparentBitmap(hdc, // Конечный DC.

hBmpShlagbaym,// Битмап, который будет нарисован.

X3, // координата X.

Y3, // координата Y.

0x00FFFFFF); // Цвет для прозрачных

// пикселей (в данном случае белый

DeleteObject ( hBmpShlagbaym ); // знищили об'єкт

}

if(shlagbaym==1)

{

SendMessage(hStatus, SB_SETTEXT, 1, (LONG)"Увага! Шлагбаум закрито!");

if (w==1)

{

InvalidateRect(hWnd, &shlagbm, FALSE);

w--;

}

hBmpShlagbaym = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP5));

DrawTransparentBitmap(hdc, // Конечный DC.

hBmpShlagbaym,// Битмап, который будет нарисован.

X3, // координата X.

Y3, // координата Y.

0x00FFFFFF); // Цвет для прозрачных

// пикселей (в данном случае белый

DeleteObject ( hBmpShlagbaym ); // знищили об'єкт

}

DeleteDC ( hCompDC );

EndPaint(hWnd, &ps); // знищуємо контекст пристрою

return 0;

}

case WM_TIMER:

{

if ((shlagbaym==0)||(Y2<330)||(Y2>350))

{

if (car==0)

{

Y2-=13;

InvalidateRect(hWnd, &car1, FALSE);

}

if (car==1)

{

if (wham==0)

SND_ASYNC);

wham++;

X2+=13;

InvalidateRect(hWnd, &car1, FALSE);

}

if ((Y2<-200)||(X2>1000))

{

Y2=800;

X2=450;

}

}

if (par==1)

{

X+=10;

InvalidateRect(hWnd, &train, FALSE);

if(X<=(X2+45)&&(X+538)>=(X2-1)&&(Y+118)>=(Y2+1)&&(Y<=Y2+85))

car=1;

if (X>1001)

{

X2=450;

par=0;

car=0;

wham=0;

}

}

return 0;

}

case WM_COMMAND:

{

switch(LOWORD(wParam))

{

case IDM_EXIT:

int k=MessageBox(hWnd, "Ви впевнені?","Вихід?",

MB_OKCANCEL

case IDM_VARIANT:

{

DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, DlgProg2);

return 0;

}

case IDM_INFO:

{

DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG3), hWnd, DlgProg3);

return 0;

}

case IDM_EDIT:

{

int i=0;

i=1;

DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DlgProg);

InvalidateRect(hWnd, &shlagbm, FALSE);

return 0;

}

case IDM_HELP:

{

DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG4), hWnd, DlgProg4);

return 0;

}

case IDM_START:

SND_ASYNC);

InvalidateRect(hWnd, &r, FALSE);

X=-500;

par=1;

car=0;

X2=450;

wham=0;

return 0;

}

return 0;

}

case WM_DESTROY:

{

PostQuitMessage(0);

return 0;

}

}

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

}

BOOL CALLBACK DlgProg(HWND hdWnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch (msg)

{

case WM_CLOSE:

{

EndDialog(hdWnd, 0);

return 1;

}

case WM_COMMAND:

{

switch (wParam)

{

case IDC_UPBUTTON:

{

if (par!=1)

{

shlagbaym=0;

}

EndDialog(hdWnd, 0);

return 1;

}

case IDC_DOWNBUTTON:

{

shlagbaym=1;

EndDialog(hdWnd, 0);

return 1;

}

}

return 1;

}

}

return 0;

}

BOOL CALLBACK DlgProg2(HWND hdWnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch (msg)

{

case WM_CLOSE:

{

EndDialog(hdWnd, 0);

return 1;

}

}

return 0;

}

BOOL CALLBACK DlgProg3(HWND hdWnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch (msg)

{

case WM_COMMAND:

{

switch (wParam)

{

case IDOK:

{

EndDialog(hdWnd, 0);

return 1;

}

}

return 1;

}

case WM_CLOSE:

{

EndDialog(hdWnd, 0);

return 1;

}

}

return 0;

}

BOOL CALLBACK DlgProg4(HWND hdWnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch (msg)

{

case WM_COMMAND:

{

switch (wParam)

{

case IDOK:

{

EndDialog(hdWnd, 0);

return 1;

}

}

return 1;

}

case WM_CLOSE:

{

EndDialog(hdWnd, 0);

return 1;

}

}

return 0;

}

void DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, short xStart,

short yStart, COLORREF cTransparentColor)

{

BITMAP bm;

COLORREF cColor;

HBITMAP bmAndBack, bmAndObject, bmAndMem, bmSave;

HBITMAP bmBackOld, bmObjectOld, bmMemOld, bmSaveOld;

HDC hdcMem, hdcBack, hdcObject, hdcTemp, hdcSave;

POINT ptSize;

hdcTemp = CreateCompatibleDC(hdc);

SelectObject(hdcTemp, hBitmap); // Выбираем битмап

GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);

ptSize.x = bm.bmWidth; // Получаем ширину битмапа

ptSize.y = bm.bmHeight; // Получаем высоту битмапа

DPtoLP(hdcTemp, &ptSize, 1); // Конвертируем из координат

// устройства в логические

// точки

// Создаём несколько DC для хранения временных данных.

hdcBack = CreateCompatibleDC(hdc);

hdcObject = CreateCompatibleDC(hdc);

hdcMem = CreateCompatibleDC(hdc);

hdcSave = CreateCompatibleDC(hdc);

// Создаём битмап для каждого DC.

// Монохромный DC

bmAndBack = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);

// Монохромный DC

bmAndObject = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);

bmAndMem = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y);

bmSave = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y);

// В каждом DC должен быть выбран объект битмапа для хранения

// пикселей.

bmBackOld = (HBITMAP)SelectObject(hdcBack, bmAndBack);

bmObjectOld = (HBITMAP)SelectObject(hdcObject, bmAndObject);

bmMemOld = (HBITMAP)SelectObject(hdcMem, bmAndMem);

bmSaveOld = (HBITMAP)SelectObject(hdcSave, bmSave);

// Устанавливаем режим маппинга.

SetMapMode(hdcTemp, GetMapMode(hdc));

// Сохраняем битмап, переданный в параметре функции, так как

// он будет изменён.

BitBlt(hdcSave, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCCOPY);

// Устанавливаем фоновый цвет (в исходном DC) тех частей,

// которые будут прозрачными.

cColor = SetBkColor(hdcTemp, cTransparentColor);

// Создаём маску для битмапа путём вызова BitBlt из исходного

// битмапа на монохромный битмап.

BitBlt(hdcObject, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0,

SRCCOPY);

// Устанавливаем фоновый цвет исходного DC обратно в

// оригинальный цвет.

SetBkColor(hdcTemp, cColor);

// Создаём инверсию маски.

BitBlt(hdcBack, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0,

NOTSRCCOPY);

// Копируем фон главного DC в конечный.

BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdc, xStart, yStart,

SRCCOPY);

// Накладываем маску на те места, где будет помещён битмап.

BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0, SRCAND);

// Накладываем маску на прозрачные пиксели битмапа.

BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdcBack, 0, 0, SRCAND);

// XOR-им битмап с фоном на конечном DC.

BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCPAINT);

// Копируем на экран.

BitBlt(hdc, xStart, yStart, ptSize.x, ptSize.y, hdcMem, 0, 0,

SRCCOPY);

// Помещаем оригинальный битмап обратно в битмап, переданный в

// параметре функции.

BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdcSave, 0, 0, SRCCOPY);

// Удаляем битмапы из памяти.

DeleteObject(SelectObject(hdcBack, bmBackOld));

DeleteObject(SelectObject(hdcObject, bmObjectOld));

DeleteObject(SelectObject(hdcMem, bmMemOld));

DeleteObject(SelectObject(hdcSave, bmSaveOld));

// Удаляем DC из памяти.

DeleteDC(hdcMem);

DeleteDC(hdcBack);

DeleteDC(hdcObject);

DeleteDC(hdcSave);

DeleteDC(hdcTemp);

}

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.