Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Velikaya_shpora_lr_9.doc
Скачиваний:
3
Добавлен:
18.09.2019
Размер:
2.04 Mб
Скачать

Int winapi WinMain(hinstance hInstance,hinstance hPrevInstance,lpstr lpszCmdLine,int nCmdShow)

{

MSG msg; HWND hwnd;

If (!RegClass(WndProc,szClassName,color_window))

return FALSE;

hwnd=CreateWindow(szClassName,"П",

WS_OVERLAPPEDWINDOW|WS_VISIBLE,

CW_USEDEFAULT,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,

NULL,NULL,hInstance,NULL);

If (!hwnd) return false;

while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg);

return (int) msg.wParam;

}

BOOL RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground)

{ WNDCLASS wc; wc.style=CS_HREDRAW|CS_VREDRAW;

wc.cbClsExtra=wc.cbWndExtra=0; wc.lpfnWndProc=Proc;

wc.hInstance=hInstance; wc.lpszClassName=szName;

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

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

wc.lpszMenuName=NULL;

return (RegisterClass(&wc)!=0);

}

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

{

static HANDLE hThread=0;

switch(msg)

{

case WM_CREATE:

break;

case WM_LBUTTONDOWN:

ts.hwnd=hwnd;

ts.n=5;

ts.a[0]=5;

ts.a[1]=6;

ts.a[2]=1;

ts.a[3]=2;

ts.a[4]=3;

ts.c=10;

if (hThread!=0) CloseHandle(hThread);

CreateThread(NULL,0,ThreadFunc,&ts,0,NULL);

break;

case WM_DESTROY:

CloseHandle(hThread);

PostQuitMessage(0);

break;

default:

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

}

return 0;

}

DWORD WINAPI ThreadFunc(PVOID pvParam)

{ ThreadStr* pTs = (ThreadStr*)pvParam;

HDC hdc;

char str[200], str1[20];

hdc=GetDC(pTs->hwnd);

int i;

for(i=0;i<(pTs->n);i++)

{

pTs->a[i]=pTs->a[i]/(i+1);

}

strcpy(str,"");

for(i=(pTs->n-1);i>=0;i--)

{

pTs->a[i+1]=pTs->a[i];

sprintf(str1,"%.3f*x^%d+",pTs->a[i+1],i+1);

strcat(str,str1);

}

pTs->a[0]=pTs->c;

sprintf(str1,"%.3f=0",pTs->a[0]);

strcat(str,str1);

TextOut(hdc,10,10,str,strlen(str));

ReleaseDC(pTs->hwnd,hdc);

return 0;

}

Создать в приложении вторичный поток, входная функция которого выполняет вычитание многочленов и выводит результат в окно. Степень, коэффициенты многочленов и дескриптор окна передать входной функции вторичного потока в качестве параметра.

#include <stdio.h>

#include <windows.h>

#include <string.h>

#include <math.h>

#include <wchar.h>

#define QUANTITY 15001

#define BUTTON1 15002

BOOL RegClass(WNDPROC,LPCTSTR,UINT);

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

HINSTANCE hInstance;

char szClassName[]="GraphClass";

int quantity;

HWND static button1;

wchar_t buf[100];

struct ThreadStr

{

HWND hwnd;

int n;//степень

int m1[10];

int m2[10];

int m3[10];

};

ThreadStr ts;

DWORD WINAPI ThreadFunc(PVOID); //входная функция вторичного потока

Int winapi WinMain(hinstance hInstance,hinstance hPrevInstance,lpstr lpszCmdLine,int nCmdShow)

{

MSG msg; HWND hwnd;

If (!RegClass(WndProc,szClassName,color_window))

return FALSE;

hwnd=CreateWindow(szClassName,"П",

WS_OVERLAPPEDWINDOW|WS_VISIBLE,

CW_USEDEFAULT,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,

NULL,NULL,hInstance,NULL);

If (!hwnd) return false;

while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg);

return (int) msg.wParam;

}

BOOL RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground)

{ WNDCLASS wc; wc.style=CS_HREDRAW|CS_VREDRAW;

wc.cbClsExtra=wc.cbWndExtra=0; wc.lpfnWndProc=Proc;

wc.hInstance=hInstance; wc.lpszClassName=szName;

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

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

wc.lpszMenuName=NULL;

return (RegisterClass(&wc)!=0);

}

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

