69998

СРЕДСТВА ВВОДА ИНФОРМАЦИИ

Лабораторная работа

Информатика, кибернетика и программирование

Цель: Ознакомление с устройствами, осуществляющими ввод информации в компьютер (мышь, клавиатура), их программным представлением в операционной системе, а также с программными элементами взаимодействия пользователя и ЭВМ (диалоговые окна), получение практических навыков по составлению...

Русский

2014-10-13

57 KB

6 чел.

Министерство образования и науки Украины

Харьковский Национальный Университет Радиоэлектроники

Кафедра ЭВМ

Лабораторная работа №3

Тема: «СРЕДСТВА ВВОДА ИНФОРМАЦИИ»

Выполнил:                                                                      Проверил:

ст. гр. КИ-08-4                                                                Бугрий А. Н.

Кравец Артём Валерьевич

2009

Лабораторная работа №3

Тема: «СРЕДСТВА ВВОДА ИНФОРМАЦИИ»

Цель: Ознакомление с устройствами, осуществляющими ввод информации в компьютер (мышь, клавиатура), их программным представлением в операционной системе, а также  с программными элементами взаимодействия пользователя и ЭВМ (диалоговые окна), получение практических навыков по составлению, написанию и отладке программ, осуществляющих взаимодействие ЭВМ-пользователь.

Задание:

Вариант 6

Написать программу, которая рисует непрерывную линию при передвижении мыши по окну приложения с нажатой левой кнопкой. Изображение должно обновляться по приходу события WM_PAINT.

Листинг:

#include <windows.h>         // подключение библиотеки с функциями API

#include <time.h>

HINSTANCE hInst;  // Указатель приложения

LPCTSTR szWindowClass = "Students";

LPCTSTR szTitle = "Лабораторная работа №3";

// Предварительное описание функций

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

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

// Основная программа

int APIENTRY WinMain(HINSTANCE hInstance,

                    HINSTANCE hPrevInstance,

                    LPSTR     lpCmdLine,

                    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 = (HBRUSH)GetStockObject(WHITE_BRUSH);   // ус-тановка фона

wcex.lpszMenuName = NULL;  // определение меню

wcex.lpszClassName = szWindowClass; // имя класса

wcex.hIconSm  = NULL;

return RegisterClassEx(&wcex); // регистрация класса окна

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

  HWND hWnd;

  hInst = hInstance; // сохраняет указатель приложения в переменной hInst

  hWnd=CreateWindow(szWindowClass, // имя класса окна

szTitle,   // имя приложения

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

CW_USEDEFAULT, // положение по Х

CW_USEDEFAULT,  // положение по Y

CW_USEDEFAULT,    // размер по Х

CW_USEDEFAULT,    // размер по Y

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

NULL,       // описатель меню окна

hInstance,  // указатель приложения

NULL);     // параметры создания.

  if (!hWnd) // Если окно не создалось, функция возвращает FALSE

  {

     return FALSE;

  }

  ShowWindow(hWnd, nCmdShow);  // Показать окно

  UpdateWindow(hWnd);   // Обновить окно

  return TRUE;    //Успешное завершение функции

}

 

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

{

 srand((unsigned)time(NULL));

 static HPEN hPen,hOldPen;

    static POINT pt, mas[10000];

    static HDC hdc;

    static int x, y, i=0;

 static bool temp = false, box = false;

 static COLORREF crLine;

    switch (message)

    {

    case WM_LBUTTONDOWN:

   hdc = GetDC(hwnd);

        

         x = LOWORD(lParam);

   y = HIWORD(lParam);

   MoveToEx(hdc,x,y,NULL);

 

   temp=true;

         InvalidateRect (hwnd, NULL, TRUE);

         return 0;

    case WM_MOUSEMOVE:

         if (temp)

         {

     crLine = RGB(rand()%255,rand()%255,rand()%255);

     hPen = (HPEN)CreatePen(PS_SOLID,1,crLine);

     hOldPen = (HPEN)SelectObject(hdc,hPen);

              pt.x = LOWORD (lParam);

              pt.y = HIWORD (lParam);

              LineTo   (hdc, pt.x, pt.y);

      mas[i].x = pt.x;

      mas[i].y = pt.y;

     SelectObject(hdc,hOldPen);

     DeleteObject(hPen);

        i++;

     if(i>10)

      MessageBox(NULL, "Ошибка в системе!:)", "Ошибка", MB_OK);

     

         }

         return 0;

         

    case WM_LBUTTONUP:

         temp = false;

   box = true;

ReleaseDC (hwnd, hdc) ;

         return 0;

         

    case WM_PAINT:

  if(box)

  {

    hdc = GetDC(hwnd);

          MoveToEx(hdc,x,y,NULL);

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

            LineTo(hdc, mas[j].x, mas[j].y) ;

  

       

         ReleaseDC (hwnd, hdc) ;

  }

         return 0;

              

    case WM_DESTROY:

         PostQuitMessage (0) ;

         return 0;

    }

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

}

