69998

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

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

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

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

Русский

2014-10-13

57 KB

5 чел.

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

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

Кафедра ЭВМ

Лабораторная работа №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-приложений, организацией взаимодействия программ с ОС, получил практические навыки по составлению, написанию и отладке простых программ. Ознакомился с ресурсами как средством создания визуального интерфейса и задания параметров и характеристик программного приложения.


 

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

75960. Становление современного российского парламентаризма. Думские выборы 1993 и 1995 годов: сравнительный анализ 22.11 KB
  Утвердившийся в 1917 году коммунистический строй на 70 лет прервал формирование в нашей стране демократических институтов, пресек развитие парламентаризма. И все же ростки политической демократии и парламентаризма не были полностью искоренены...
75961. Формирование «олигархических групп», эволюция их отношений с государством в России 26.8 KB
  Сейчас он означает небольшую группу финансовых магнатов Большую Восьмерку или Семь Банковских Баронов состоящих в тесных отношениях с президентом и правительством и оказывающих на них влияние. За термином олигархия скрывается некоторая неловкость реальной ситуации: доминирующее положение небольшого числа финансовых групп благодаря симбиозным отношениям с администрацией президента. Рассматривая политическую роль финансовых групп в ельцинской системе и фазы их развития можно отметить что изза слабости органов представительной власти и...
75962. Характерные черты становления рыночной экономики в РФ 19.88 KB
  Черты становления рыночной экономики в России: отечественный экономист А. Смирнов на долю частной собственности в экономике России в 1914 г. В России даже в период промышленного подъема 1909 1913 гг. Значительно выросла доля России в мировом промышленном производстве накануне Первой мировой войны она занимала пятое место в мире после США Германии Англии Франции.
75963. Эволюция партийно-политической системы РФ в начале 21 века 18.23 KB
  Резкий рост численности партий. При этом реальное влияние на политический процесс, включая законотворческую деятельность, оказывали не более пяти-шести партий. Как показала практика избирательных кампаний, многие партии изначально создавались для сугубо политтехнологических целей
75964. Беловежские соглашения - исторический смысл и дискуссионные проблемы 19.6 KB
  БЕЛОВЕ́ЖСКИЕ СОГЛАШЕ́НИЯ термин используемый для обозначения соглашения подписанные 8 декабря 1991 высшими руководителями России Белоруссии и Украины о роспуске СССР и образовании Содружества независимых государств СНГ. Смысл: После попытки ГКЧП в августе 1991 реальная власть перешла в руки республиканских правящих элит и президент СССР М. а 5 декабря Кравчук объявил что Украина денонсирует договор 1922 о создании СССР. Тогда Кравчук Ельцин и Шушкевич собрались в Беловежской пуще для решения вопроса о сохранении СССР.
75965. Декларация о государственном суверенитете РСФСР - условия принятия и исторический смысл 17.91 KB
  Декларация о государственном суверенитете РСФСР политикоправовой акт ознаменовавший начало конституционной реформы в РСФСР где суверенитет рассматривается как естественное и необходимое условие существования российской государственности. Условия: Декларация была принята Первым Съездом народных депутатов РСФСР 12 июня 1990 года и подписана Председателем Верховного Совета РСФСР Б. Значение исторический смысл: Помимо провозглашения суверенитета РСФСР и намерения создать демократическое правовое государство в составе обновлённого Союза...
75966. Шоковая терапия и ее исторические последствия 53 KB
  Шоковая терапия - пропагандистское (газетное) название, с легкой руки некоторых публицистов приклеившееся к политике, которую начало проводить, придя к власти, реформаторское правительство Ельцина-Гайдара – политике стабилизации экономики. (попытка России перейти к Рыночной Экономике)
75967. Норманская и антинорманская теории: дискуссия закончена 15.84 KB
  Норманская теория происхождения древнерусского государства: это направление в историографии которое склоняется к тому что варяги и скандинавы норманы стали основателями Киевской Руси то есть первого восточнославянского государства основоположники Бейер и Миллер. Ломоносов подверг уничтожающей критике все основные положения этой антинаучной концепции генезиса Древней Руси. Оно могло происходить не только вследствие тесного общения скандинавов и славян но просто по тому что все первые князья на Руси а значит законная власть...
75968. Русь и Византия. Русь и Степь: система взаимовлияний и неоднозначность трактовок 17.05 KB
  Русь и Степь: система взаимовлияний и неоднозначность трактовок Направления византийского влияния: Византия помогала Руси стать православным государством. Принятие на Руси христианства резко усилило влияние византийской культуры. Крещение Руси по православному обряду ввело киевского князя в круг европейских монархов и позволило использовать типичный для Средневековья способ закрепления дип. Крещение Руси также дало нам славянскую азбуку и приобщило к европейской культурной традиции.