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

17

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

Файл Laba12.Cpp:

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

float xrt,yrt,xlt,ylt,len;

};

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;

switch(msg)

{ case WM_CREATE:

ts.hwnd=hwnd;

ts.xrt=100;

ts.yrt=100;

ts.xlt=250;

ts.ylt=50;

ts.len=100;

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

if (!hThread)

MessageBox(hwnd,"Error of create hThread",NULL,MB_OK);

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;

PAINTSTRUCT ps;

COLORREF lineColor=RGB(0,255,0);

HPEN pen;

hdc=BeginPaint(pTs->hwnd,&ps);

pen=CreatePen(PS_SOLID,1,lineColor);

SelectObject(hdc,pen);

MoveToEx(hdc,pTs->xlt,pTs->ylt,NULL);

LineTo(hdc,pTs->xrt,pTs->yrt);

MoveToEx(hdc,pTs->xrt,pTs->yrt,NULL);

LineTo(hdc,pTs->xrt,pTs->yrt+pTs->len);

MoveToEx(hdc,pTs->xrt,pTs->yrt+pTs->len,NULL);

LineTo(hdc,pTs->xlt,pTs->ylt+pTs->len);

MoveToEx(hdc,pTs->xlt,pTs->ylt+pTs->len,NULL);

LineTo(hdc,pTs->xlt,pTs->ylt);

DeleteObject(pen);

EndPaint(pTs->hwnd,&ps);

return 0;

}

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

#include <stdio.h>

#include <windows.h>

#include <string.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 n;//=10;

float a[10];

float c;

};

ThreadStr ts;

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

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