Результат:

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


 

А также другие работы, которые могут Вас заинтересовать

74078. Право средневековой Англии 70.5 KB
  После нормандского завоевания в Англии было образовано централизованное государство с сильной королевской властью. В руках монарха были сосредоточены законодательная, судебная и военная власть. Это объясняется, прежде всего, необходимостью сплочения завоевателей для удержания в повиновении покоренного населения.
74079. Государство и право Византии 61 KB
  Государство и право Византии. Право Византии. В Византии не было определенного порядка престолонаследия. В связи с этим в Византии широко распространился институт соправителей когда император назначал соправителя своего малолетнего сына цезаря для облегчения тому борьбы за престол.
74080. Мусульманское право 57 KB
  Социальные позиции раннего ислама (ограничение ростовщичества, установление милости беднякам, освобождение рабов, честность в торговле) сделали его привлекательным для широких народных масс. Но купеческая и племенная верхушка первоначально восприняла их настороженно, если не враждебно.
74081. ВОЗНИКНОВЕНИЕ БУРЖУАЗНОГО ГОСУДАРСТВА И ПРАВА 35 KB
  В зависимости от этого решался вопрос о форме государства созданного революцией о форме права и способах его кодификации. Буржуазное право Буржуазные революции положив начало перевороту в области социальных и политических отношений привели к значительным изменениям и в области права. Традиционные отрасли цивильного и карательного права дополняются новой и обособленной отраслью регулирования организации и деятельности учреждений государственной власти.
74082. Государство и право Англии 100 KB
  Накануне революции английское общество было расколото на два основных лагеря. Сторонники короля (роялисты) – представители “старого”, феодального дворянства и англиканского духовенства были опорой абсолютизма и выступали за сохранение прежних феодальных порядков и англиканской церкви. Противники абсолютизма (новое дворянство - “джентри” и буржуазия)
74083. Государство и право США в Новое время 76 KB
  Отношения американских колоний и метрополии в XVIII в. во многом определялись политикой Англии, стремящейся превратить колонии в сырьевой придаток и рынок сбыта. Это вызвало возмущение во всех слоях общества и в 60-е – начале 70-х гг. начались массовые выступления населения колоний. Королю была направлена петиция с просьбой прекратить притеснения и не давать повода к окончательному разрыву.
74084. Государство и право Франции в Новое время 144 KB
  В условиях острого кризиса абсолютизм был вынужден пойти на созыв Генеральных штатов, не собирающихся более 150 лет. Однако с самого начала работы делегаты третьего сословия, поддержанные частью других делегатов, вступили в конфликт с королевской властью. Депутаты организовались сначала в Национальное собрание, а позднее в Учредительное собрание
74085. Государство и право Германии в Новое время 93.5 KB
  Союзный акт 1815 г. стал основой для создания нового государственного объединения – Германского союза, представлявшего собой крайне расплывчатую конфедерацию. Он включал 34 государство и четыре вольных города (Франкфурт, Гамбург, Любек и Бремен), отличающихся исключительной пестротой государственных форм: одна империя (Австрия)
74086. Организация производственного процесса. Производственный процесс и принципы его организации 841 KB
  К основным относятся процессы, связанные непосредственно с превращением предмета труда в готовую продукцию (например, переплавка руды в доменной печи и превращение ее в металл; превращение муки в тесто, затем в испеченный хлеб), т.е., это технологические процессы, в ходе которых происходят изменения геометрических форм, размеров и физико-химических свойств предметов труда. Основными называются производственные процесс