{

static HANDLE hThread=0;

switch(msg)

{

case WM_CREATE:

break;

case WM_LBUTTONDOWN:

ts.hwnd=hwnd;

// button1=CreateWindow (L"BUTTON",(LPCSTR)"Степень многочлена",WS_VISIBLE|WS_CHILD|,10,50,70,30,(HMENU)STORAGE_OFF,hInstance,NULL);

// quantity=CreateWindow (L"EDIT",_T(" "),WS_VISIBLE|WS_CHILD|WS_BORDER|ES_NUMBER,100,50,30,20,hwnd,(HMENU)QUANTITY,hInstance,NULL);

// GetWindowText(quantity,buf,sizeof(quantity));

// ts.n=_atoi(buf);

ts.n=5;

ts.m1[0]=1;

ts.m1[1]=5;

ts.m1[2]=8;

ts.m1[3]=2;

ts.m1[4]=6;

ts.m2[0]=2;

ts.m2[1]=4;

ts.m2[2]=6;

ts.m2[3]=2;

// ts.m2[4]=4;

if (hThread!=0) CloseHandle(hThread);

CreateThread(NULL,0,ThreadFunc,&ts,0,NULL);

break;

case WM_DESTROY:

CloseHandle(hThread);

PostQuitMessage(0);

break;

default:

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

}

return 0;

}

DWORD WINAPI ThreadFunc(PVOID pvParam)

{

ThreadStr* pTs = (ThreadStr*)pvParam;

HDC hdc;

char str[200], str1[20];

hdc=GetDC(pTs->hwnd);

int i;

strcpy(str,"");

for (i=0;i<=pTs->n;i++)

{

pTs->m3[i]=pTs->m1[i]-pTs->m2[i];

sprintf(str1,"%d*x^%d+",pTs->m3[i], i);

strcat(str,str1);

}

TextOut(hdc,10,10,str,strlen(str));

ReleaseDC(pTs->hwnd,hdc);

/*int i;

for(i=0;i<(pTs->n);i++)

{

pTs->a[i]=pTs->a[i]/(i+1);

}

strcpy(str,"");

for(i=(pTs->n-1);i>=0;i--)

{

pTs->a[i+1]=pTs->a[i];

sprintf(str1,"%.3f*x^%d+",pTs->a[i+1],i+1);

strcat(str,str1);

}

pTs->a[0]=pTs->c;

sprintf(str1,"%.3f=0",pTs->a[0]);

strcat(str,str1);

TextOut(hdc,10,10,str,strlen(str));

ReleaseDC(pTs->hwnd,hdc);

*/

return 0;

}

Создать в приложении вторичный поток, входная функция которого вычисляет логарифм числа по произвольному основанию и выводит результат в окно. Основание, аргумент логарифма и дескриптор окна передать входной функции вторичного потока в качестве параметра.

#include <windows.h>

#include <math.h>

#include <iostream>

LONG WinProc(HWND, UINT, WPARAM, LPARAM);

void WINAPI ThreadProcess(LPVOID lpParam);

typedef struct _ThreadParams {

HWND hWnd;

double base;

double arg;

} tp;

HWND base_edit, arg_edit;

// WINMAIN

int WINAPI WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR pCmdLine,

int nCmdShow)

{

char ProgName[]="Labrab";

char Title[]="Потоки";

HWND hWnd;

MSG msg;

//РЕГИСТРАЦИЯ ОКОННОГО КЛАССА

WNDCLASS w;

w.lpszClassName=ProgName;

w.hInstance=hInstance;

w.lpfnWndProc=(WNDPROC)WinProc;

w.hCursor=LoadCursor(NULL, IDC_ARROW);

w.hIcon=LoadIcon(NULL, IDI_APPLICATION);

w.lpszMenuName=NULL;

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

w.style=CS_HREDRAW | CS_VREDRAW;

w.cbClsExtra=0;

w.cbWndExtra=0;

if(!RegisterClass(&w)) return false;

//

hWnd=CreateWindow

(

ProgName, //имя класса

Title, //имя окна (заголовок)

WS_OVERLAPPEDWINDOW, //стиль окна

100, //x-координата окна

100, //y-координата окна

400, //ширина окна

200, //высота окна

NULL, // дескриптор родительского или окна владельца

NULL, // дескриптор меню или идентификатор дочернего окна

hInstance, // дескриптор экземпляра приложения

NULL // указатель на данные создания окна

);

tp ThreadParams;

ThreadParams.hWnd=hWnd;

ThreadParams.base=2;

ThreadParams.arg=256;

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadProcess, (void*)&ThreadParams, 0, NULL);

