- •Файл Laba12.Cpp:
- •Int winapi WinMain(hinstance hInstance,hinstance hPrevInstance,lpstr lpszCmdLine,int nCmdShow)
- •If (!RegClass(WndProc,szClassName,color_window))
- •If (!hwnd) return false;
- •Int winapi WinMain(hinstance hInstance,hinstance hPrevInstance,lpstr lpszCmdLine,int nCmdShow)
- •If (!RegClass(WndProc,szClassName,color_window))
- •If (!hwnd) return false;
- •Int winapi WinMain(hinstance hInstance,hinstance hPrevInstance,lpstr lpszCmdLine,int nCmdShow)
- •If (!RegClass(WndProc,szClassName,color_window))
- •If (!hwnd) return false;
- •If (!hThread)
Создать в приложении вторичный поток, входная функция которого рисует параллелограмм, две стороны которого параллельны оси 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); //входная функция вторичного потока