отчет по СпроЛаб3
.docМинистерство образования и науки, молодежи и спорта Украины
Харьковский национальный университет радиоэлектроники
Кафедра ЭВМ
Отчет
по лабораторной работе №3
по теме: «СРЕДСТВА ВВОДА ИНФОРМАЦИИ»
Вариант №2
Выполнил: Проверил:
Ст.гр. Ки-10-2
Артемьев Даниил
Харьков 2011
1.Цель Работы;
Ознакомление с устройствами, осуществляющими ввод информации в компьютер (мышь, клавиатура), их программным представлением в операционной системе, а также с программными элементами взаимодействия пользователя и ЭВМ (диалоговые окна), получение практических навыков по составлению, написанию и отладке программ, осуществляющих взаимодействие ЭВМ-пользователь.
2.Задание;
Написать программу телетайпа, которая выводит в окно приложения символы нажатых клавиш. Место вывода текста может меняться при помощи курсора мыши.
3. Текст программы;
#include <windows.h>
#include <WindowsX.h>
const int n=50, m=100;
int Cnt=0,CntL=-1,MXY[n][3]; //хранит коор.и длину строки
char MOut[n][m]; //массив строк
HINSTANCE hInst;
LPCTSTR szWindowClass = "QWERTY";
LPCTSTR szTitle = "Программа";
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance (HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR IpCmdLine,
int nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);
if (!InitInstance(hInstance,nCmdShow))
{
return FALSE;
}
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof (WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) //Созд.Окна
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow(szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
400,
250,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow (hWnd, nCmdShow);
UpdateWindow (hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rt;
GetClientRect(hWnd, &rt);
switch (message)
{
case WM_LBUTTONDOWN: //Сообщ.наж.лев.кл.мыши
{
CntL++; //Перех.на след.строку
Cnt=0; //Обнул. длину строки
MXY[CntL][0]=GET_X_LPARAM(lParam); //Коорд.
MXY[CntL][1]=GET_Y_LPARAM(lParam); //Коорд.
break;
}
case WM_CREATE:
{
break;
}
case WM_CHAR: //сообщ.когда приходит символ
{
if(Cnt!=m)
{
MOut[CntL][Cnt]=(char)wParam; //зап.в строке символ
Cnt++;
MXY[CntL][2]=Cnt; //запис.длину в строку в МХУ
InvalidateRect(hWnd,&rt,true);
}
else
{
break;
}
}
case WM_KEYDOWN: //при наж приход.код клавиши
{
switch(wParam)
{
case VK_BACK: //Стир.символ
{
Cnt-=1;
}
}
}
case WM_PAINT: //Перерисовка всех окон
{
hdc = BeginPaint(hWnd,&ps);
for(int i=0;i<=CntL;i++)
TextOut(hdc,MXY[i][0],MXY[i][1],(char*)MOut[i],MXY[i][2]);
ValidateRect(hWnd, &rt);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY: //приходит при закр.окна
{
PostQuitMessage (0);
break;
}
default:
{
return DefWindowProc (hWnd, message, wParam, lParam); //в начало окон.процедуры
}
}
return 0;
}5. Результаты работы программы;
6.Вывод;
В данной лабораторной работе я ознакомился с устройствами, осуществляющими ввод информации в компьютер (мышь, клавиатура), их программным представлением в операционной системе, а также с программными элементами взаимодействия пользователя и ЭВМ (диалоговые окна), получил практические навыки по составлению, написанию и отладке программ.