ShowWindow(hWnd, nCmdShow);

while(GetMessage(&msg, NULL, 0, 0)) //цикл обработки сообщений

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

//

void WINAPI ThreadProcess(void* lpParam){

tp *Params = (tp*)lpParam;

double result = log(Params->arg)/log(Params->base);

char buf[100];

HDC hdc = GetDC(Params->hWnd);

sprintf(buf, "Логарифм %1.0f по основанию %1.0f = %f", Params->arg, Params->base, result);

SetWindowText(Params->hWnd, buf);

ReleaseDC(Params->hWnd, hdc);

}

//ОКОННАЯ ПРОЦЕДУРА

LONG WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){

switch(msg){

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

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

break;

}

return 0;

}

РАЗНОСТЬ МНОГОЧЛЕНОВ

#include <windows.h>

#include <math.h>

#include <iostream>

#define n 3 //степень первого многочлена

#define m 3 //степень второго многочлена

LONG WinProc(HWND, UINT, WPARAM, LPARAM);

void WINAPI ThreadProcess(LPVOID lpParam);

typedef struct _ThreadParams {

HWND hWnd;

int Koef1[n];//массив с коэффициентами первого многочлена

int Koef2[m];//массив с коэффициентами второго многочлена

} tp;

HWND base_edit, arg_edit;

// WINMAIN

int WINAPI WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR pCmdLine,

int nCmdShow)

{

char ProgName[]="Labrab";

char Title[]="Потоки";

HWND hWnd;

MSG msg;

//РЕГИСТРАЦИЯ ОКОННОГО КЛАССА

WNDCLASS w;

w.lpszClassName=ProgName;

w.hInstance=hInstance;

w.lpfnWndProc=(WNDPROC)WinProc;

w.hCursor=LoadCursor(NULL, IDC_ARROW);

w.hIcon=LoadIcon(NULL, IDI_APPLICATION);

w.lpszMenuName=NULL;

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

w.style=CS_HREDRAW | CS_VREDRAW;

w.cbClsExtra=0;

w.cbWndExtra=0;

if(!RegisterClass(&w)) return false;

//

hWnd=CreateWindow

(

ProgName, //имя класса

Title, //имя окна (заголовок)

WS_OVERLAPPEDWINDOW, //стиль окна

100, //x-координата окна

100, //y-координата окна

400, //ширина окна

200, //высота окна

NULL, // дескриптор родительского или окна владельца

NULL, // дескриптор меню или идентификатор дочернего окна

hInstance, // дескриптор экземпляра приложения

NULL // указатель на данные создания окна

);

tp ThreadParams;

ThreadParams.hWnd=hWnd;

///////// Коэффинциенты первого многочлена

ThreadParams.Koef1[0] = 3;

ThreadParams.Koef1[1] = 4;

ThreadParams.Koef1[2] = 6;

///////// Коэффинциенты второго многочлена

ThreadParams.Koef2[0]= 9;

ThreadParams.Koef2[1]= 8;

ThreadParams.Koef2[2]= 7;

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadProcess, (void*)&ThreadParams, 0, NULL);

ShowWindow(hWnd, nCmdShow);

while(GetMessage(&msg, NULL, 0, 0)) //цикл обработки сообщений

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

//

void WINAPI ThreadProcess(void* lpParam)

