lab7pw
-
Upload
jacky-sparrow -
Category
Documents
-
view
237 -
download
0
Transcript of lab7pw
-
8/6/2019 lab7pw
1/10
Ministerul Educatiei,Tineretului si Sportului al Republicii Moldova
Universitatea Tehnic a Moldovei
Catedra ATI
REFERATLucrarera de laborator nr.7
Obiectul: Programarea in Windows
Tema:Ferestre descendente
A efectuat: studentul gr.TI-093
Nita Alexandr
A verificat: lector superior
Postaru Andrei
Chiinu 2011
-
8/6/2019 lab7pw
2/10
1.Scopul lucrarii: De studiat metodele si principiile de lucru cu ferestrele descendente si
principiile de prelucrare a mesajelor parvenite de la ferestre descendente.
2.Codul sursa:// lab7.cpp : Defines the entry point for the application.//
#include"stdafx.h"#include"lab7.h"#include"math.h"
#define MAX_LOADSTRING 100#define PI 3.141596#define TIME1 1staticint x=2,y=2,k=0,color=0;int iCheck[6]={0};static TCHAR str[10];POINT patrat1[4],patrat2[4];doublelengthx=150,lengthx2=150,lengthy=50,lengthy2=50,angle_stepsize=0.01,angle=0.0,angle2=0.0, step2=0.01;double x_1,x_2,y_1,y_2,coordx=500,coordy=400,x_11,x_22,y_11,y_22;
// Global Variables:HINSTANCE hInst; // current instanceTCHAR szTitle[MAX_LOADSTRING]; // The title bar textTCHAR 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 stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_LAB7, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);
// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)){
return FALSE;}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LAB7));
// Main message loop:while (GetMessage(&msg, NULL, 0, 0)){
-
8/6/2019 lab7pw
3/10
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){
TranslateMessage(&msg);DispatchMessage(&msg);
}}
return (int) msg.wParam;}
//////struct
{LONG style;TCHAR *name;}
button[]={BS_AUTORADIOBUTTON, L" CUB ",BS_AUTORADIOBUTTON, L" PIRAMIDA",BS_AUTORADIOBUTTON, L" EFECT",BS_AUTOCHECKBOX, L"Rosu",BS_AUTOCHECKBOX, L"Verde",BS_AUTOCHECKBOX, L"Albastru",BS_PUSHBUTTON, L" START",BS_PUSHBUTTON, L" STOP"
};
//// 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_LAB7));wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_LAB7);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:
-
8/6/2019 lab7pw
4/10
//// 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_OVERLAPPED |\/* WS_CAPTION | \*/
WS_SYSMENU ,// | \/* WS_THICKFRAME | \WS_MINIMIZEBOX | \WS_MAXIMIZEBOX,*/
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////
static HWND hWndButton[6];LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;RECT rect;
switch (message){case WM_COMMAND:
wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);hdc=GetDC(hWnd);switch (wParam){
case 0:if (iCheck[0]==1){EnableWindow(hWndButton[1],TRUE);EnableWindow(hWndButton[2],TRUE);
}else{iCheck[0] = 1; iCheck[1] = 0; iCheck[2] = 0;EnableWindow(hWndButton[1],FALSE);EnableWindow(hWndButton[2],FALSE);}InvalidateRect(hWnd,NULL,TRUE);break;
case 1: if(iCheck[1]==1){EnableWindow(hWndButton[0],TRUE);EnableWindow(hWndButton[2],TRUE);
-
8/6/2019 lab7pw
5/10
}else{iCheck[0] = 0; iCheck[1] = 1; iCheck[2] = 0;EnableWindow(hWndButton[0],FALSE);EnableWindow(hWndButton[2],FALSE);}InvalidateRect(hWnd,NULL,TRUE);break;
case 2:if(iCheck[2]==1){EnableWindow(hWndButton[0],TRUE);EnableWindow(hWndButton[1],TRUE);
}else{iCheck[0] = 0; iCheck[1] = 0; iCheck[2] = 1;EnableWindow(hWndButton[0],FALSE);
EnableWindow(hWndButton[1],FALSE);}InvalidateRect(hWnd,NULL,TRUE);break;
case 3:
iCheck[3] = (int) SendMessage (hWndButton[3], BM_GETCHECK, 0, 0) ; //verificarea starii butonului
if (iCheck[3] != 0) // se verifca daca butonul a fost apasat sau nu{color=1;SendMessage(hWndButton[4],BM_SETCHECK,0,0); // setarea starii
butonuluiSendMessage(hWndButton[5],BM_SETCHECK,0,0);EnableWindow(hWndButton[4],FALSE); // dezactivarea butonuluiEnableWindow(hWndButton[5],FALSE);}
else{color=0;EnableWindow(hWndButton[4],TRUE);EnableWindow(hWndButton[5],TRUE); // activarea butonului}InvalidateRect(hWnd,NULL,TRUE); // invalidarea zonei client, stergind
totul din eabreak;
case 4:iCheck[4]= (int) SendMessage (hWndButton[4], BM_GETCHECK, 0, 0) ;
if(iCheck[4] != 0){color=2;SendMessage(hWndButton[3],BM_SETCHECK,0,0);SendMessage(hWndButton[4],BM_SETCHECK,1,0);EnableWindow(hWndButton[3],FALSE);
EnableWindow(hWndButton[5],FALSE);}else{color=0;EnableWindow(hWndButton[3],TRUE);EnableWindow(hWndButton[5],TRUE);}InvalidateRect(hWnd,NULL,TRUE);break;
case 5:iCheck[5]= (int) SendMessage (hWndButton[5], BM_GETCHECK, 0, 0) ;
if (iCheck[5] !=0){color=3;SendMessage(hWndButton[4],BM_SETCHECK,0,0);SendMessage(hWndButton[5],BM_SETCHECK,1,0);
EnableWindow(hWndButton[4],FALSE);EnableWindow(hWndButton[3],FALSE);EnableWindow(hWndButton[5],TRUE);}else{color=0;EnableWindow(hWndButton[3],TRUE);EnableWindow(hWndButton[4],TRUE);}InvalidateRect(hWnd,NULL,TRUE);break;
case 6:
-
8/6/2019 lab7pw
6/10
iCheck[6]= (int) SendMessage (hWndButton[6], BM_GETSTATE, 0, 0) ;iCheck[7]=0;
if (iCheck[6]!=0){
EnableWindow(hWndButton[0],FALSE);EnableWindow(hWndButton[1],FALSE);
EnableWindow(hWndButton[2],FALSE);EnableWindow(hWndButton[7],TRUE);EnableWindow(hWndButton[6],FALSE);
}
InvalidateRect(hWnd,NULL,TRUE);
break;case 7:
iCheck[7]= (int) SendMessage (hWndButton[7], BM_GETSTATE, 0, 0) ;iCheck[6]=0;
EnableWindow(hWndButton[0],TRUE);EnableWindow(hWndButton[1],TRUE);EnableWindow(hWndButton[2],TRUE);if(iCheck[7]!=0){
EnableWindow(hWndButton[7],FALSE);EnableWindow(hWndButton[6],TRUE);
}
break;}
// 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_CREATE:SetTimer(hWnd,TIME1 , 10,NULL);
hdc=GetDC(hWnd);ReleaseDC(hWnd,hdc);for(int i=0;i=3)&&(ihInstance,NULL);k++;
}if (i==6){
hWndButton[i]=CreateWindow(L"button",button[i].name,WS_CHILD|WS_VISIBLE|button[i].style,250,0+20*y*k,200,20,hWnd,(HMENU) i,
-
8/6/2019 lab7pw
7/10
((LPCREATESTRUCT)lParam)->hInstance,NULL);
}if (i==7){
hWndButton[i]=CreateWindow(L"button",button[i].name,WS_CHILD|WS_VISIBLE|button[i].style,550,0+20*y*k,200,20,hWnd,(HMENU) i,
((LPCREATESTRUCT)lParam)->hInstance,NULL);
}}
break;case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);GetClientRect(hWnd,&rect);HPEN pen;if(color==1) pen=CreatePen(PS_SOLID,2,RGB(255,0,0));
if(color==2) pen=CreatePen(PS_SOLID,2,RGB(0,255,0)); if(color==3) pen=CreatePen(PS_SOLID,2,RGB(0,0,255));
SelectObject(hdc,pen);
x_1=lengthx*cos(angle);y_1=lengthy*sin(angle);
x_2=lengthx*cos(angle+PI/2);y_2=lengthy*sin(angle+PI/2);
x_11=lengthx2*cos(angle2);y_11=lengthy2*sin(angle2);x_22=lengthx2*cos(angle2+PI/2);y_22=lengthy2*sin(angle2+PI/2);
////////////////////////////// CUBUL /////////////////////////// if (iCheck[0]==1){
// cub - fata de jospatrat1[0].x=coordx-x_1; patrat1[0].y=coordy-y_1;
patrat1[1].x=coordx+x_2; patrat1[1].y=coordy+y_2;patrat1[2].x=coordx+x_1; patrat1[2].y=coordy+y_1;patrat1[3].x=coordx-x_2; patrat1[3].y=coordy-y_2;
//cub - fata de suspatrat2[0].x=patrat1[0].x; patrat2[0].y=patrat1[0].y-100;patrat2[1].x=patrat1[1].x; patrat2[1].y=patrat1[1].y-100;patrat2[2].x=patrat1[2].x; patrat2[2].y=patrat1[2].y-100;patrat2[3].x=patrat1[3].x; patrat2[3].y=patrat1[3].y-100;Polygon(hdc,patrat1,4);
//fetile lateraleMoveToEx(hdc,patrat1[0].x,patrat1[0].y,NULL);LineTo(hdc,patrat2[0].x,patrat2[0].y);
MoveToEx(hdc,patrat1[1].x,patrat1[1].y,NULL);LineTo(hdc,patrat2[1].x,patrat2[1].y);
MoveToEx(hdc,patrat1[2].x,patrat1[2].y,NULL);
LineTo(hdc,patrat2[2].x,patrat2[2].y);
MoveToEx(hdc,patrat1[3].x,patrat1[3].y,NULL);LineTo(hdc,patrat2[3].x,patrat2[3].y);Polygon(hdc,patrat2,4);
}
///////////////////////////// PIRAMIDA ///////////////if (iCheck[1]==1){// piramida - fata de jospatrat1[0].x=coordx-x_1; patrat1[0].y=coordy-y_1;
patrat1[1].x=coordx+x_2; patrat1[1].y=coordy+y_2;patrat1[2].x=coordx+x_1; patrat1[2].y=coordy+y_1;
-
8/6/2019 lab7pw
8/10
patrat1[3].x=coordx-x_2; patrat1[3].y=coordy-y_2;Polygon(hdc,patrat1,4);// fetele lateraleMoveToEx(hdc,patrat1[0].x,patrat1[0].y,NULL);LineTo(hdc,500,250);
MoveToEx(hdc,patrat1[1].x,patrat1[1].y,NULL);LineTo(hdc,500,250);
MoveToEx(hdc,patrat1[2].x,patrat1[2].y,NULL);LineTo(hdc,500,250);
MoveToEx(hdc,patrat1[3].x,patrat1[3].y,NULL);LineTo(hdc,500,250);
}/////////////////////////// TRANSFORMARE ////////////
if (iCheck[2]==1){// fata de suspatrat1[0].x=coordx-x_1; patrat1[0].y=coordy-y_1;
patrat1[1].x=coordx+x_2; patrat1[1].y=coordy+y_2;patrat1[2].x=coordx+x_1; patrat1[2].y=coordy+y_1;patrat1[3].x=coordx-x_2; patrat1[3].y=coordy-y_2;Polygon(hdc,patrat1,4);// fata de jospatrat2[0].x=coordx-x_11; patrat2[0].y=coordy-100-y_11;
patrat2[1].x=coordx+x_22; patrat2[1].y=coordy-100+y_22;patrat2[2].x=coordx+x_11; patrat2[2].y=coordy-100+y_11;patrat2[3].x=coordx-x_22; patrat2[3].y=coordy-100-y_22;
MoveToEx(hdc,patrat1[0].x,patrat1[0].y,NULL);LineTo(hdc,patrat2[0].x,patrat2[0].y);
MoveToEx(hdc,patrat1[1].x,patrat1[1].y,NULL);LineTo(hdc,patrat2[1].x,patrat2[1].y);
MoveToEx(hdc,patrat1[2].x,patrat1[2].y,NULL);LineTo(hdc,patrat2[2].x,patrat2[2].y);
MoveToEx(hdc,patrat1[3].x,patrat1[3].y,NULL);LineTo(hdc,patrat2[3].x,patrat2[3].y);
Polygon(hdc,patrat2,4);
}// TODO: Add any drawing code here...EndPaint(hWnd, &ps);break;
case WM_DESTROY:PostQuitMessage(0);break;
case WM_TIMER:switch (wParam)
{case TIME1:if((iCheck[0]==1)||(iCheck[1]==1)||(iCheck[2]==1))
if(iCheck[6]!=0){ // zona de redesenare
rect.bottom=500;rect.left=250;rect.right=750;rect.top=200;//coordonatele patrulaterului de josx_1=lengthx*cos(angle);
y_1=lengthy*sin(angle);x_2=lengthx*cos(angle+PI/2);
-
8/6/2019 lab7pw
9/10
y_2=lengthy*sin(angle+PI/2);angle=angle+angle_stepsize;
//coordonatele patrulaterului de josif((iCheck[0]!=1)&&(iCheck[1]!=1)&&(iCheck[2]==1))
{ x_11=lengthx*cos(angle2);y_11=lengthy*sin(angle2);x_22=lengthx*cos(angle2+PI/2);y_22=lengthy*sin(angle2+PI/2);
angle2=angle2-step2;}InvalidateRect(hWnd,&rect,TRUE);
}
}
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;
}
3. Rezultatul final:3.1 Cubul
3.2 Piramida:
-
8/6/2019 lab7pw
10/10
3.2 Efectul (aici, baza de sus a cubului se roteste in sens opus in comparative cu baza de jos):
4. Concluzie: n timpul efecturii acestei lucrri am facut cunostinta cu principiilede baza al lucrului cu ferestrele descendente. Am studiat functiile si procedurile
principale(EnableWindow, SendMessage,) care raspund de functionalitatea acestor ferestre.
5. Bibliografie:
1. http://msdn.microsoft.com/;
2. Programarea in Windows 95 A. C. Petzold;
3. Conspect disciplina Programarea in Windows Victor Besliu;
4. Indrumar de laborator PW, editura Chisinau UTM 2006 Victor Besliu, Cristina Panu.