Лабораторна робота 10
«main.cpp»
#include "head.h"
char szMenu[]="MainMenu";
HWND b1,b2,b3,b4;
bool viseShow = true;
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
int keyAnswer;
HDC hdc;
PAINTSTRUCT ps;
HINSTANCE hInst1;
switch(Message) {
case WM_CREATE:
b1 = CreateWindow("BUTTON", " Знаходження гіпотенузи",WS_VISIBLE|WS_CHILD|WS_BORDER,300,3,200,30,
hwnd, (HMENU) IDM_ENTER, NULL, NULL);
b2 = CreateWindow("BUTTON", " Середнє арифметичне",WS_VISIBLE|WS_CHILD|WS_BORDER,300,43,200,30,
hwnd, (HMENU) IDM_AVARAGE_AR, NULL, NULL);
b3 = CreateWindow("BUTTON", " Середнє геометричне",WS_VISIBLE|WS_CHILD|WS_BORDER,300,83,200,30,
hwnd, (HMENU) IDM_AVARAGE_GE, NULL, NULL);
b4 = CreateWindow("BUTTON", " Сума ряду",WS_VISIBLE|WS_CHILD|WS_BORDER,300,123,200,30,
hwnd, (HMENU) IDM_SUM_ROW, NULL, NULL);
break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDM_ENTER:
DialogBox(NULL, (LPCTSTR)IDD_PIFAGORUS, hwnd, PifProc);
break;
case IDM_AVARAGE_AR:
DialogBox(NULL, (LPCTSTR)IDD_AVARAGE_AR, hwnd, AvarageArifm);
break;
case IDM_SUM_ROW:
DialogBox(NULL, (LPCTSTR)IDD_SUM_ROW, hwnd, sumRow);
break;
case IDM_AVARAGE_GE:
DialogBox(NULL, (LPCTSTR)IDD_AVARAGE_GE, hwnd, avarageGeom);
break;
case 2:
MessageBox(NULL, "Гребенюк Іван Андрійович, ПЗС-1644", "АПІ_Гребенюк", MB_OK | MB_ICONINFORMATION);
break;
case 3:
MessageBox(NULL, "Він холодний всередині", "АПІ_Гребенюк", MB_OK | MB_ICONINFORMATION);
break;
case 4:
MessageBox(NULL, "Вона мокра", "АПІ_Гребенюк", MB_OK | MB_ICONINFORMATION);
break;
case 5:
MessageBox(NULL, "Не йди на червоне світло світлофора", "АПІ_Гребенюк", MB_OK | MB_ICONSTOP);
break;
case 6:
keyAnswer = MessageBox(NULL, "Не сувай пальці в розетку", "АПІ_Гребенюк", MB_YESNOCANCEL | MB_ICONSTOP);
if(7 == keyAnswer || 2 == keyAnswer) MessageBox(NULL, "Не сувай", "АПІ_Гребенюк", MB_OK | MB_ICONSTOP);
else MessageBox(NULL, "Молодець!", "АПІ_Гребенюк", MB_OK | MB_ICONINFORMATION);
break;
case 7:
MessageBox(NULL, "Не сиди довго за ПК", "АПІ_Гребенюк", MB_CANCELTRYCONTINUE | MB_ICONEXCLAMATION);
break;
case 8:
MessageBox(NULL, "Не вбий", "АПІ_Гребенюк", MB_YESNO | MB_ICONSTOP);
break;
case 9:
MessageBox(NULL, "Не вкради", "АПІ_Гребенюк", MB_YESNO | MB_ICONSTOP);
break;
case 10:
MessageBox(NULL, "Не збреши", "АПІ_Гребенюк", MB_YESNO | MB_ICONSTOP);
break;
case 1:
exit(1);
break;
}
break;
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
case WM_PAINT: {
if(viseShow){
ShowWindow(hwnd, SW_HIDE);
ShowWindow(hwnd, SW_SHOW);
viseShow = false;
}
hdc = BeginPaint (hwnd, &ps);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(150,200,250));
TextOut (hdc,0,2," Лабораторна №10 (API)",20);
EndPaint (hwnd, &ps);
}
break;
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(hInstance, szCursorName);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(hInstance, szIconName);
wc.hIconSm = LoadIcon(hInstance, szIconName);
wc.lpszMenuName=szMenu;
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Гребенюк АПІ 10 лаб",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
700,
300,
NULL,NULL,hInstance,NULL);
HBRUSH brush = CreateSolidBrush(RGB(0, 100, 0));//162 181 205
SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)brush);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
#include "avarageArifm.h"
#include "or.h"
#include "avarageGeom.h"
#include "sumRow.h"
«head.h»
#include <windows.h>
#include <math.h>
#define IDD_PIFAGORUS 102
#define IDD_AVARAGE_AR 101
#define IDD_AVARAGE_GE 1082
#define IDD_SUM_ROW 3323
#define IDC_EXIT 1000
#define IDC_VALUE1 1001
#define IDC_VALUE2 1002
#define IDC_VALUE3 1003
#define IDC_VALUE4 1014
#define IDC_EDIT1 1003
#define IDC_COUNT 1004
#define IDC_CLEAR 1005
#define IDM_ENTER 40002
#define IDM_SUM_ROW 2212
#define IDM_AVARAGE_AR 40113
#define IDM_AVARAGE_GE 40114
#define IDM_EXIT 40003
#define IDC_EDIT2 -1
#define IDC_STATIC -1
#define IDC_INSERT_V 3234
#define IDM_INFO_1 2
#define IDM_INFO_2 3
#define IDM_INFO_3 4
#define IDM_TASK_1 5
#define IDM_TASK_2 6
#define IDM_TASK_3 7
#define IDM_DAN_1 8
#define IDM_DAN_2 9
#define IDM_DAN_3 10
double a,b,c,d,e;
char str[80]="";
BOOL CALLBACK PifProc(HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK AvarageArifm(HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK avarageGeom(HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK sumRow(HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam);
char szIconName[] = "ICON2";
char szCursorName[] = "CURSOR1";
«avarageArifm.h»
BOOL CALLBACK AvarageArifm(HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam)
{
bool editSymbol1 = false, editSymbol2 = false, editSymbol3 = false;
switch (messg)
{
case WM_INITDIALOG:
return TRUE;
case WM_CREATE:
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDC_COUNT:
GetDlgItemText(hdlg,IDC_VALUE1,str,40);
a=atof(str);
if(str[0]!=NULL) editSymbol1 = true;
GetDlgItemText(hdlg,IDC_VALUE2,str,40);
b=atof(str);
if(str[0]!=NULL) editSymbol2 = true;
GetDlgItemText(hdlg,IDC_VALUE3,str,40);
c=atof(str);
if(str[0]!=NULL) editSymbol3 = true;
d=(a+b+c)/3;
gcvt(d,10,str);
if(editSymbol1 && editSymbol2 && editSymbol3)
MessageBox(hdlg, str, "Результат",MB_ICONINFORMATION);
else MessageBox(hdlg, "Заповніть поля!", "Помилка",MB_ICONWARNING);
break;
case IDC_CLEAR:
SetDlgItemText(hdlg, IDC_VALUE1, "");
SetDlgItemText(hdlg, IDC_VALUE2, "");
SetDlgItemText(hdlg, IDC_VALUE3, "");
break;
case IDC_EXIT:
EndDialog(hdlg, LOWORD(wParam));
return TRUE;
break;
}
break;
case WM_CLOSE:
EndDialog(hdlg, LOWORD(wParam));
break;
default: return false;
}
}
«avarageGeom.h»
BOOL CALLBACK avarageGeom(HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam)
{
HDC hddc;
switch (messg)
{
case WM_INITDIALOG:
return TRUE;
case WM_CREATE:
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDC_COUNT:
GetDlgItemText(hdlg,IDC_VALUE1,str,40);
a=atof(str);
GetDlgItemText(hdlg,IDC_VALUE2,str,40);
b=atof(str);
GetDlgItemText(hdlg,IDC_VALUE3,str,40);
c=atof(str);
GetDlgItemText(hdlg,IDC_VALUE4,str,40);
e=atof(str);
d=(a*b*c*e);
d = pow(d, 1.0/4.0);
gcvt(d,10,str);
hddc=GetDC(hdlg);
SetBkMode(hddc, TRANSPARENT);
LOGFONT lf;
HFONT hFont;
lf.lfHeight=16;
lf.lfWidth=16;
hFont = CreateFontIndirect(&lf);
ShowWindow(hdlg, SW_HIDE);
ShowWindow(hdlg, SW_SHOW);
TextOut(hddc,2,2,"Середнє-геометричне = ",strlen("Середнє-геометричне = "));
TextOut(hddc,162,2,str,strlen(str));
hddc = NULL;
hdlg = NULL;
break;
case IDC_CLEAR: //кнопка "Очистити"
SetDlgItemText(hdlg, IDC_VALUE1, "");
SetDlgItemText(hdlg, IDC_VALUE2, "");
SetDlgItemText(hdlg, IDC_VALUE3, "");
SetDlgItemText(hdlg, IDC_VALUE4, "");
break;
case IDC_EXIT:
EndDialog(hdlg, LOWORD(wParam));
return TRUE;
break;
}
break;
case WM_CLOSE:
EndDialog(hdlg, LOWORD(wParam));
break;
default: return false;
}
}
«sumRow.h»
int fact(int ch){
int sum_ch = 1;
while(ch!=0){
sum_ch *= ch;
ch--;
}
return sum_ch;
}
BOOL CALLBACK sumRow(HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam)
{
double a1,s1, x1, i1, eps1;
HDC hddc;
PAINTSTRUCT ps;
switch (messg)
{
case WM_INITDIALOG:
return TRUE;
case WM_CREATE:
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDC_INSERT_V:
SetDlgItemText(hdlg, IDC_VALUE1, "0.25");
SetDlgItemText(hdlg, IDC_VALUE2, "0.00001");
case IDC_COUNT:
GetDlgItemText(hdlg,IDC_VALUE1,str,40);
a=atof(str);
GetDlgItemText(hdlg,IDC_VALUE2,str,40);
b=atof(str);
if(b > 0.1)
{
MessageBox(hdlg, "EPS повинен бути рівний або менше за 0.1", "Помилка",MB_ICONWARNING);
return true;
}
if(!b || !a){
MessageBox(hdlg, "Заповніть всі поля", "Помилка",MB_ICONWARNING);
return true;
}
ShowWindow(hdlg, SW_HIDE);
ShowWindow(hdlg, SW_SHOW);
hddc=GetDC(hdlg);
SetBkMode(hddc, TRANSPARENT);
LOGFONT lf;
HFONT hFont;
lf.lfHeight=16;
lf.lfWidth=16;
hFont = CreateFontIndirect(&lf);
a1=1;s1=0; x1=a; i1 = 1; eps1 = b;
while (fabs(a1)>eps1)
{
a1=(pow(i1,2)*pow(x1, i1) + 1)/(fact(i1) + pow(i1,2)) ;
i1++;
s1=s1+a1;
gcvt(i1,10,str);
TextOut(hddc,345,(i1*20)-30,str,strlen(str));
TextOut(hddc,365,(i1*20)-30,")",strlen(")"));
gcvt(s1,10,str);
TextOut(hddc,380,(i1*20)-30,str,strlen(str));
}
gcvt(s1,10,str);
TextOut(hddc,2,140,"Сума ряду = ",strlen("Сума ряду = "));
TextOut(hddc,85,140,str,strlen(str));
hddc = NULL;
hdlg = NULL;
break;
case IDC_CLEAR:
SetDlgItemText(hdlg, IDC_VALUE1, "");
SetDlgItemText(hdlg, IDC_VALUE2, "");
break;
case IDC_EXIT:
EndDialog(hdlg, LOWORD(wParam));
return TRUE; break;
}
break;
case WM_CLOSE:
EndDialog(hdlg, LOWORD(wParam));
break;
default: return false;
}
}
«dial_1.rc»
IDD_PIFAGORUS DIALOG DISCARDABLE 0, 0, 250, 134
STYLE WS_VISIBLE | WS_TABSTOP | WS_OVERLAPPED
CAPTION "Pifagor's Theoreme"
FONT 10, "System"
{
DEFPUSHBUTTON "Рахувати",IDC_COUNT,40,100,50,14
PUSHBUTTON "Очистити",IDC_CLEAR,104,100,50,14
LTEXT "Ввести перший катет:" ,IDC_STATIC,13,15,100,8
EDITTEXT IDC_VALUE1,13,26,217,14,ES_AUTOHSCROLL
LTEXT " Ввести другий катет:",IDC_STATIC,15,47,100,8
EDITTEXT IDC_VALUE2,14,58,217,14,ES_AUTOHSCROLL
PUSHBUTTON "Вихід",IDC_EXIT,163,100,50,14
}
«dial_2.rc»
IDD_AVARAGE_AR DIALOG DISCARDABLE 0, 0, 250, 100
STYLE WS_VISIBLE | WS_TABSTOP |WS_OVERLAPPEDWINDOW
CAPTION "Знаходження середньо-арифметичного"
FONT 10, "Arial"
{
DEFPUSHBUTTON "Рахувати",IDC_COUNT,170,13,50,14
PUSHBUTTON "Очистити",IDC_CLEAR,170,43,50,14
PUSHBUTTON "Вихід",IDC_EXIT,170,73,50,14
LTEXT "Введіть 1 число:" ,IDC_STATIC,13,15,100,8
EDITTEXT IDC_VALUE1,83,13,40,14,ES_AUTOHSCROLL
LTEXT "Введіть 2 число:" ,IDC_STATIC,13,45,100,8
EDITTEXT IDC_VALUE2,83,43,40,14,ES_AUTOHSCROLL
LTEXT "Введіть 3 число:" ,IDC_STATIC,13,75,100,8
EDITTEXT IDC_VALUE3,83,73,40,14,ES_AUTOHSCROLL
}
«dial_3.rc»
IDD_AVARAGE_GE DIALOG 0, 0, 250, 100
STYLE WS_VISIBLE | WS_TABSTOP |WS_OVERLAPPED
CAPTION "Знаходження середньо-арифметичного"
FONT 14, "Times New Roman" //шрифт
{
DEFPUSHBUTTON "Рахувати",IDC_COUNT,170,13,50,14
PUSHBUTTON "Очистити",IDC_CLEAR,170,43,50,14
PUSHBUTTON "Вихід",IDC_EXIT,170,73,50,14
LTEXT "Введіть 1 число:" ,IDC_STATIC,13,15,100,8
EDITTEXT IDC_VALUE1,83,13,40,14,ES_AUTOHSCROLL
LTEXT "Введіть 2 число:" ,IDC_STATIC,13,35,100,8
EDITTEXT IDC_VALUE2,83,33,40,14,ES_AUTOHSCROLL
LTEXT "Введіть 3 число:" ,IDC_STATIC,13,55,100,8
EDITTEXT IDC_VALUE3,83,53,40,14,ES_AUTOHSCROLL
LTEXT "Введіть 4 число:" ,IDC_STATIC,13,75,100,8
EDITTEXT IDC_VALUE4,83,73,40,14,ES_AUTOHSCROLL
}
«dial_4.rc»
IDD_SUM_ROW DIALOG 0, 0, 250, 100
STYLE WS_VISIBLE | WS_TABSTOP |WS_OVERLAPPED
CAPTION "Знаходження середньо-арифметичного"
FONT 14, "Times New Roman"
{
DEFPUSHBUTTON "Рахувати",IDC_COUNT,3,40,32,12, BS_RIGHTBUTTONPUSHBUTTON "Очистити",IDC_CLEAR,37,40,35,12
PUSHBUTTON "Вихід",IDC_EXIT,73,40,25,12
PUSHBUTTON "Вставити",IDC_INSERT_V,100,40,30,12
LTEXT "Введіть X = " ,IDC_STATIC,3,5,100,8
EDITTEXT IDC_VALUE1,83,5,40,9,ES_AUTOHSCROLL
LTEXT "Введіть точність(EPS) = " ,IDC_STATIC,3,20,100,8
EDITTEXT IDC_VALUE2,83,20,40,9,ES_AUTOHSCROLL
}
«res.rc»
ICON2 ICON "icon7.ico"
CURSOR1 CURSOR "main_cur.cur"