{

tp *Params = (tp*)lpParam;

int key;

////////массив коэффициентов результата-многочлена

int KoefRes[100];

/////случай, когда степень первого многочлена равна степени второго

if (n == m)

{

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

{

KoefRes[i]=(Params->Koef1[i] - Params->Koef2[i]);

}

}

/////случай, когда степень первого многочлена больше степени второго

/*if (n > m)

{

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

{

KoefRes[i] = Params->Koef1[i];

}

key=n-m;

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

{

KoefRes[i]=(Params->Koef1[i] - Params->Koef2[i-key]);

}

}*/

/////случай, когда степень первого многочлена меньше степени второго

/*if (n < m)

{

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

{

KoefRes[i] = Params->Koef1[i];

}

key=m-n;

for (int i=key;i<m;i++)

{

KoefRes[i]=(Params->Koef1[i-key] - Params->Koef2[i]);

}

}*/

char buf[100];

HDC hdc = GetDC(Params->hWnd);

sprintf(buf, "Многочлен = (%d)x^2 + (%d)x + (%d)", KoefRes[0],KoefRes[1],KoefRes[2]);

SetWindowText(Params->hWnd, buf);

ReleaseDC(Params->hWnd, hdc);

}

//ОКОННАЯ ПРОЦЕДУРА

LONG WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch(msg)

{

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

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

break;

}

return 0;

}

8. Создать в приложении вторичный поток, входная функция которого выполняет сложение двух векторов и выводит результат в окно. Векторы и дескриптор окна передать входной функции вторичного потока в качестве параметра.

#include<windows.h>

#include<stdio.h>

LONG MyWinP(HWND,UINT,WPARAM,LPARAM);

DWORD WINAPI ThreadFunc(PVOID pvParam);

struct mnog

{

HWND hWnd;

int len[60],len2[60];

int n;

};

HINSTANCE hInst;

DWORD ID=4000;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

//setlocale(0,"RUS");

char ProgName[]="My window";

char Title[]="Сложение";

HWND hWnd;

MSG msg;

WNDCLASS w;

hInst=hInstance;

w.lpszClassName=ProgName;

w.hInstance=hInstance;

w.lpfnWndProc=(WNDPROC)MyWinP;

w.hCursor=LoadCursor(NULL,IDC_ARROW);

w.hIcon=LoadIcon(NULL,IDI_APPLICATION);

w.lpszMenuName=NULL;

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

w.style=CS_HREDRAW | CS_VREDRAW;

w.cbClsExtra=0;

w.cbWndExtra=0;

if(!RegisterClass(&w)) return false;

hWnd=CreateWindow(ProgName,Title,WS_OVERLAPPEDWINDOW,10,20,200,200,NULL,NULL,hInstance,NULL);

ShowWindow(hWnd,nCmdShow);

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return (int)msg.wParam;

}

DWORD WINAPI ThreadFunc(PVOID pvParam)

{

HDC hdc;

char buf[220];

char str[200];

int res[60];

int sym=0;

strcpy(buf," Результат: ");

for(int i=0;i<((mnog*)pvParam)->n;i++)

{

res[i]=((mnog*)pvParam)->len[i]+((mnog*)pvParam)->len2[i];

//sprintf(buf,"Slojenie = %d",sym);

sprintf(str," %d ",res[i]);

strcat(buf,str);

}

hdc=GetDC(((mnog*)pvParam)->hWnd);

TextOut(hdc,20,30,buf,strlen(buf));

ReleaseDC(((mnog*)pvParam)->hWnd,hdc);

return 0;

}

LONG MyWinP(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)

{

static PAINTSTRUCT ps;

static HDC hdc;

static SECURITY_ATTRIBUTES sa;

static mnog par;

switch(msg)

{

case WM_CREATE:

sa.lpSecurityDescriptor=NULL;

sa.bInheritHandle=TRUE;

sa.nLength=sizeof(sa);

par.hWnd=hWnd;

par.n=4;

par.len[0]=50;

par.len[1]=25;

par.len[2]=75;

par.len[3]=100;

par.len2[0]=5;

par.len2[1]=45;

par.len2[2]=56;

par.len2[3]=13;

break;

case WM_SIZE:

break;

case WM_PAINT:

CreateThread(&sa,0,ThreadFunc,&par,0,&ID);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

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

}

return 0;

}

СУММА ВЕКТОРОВ

#include <stdio.h>

#include <windows.h>

#include <math.h>

BOOL RegClass(WNDPROC,LPCTSTR,UINT);

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

HINSTANCE hInstance;

char szClassName[]="GraphClass";

struct ThreadStr

{ HWND hwnd;

int v1[2];

int v2[2];

};

ThreadStr ts;

DWORD WINAPI ThreadFunc(PVOID); //входная функция вторичного потока

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]