Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Середовища розробки Visual Studio .NET

Visual Studio завжди була найважливішим інструментом програміста, і Visual Studio.NET не стала виключенням. Продукт досяг нового рівня розвитку й спеціалізації. Випустивши Visual Studio.NET фірма Microsoft уперше представила загальний інтерфейс для всіх середовищ розробки. Цей розв'язок по гідності оцінили програмісти, яким раніше доводилося освоювати різні графічні інтерфейси для кожної мови.

В Visual Studio.NET збережені основні риси інтерфейсів, знайомі по попередніх версіях. Звичні елементи - це вікно Code Editing з виділеними кольором ключовими словами: вікно Design, у якому можна візуально побудувати користувацький інтерфейс додатка, переносячи маніпулятором компоненти з вікна Toolbox; знайомі вікна Solution Explorer і Class View, що відображають ієрархію файлів і класів у проекті. Object Browser показує властивості й методи об'єктів, а у вікні То Do зберігається список завдань, які мають бути виконані. В Visual Studio.NET збережені всі найважливіші функції, що забезпечили таку високу ефективність колишніх версій продукту, а завдяки численним удосконаленням, середовище розробки стало ще більш ефективним.

По-перше, змінився зовнішній вигляд середовища розробки. Після зрозумілої активації всі доступні пункти меню, що розкриваються, виділені блакитним кольором. Фахівці Microsoft постаралися більш ефективно використовувати поверхню екрана, автоматично приховуючи вікна. Наприклад, вікна Toolbox і Server Explorer за замовчуванням фіксуються й ховаються ліворуч у вікні середовища розробки. Сховане вікно можна викликати на екран, провівши маніпулятором над вертикальною лінійкою заголовка, яка залишається видимою, навіть якщо вікно заховане. Якщо відвести маніпулятор вбік, то вікно зникає з екрана. Режими вікон середовища розробки жорстко не визначені. Користувачеві надається можливість повного контролю над поведінкою вікон; їх можна зробити постійно видимими, схованими або плаваючими.

Зміни середовища розробки торкнулися не тільки можливостей редагування. Додана функція динамічної підказки Dynamic Help. Для виклику Dynamic Help потрібно помістити курсор над елементом у вікні Code Editing і вибрати пункт Dynamic Help з меню Help. Посилання на відповідні розділи Help утримуються в переміщуванім діалоговім вікні в нижньому правому куті вікна розробки. Поряд зі звичайними оперативними синтаксичними підказками є посилання на зразки програм і документацію.

Щодо зручності під час вводу програмного коду, то Visual Studio має безліч можливостей. По-перше немає необхідності вводити відступи, так як вони вводяться автоматично, тобто програміст не думає про читабельність програми, а є зайнятим тільки своєю прямою заданою. Також дуже зручною є функція випадаючого меню для методів або полів даного класу. Таким чином зменшується випадковість помилкового вводу, програміст наглядно бачить усі можливі доступні методи та поля. Це є дуже зручним при написанні об'ємних програм з великою кількістю класів, методів та змінних. Також така функція особливо допомагає новачкам, які тільки починають вивчати стандартні класи та не знають усіх методів.

Середа розробки Visual Studio.Net має широкі функції для відладки програмного продукту. Можливим є встановлення точки початку відладки, де починається по шагове виконання програми. У цей час можна спостерігати усі зміни у даних простим наведенням на них курсором миші. Якщо встановити декілька точок, то за допомогою клавіші F5 можна у будь-який момент відладки перейти на наступну, таким чином зберігши час.

Найкращою допомогою у Visual Studio.Net є наявність довідки MSDN, яка є дуже корисною та зручною, тому що пошук можна виконати, як і за назвою необхідного оператору, методу, функції, властивості, розташованих в алфавітному переліку, так і за будь-якою фразою, яка точніше вказує на поточне питання.


 

Міністерство освіти і науки, молоді та спорту України

Харківський патентно-комп’ютерний коледж

 

Лабораторна робота №2

Студента групи П-92

На тему: «Звичайне вікно»

 

Перевірила: Гордон Н. Б.

Виконав: Коваль М. В.

 

 

Харків 2013

#undef UNICODE

#include <Windows.h>

#define ID_BUTTON1 3001

#define ID_BUTTON2 3002

#define ID_BUTTON3 3003

#define ID_BUTTON4 3004

#define CM_FILE_OPEN 1001

#define CM_FILE_SAVE 1002

#define CM_FILE_QUIT 1003

#define CM_EDIT_FIND 2001

#define CM_EDIT_REPL 2002

 

//Создаем прототип функции окна

 

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

//объявляем имя программы

 

char szProgName[ ]="PG";

HINSTANCE hInstance;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

 

HWND hWnd; //идентификатор окна

MSG lpMsg;

 

WNDCLASS w; //создаем экземпляр структуры WNDCLASS и начинаем перезаполнять

 

w.lpszClassName=szProgName; //имя программы

 

w.hInstance=hInstance; //идентификатор текущего приложения

 

w.lpfnWndProc = WndProc; //указатель на функцию окна

 

w.hCursor=LoadCursor(NULL, IDC_ARROW); //загружаем курсор в виде стрелки

w.hIcon=0; //иконки у нас не будет пока

w.lpszMenuName=0; //и меню пока не будет

w.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //цвет фона окна - белый

//стиль окна - перерисовываемое по х и по у

//и не удалось зарегистрировать классе окна - виходим і Г(! Reeistei'C'lasst &w))

w.style=CS_HREDRAW|CS_VREDRAW;

w.cbClsExtra=0;

w.cbWndExtra=0;

if(!RegisterClass(&w))

return 0;

 

//Создадим окно в памяти. заполнив аргументы CreateWindow

 

hWnd = CreateWindow(szProgName, //Имя программы

"SHACKING", //Заголовок окна

WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся

100, //положение окна на эране по х

100, //по у

500, //размеры по х

400, //по v

(HWND)NULL, //идентификатор родительского окна.

(HMENU)NULL, //идентификатор меню

(HINSTANCE)hInstance, //идентификатор экземпляра программы

(HINSTANCE)NULL); //отсутствие дополнительных параметров

 

//Выводим окно из памяти на экран

 

ShowWindow(hWnd, nCmdShow);

//Обновим содержимое окна

UpdateWindow(hWnd);

//Цикл обработки еообщений

while(GetMessage(&lpMsg, NULL, 0, 0))

{ //Получаем сообщение из очереди

TranslateMessage(&lpMsg); //Преобразуем сообщения клавиш в символы

DispatchMessage(&lpMsg); //Передаем сообщение соответевующей функции окна

}

return (lpMsg.wParam);

}

 

BOOL CreateMenuItem(HMENU hMenu, char *str, UINT uIns, UINT uCom, HMENU hSubMenu, BOOL flag, UINT fType)

{

MENUITEMINFO mii;

mii.cbSize=sizeof(MENUITEMINFO);

mii.fMask=MIIM_STATE|MIIM_TYPE|MIIM_SUBMENU|MIIM_ID;

mii.fType=fType;

mii.fState=MFS_ENABLED;

mii.dwTypeData=str;

mii.cch=sizeof(str);

mii.wID=uCom;

mii.hSubMenu=hSubMenu;

return InsertMenuItem(hMenu, uIns,flag,&mii);

}

 

//Функция окна

LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam)

{

static HWND hBt1, hBt2,hBt3,hBt4, hCombo;

static HMENU hMainMenu, hFileMenu, hEditMenu;

int i=0,j=0;

HDC hdc; //создаем контекст устройства

PAINTSTRUCT ps; //создаем экземпляр структуры графического вывода

//Цикл обработки сообщения

switch(messg)

{

// сообщение рисования

//case WM_PAINT:

// //начинаем рисовать

// hdc=BeginPaint(hWnd, &ps);

// //здесь вы обычно вставляете свой текст:

// TextOut(hdc, 0,0, "CLOSE THIS WINDOW!!!!", 30);

// //обновляем окно

// ValidateRect(hWnd, NULL);

// //заканчиваем рисовать

// EndPaint(hWnd, &ps);

// break;

//сообщение выхода - разрушение окна

case WM_CREATE:

CreateWindow("button", "рамкаWS_CHILD|WS_VISIBLE|BS_GROUPBOX,

130, 75, 190, 120,

hWnd,

(HMENU)0, hInstance,NULL);

 

hBt1= CreateWindow("button", "Я", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,

150, 100, 150, 30,

hWnd,

(HMENU)ID_BUTTON1, hInstance,NULL);

hBt2= CreateWindow("button", "шш", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,

150, 140, 150, 30,

hWnd,

(HMENU)ID_BUTTON2, hInstance,NULL);

hBt3= CreateWindow("button", "лл", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,

150, 180, 150, 30,

hWnd,

(HMENU)ID_BUTTON3, hInstance,NULL);

hBt4= CreateWindow("button", "!!!", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,

150, 220, 150, 30,

hWnd,

(HMENU)ID_BUTTON4, hInstance,NULL);

hCombo = CreateWindow("combobox","combobox", WS_CHILD|WS_VISIBLE|WS_BORDER|CBS_DROPDOWN, 250, 200, 200, 200, hWnd, 0, hInstance, 0);

SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)"Первая строка");

SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)"Вторая строка");

SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)"Третяя строка");

SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)"Четвертая строка");

hMainMenu=CreateMenu();

hFileMenu=CreatePopupMenu();

i=0;

CreateMenuItem(hMainMenu,"&File",i++,0,hFileMenu,false,MFT_STRING);

CreateMenuItem(hFileMenu, "&OPEN",i++,CM_FILE_OPEN,NULL,FALSE,MFT_STRING);

CreateMenuItem(hFileMenu, "&SAVE",i++,CM_FILE_SAVE,NULL,FALSE,MFT_STRING);

SetMenu(hWnd,hMainMenu);

DrawMenuBar(hWnd);

return 0;

case WM_COMMAND:

switch (LOWORD(wParam))

{

case ID_BUTTON1:

MessageBox(hWnd, "ла", "ла", MB_OK);

SendMessage((HWND)lParam, BM_SETSTATE, true, 0L);

return 0;

case ID_BUTTON2:

MessageBox(hWnd, "ля", "ля", MB_OK);

SendMessage((HWND)lParam, BM_SETSTATE, true, 0L);

return 0;

case ID_BUTTON3:

MessageBox(hWnd, "гг", "гг", MB_OK);

SendMessage((HWND)lParam, BM_SETSTATE, true, 0L);

return 0;

case ID_BUTTON4:

MessageBox(hWnd, "лл", "лл", MB_OK);

SendMessage((HWND)lParam, BM_SETSTATE, true, 0L);

case CM_FILE_OPEN:

MessageBox(hWnd,"hello","world", MB_OK);

return 0;

 

 

}

case WM_DESTROY:

PostQuitMessage(0); break;

 

default:

return(DefWindowProc(hWnd, messg, wParam, lParam));

}

return 0;

}


 

Міністерство освіти і науки, молоді та спорту України

Харківський патентно-комп’ютерний коледж

 

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

Студента групи П-92

На тему: «GDI»

 

Перевірила: Гордон Н. Б.

Виконав: Коваль М. В.

 

Харків 2013


 

Для определения атрибутов текста и изображения, которые выводятся на экран или принтер, используется программный объект под названием «контекст устройства» (Device Context, DC). DC, как и большинство объектов GDI, инкапсулирует подробности реализации и данные в себе и к ним нельзя получить прямой доступ.

Для любого рисования нужен объект HDC (хэндл DC). При выводе на принтер HDC получается вызовом CreateDC, и на нем зовутся специальные функции для перехода на новую страницу печатаемого документа. При выводе на экран также можно использовать CreateDC, но это приведет к рисованию поверх всех окон вне их границ, потому обычно для рисования на экране используются вызовы GetDC и BeginPaint, принадлежащие уже не GDI, а USER, и возвращающие контекст, ссылающийся на регион отсечения окна.

Функционал:

· вывод одними и теми же вызовами на экран, принтер, «экран в памяти» (доступный приложению по указателю и созданный им bitmap в памяти, также возможно выделение bitmapов в памяти видеокарты — CreateCompatibleBitmap — и рисование на них, такие битовые карты не доступны по указателю, но дальнейшая перерисовка с них на физический экран происходит очень быстро без нагрузки процессора и шины, и особенно быстро в случае Remote Desktop).

· вывод в метафайл — запоминание последовательности команд рисования в файле, можно проиграть заново, векторный графический файл.wmf есть именно этот метафайл с небольшим дополнительным заголовком в начале.

· вывод текста различными шрифтами, в т. ч. TrueType и OpenType, а также шрифтами, вшитыми в принтер (при изображении документа на экране используется ближайший похожий программно реализованный шрифт). Буквы всегда заливаются одним цветом («текущий цвет»), промежутки между ними либо остаются прозрачными, либо же заливаются другим цветом («текущий цвет фона»). Не поддерживается расположение букв по кривой.

· богатый набор операций с bitmapами, включая масштабирование, автоматическое преобразование из стандартных форматов в текущий формат экрана без усилий со стороны программиста (StretchDIBits), рисование на bitmapах нескольких стандартных форматов, находящихся в памяти, и огромное количество логических операций комбинирования цветов 2 bitmapов — уже имеющегося на устройстве назначения и вновь рисуемого.

· богатый набор операций векторной графики (примерно тот же, что в PostScript, но используется другой вид сплайнов). Проводимая линия имеет атрибуты — толщину, рисунок пунктира и цвет (собраны вместе в т. н. объекте PEN) и способ сглаживания углов многоугольников. Заливка может быть одноцветной, одной из стандартных штриховок или же bitmapом 8 на 8 (эти атрибуты собраны в «объекте BRUSH»). В Windows NT также появились сплайны Безье.

· все цвета в вызовах — всегда в RGB, независимо от системы цветов текущего устройства. Исключение — отдельные пикселы внутри bitmapов, которые могут быть и в виде, определенном устройством.

· поддержка регионов отсечения и всех основных логических операций над ними. Координаты в них — 16-битные целые (что ограничивало размер экрана Windows, даже довольно поздних версий, до 32K пикселов).

· поддержка матрицы поворотов/растяжений — World Transform, не поддерживается для регионов отсечения, только для векторной графики.

Реализация

В Windows 9x и более ранних реализована в 16-битной GDI.DLL, которая в свою очередь подгружает выполненный в виде DLL драйвер видеокарты. Драйвер видеокарты первоначально и был обязан реализовать вообще все рисование, в т. ч. рисование на bitmapах в памяти в формате экрана. Позже появилась DIBENG.DLL, в которой было реализовано рисование на bitmapах стандартных форматов, драйвер был обязан пропускать в нее все вызовы, кроме тех, для которых он задействовал аппаратный ускоритель видеокарты.

Драйвер принтера подгружался таким же образом и имел тот же интерфейс «сверху», но «снизу» он вместо рисования в памяти/на аппаратуре генерировал последовательности команд принтера и отсылал их в объект Job. Эти команды как правило были либо бинарные и не читаемые человеком, либо PostScript.

В Windows NT GDI была полностью переписана с нуля заново, причем на Си++ (по слухам, у Microsoft тогда не было компилятора этого языка и они использовали cfront). API для приложений не изменился (кроме добавления кривых Безье), для драйверов — обертки на языке Си вокруг реализованных на Си++ внутренностей (вроде BRUSHOBJ_pvGetRbrush).

Сама GDI была размещена сначала в WINSRV.DLL в процессе CSRSS.EXE, начиная с NT4 — в win32k.sys. Драйверы загружались туда же. DIBENG.DLL была переписана заново и перенесена туда же как совокупность вызовов EngXxx - EngTextOut и другие. Логика взаимодействия драйвера-GDI-DIBENG осталась примерно та же.

GDI32.DLL в режиме пользователя реализована как набор специальных системных вызовов, ведущих в win32k.sys (до NT4 — как обертки вокруг вызова CsrClientCallServer, посылавшего сообщение в CSRSS.EXE).

В Windows Vista появилась модель драйверов WDDM, в которой была отменена возможность использования аппаратуры двухмерной графики. При использовании WDDM все GDI-приложения (т. е. все обычные системные части Windows UI — заголовки и рамки окон, рабочий стол, таскбар и другое) используют GDI-драйвер cdd.dll (Canonical Display Driver), который рисует на некоторых bitmapах в памяти, своих для каждого окна (содержимое окна стало запоминаться в памяти, до того Windows никогда так не делала и всегда перерисовывала окна заново, кроме неких специальных окон с флагом CS_SAVEBITS). Изображения из cdd.dll извлекаются процессом dwm.exe (Desktop Window Manager), который является Direct3D-приложением и отрисовывает «картинки окон» на физическом экране через Direct3D.

Сам же WDDM-драйвер поддерживает только DirectDraw и Direct3D и не имеет отношения ни к GDI, ни к win32k.sys, сопрягаясь с модулем dxgkrnl.sys в ядре.

 


 

Міністерство освіти і науки, молоді та спорту України

Харківський патентно-комп’ютерний коледж

 

Лабораторна робота №4

Студента групи П-92

На тему: «Робота з ресурсами»

 

Перевірила: Гордон Н. Б.

Виконав: Коваль М. В.

 

 

Харків 2013


 

#include <windows.h>

#include <commctrl.h>

#include <richedit.h>

#include "resource.h"

// Menu resources

LANGUAGE 0, SUBLANG_NEUTRAL

IDR_MENU1 MENU

{POPUP "save file"

{MENUITEM "PMENU1", IDM_PMENU1

MENUITEM SEPARATOR}

POPUP "read file"

{MENUITEM "PMENU2", IDM_PMENU2}}

LANGUAGE 0, SUBLANG_NEUTRAL

IDR_MENU2 MENU

{POPUP "text color"

{MENUITEM "PCMENU1", IDM_PCMENU1}

POPUP "text type"

{MENUITEM "PCMENU2", IDM_PCMENU2}}

// Dialog resources

LANGUAGE 0, SUBLANG_NEUTRAL

IDD_DIALOG1 DIALOG 0, 0, 186, 95

STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU

CAPTION "Dialog"

FONT 8, "Ms Shell Dlg"

{AUTOCHECKBOX "IDC_CHECKBOX1", IDC_CHECKBOX1, 7, 9, 75, 8

AUTOCHECKBOX "IDC_CHECKBOX2", IDC_CHECKBOX2, 7, 22, 75, 8

AUTOCHECKBOX "IDC_CHECKBOX3", IDC_CHECKBOX3, 7, 34, 75, 8

AUTORADIOBUTTON "IDC_RADIO1", IDC_RADIO1, 10, 51, 59, 8

AUTORADIOBUTTON "IDC_RADIO2", IDC_RADIO2, 9, 64, 59, 8

PUSHBUTTON "Жми меня", IDC_BUTTON1, 41, 76, 41, 14}

 

resource.h

#ifndef IDC_STATIC

#define IDC_STATIC (-1)

#endif

#define IDR_MENU1 100

#define IDR_MENU2 101

#define IDD_DIALOG1 102

#define IDC_CHECKBOX1 1002

#define IDC_CHECKBOX2 1003

#define IDC_CHECKBOX3 1004

#define IDC_RADIO1 1005

#define IDC_RADIO2 1006

#define IDC_BUTTON1 1007

#define IDM_PCMENU1 40000

#define IDM_PCMENU2 40001

#define IDM_PMENU1 40002

#define IDM_PMENU2 40003

 


 

Міністерство освіти і науки, молоді та спорту України

Харківський патентно-комп’ютерний коледж

 

Лабораторна робота №5

Студента групи П-92

На тему: «Діалогові вікна»

 

Перевірила: Гордон Н. Б.

Виконав: Коваль М. В.

 

 

Харків 2013


 

//создаем фреймовое окно, которое вызывает модальное

#include <windows.h>

#include "resource.h"

#include <string>

#include <algorithm>

using namespace std;

/* Declare Windows procedure */

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

LRESULT CALLBACK ModDlgProcedure (HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam);

/* Make the class name into a global variable */

char szClassName[ ] = "CodeBlocksWindowsApp";

char szWindowName[] = "Мое окошечко";

int WINAPI WinMain (HINSTANCE hThisInstance,

HINSTANCE hPrevInstance,

LPSTR lpszArgument,

int nCmdShow)

{HWND hwnd; /* This is the handle for our window */

MSG messages; /* Here messages to the application are saved */

WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */

wincl.hInstance = hThisInstance;

wincl.lpszClassName = szClassName;

wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */

wincl.style = CS_DBLCLKS; /* Catch double-clicks */

wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */

HICON hIconL = (HICON)LoadImage(hThisInstance, "Uninstall.ico", IMAGE_ICON, 0, 0,

LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_DEFAULTCOLOR);

if (hIconL==NULL)

{int dw = GetLastError();

char st[100];

itoa(dw,st,10);

MessageBox(NULL,st," ",1);

//здесь смотрим чему равно dw и идем в MSDN в статью "System Error Codes"}

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

wincl.hIconSm = hIconL; // LOADICON(NULL, IDI_APPLICATOIN);

wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

wincl.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);//NULL/* No menu */

wincl.cbClsExtra = 0; /* No extra bytes after the window class */

wincl.cbWndExtra = 0; /* structure or the window instance */

HBRUSH hbr = CreateSolidBrush(RGB(0,90,0));

/* Use Windows's default colour as the background of the window */

wincl.hbrBackground = hbr; //(HBRUSH)COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */

if (!RegisterClassEx (&wincl))

return 0;

/* The class is registered, let's create the program*/

hwnd = CreateWindowEx (

0, /* Extended possibilites for variation */

szClassName, /* Classname */

szWindowName, /* Title Text */

WS_OVERLAPPEDWINDOW, /* default window */

CW_USEDEFAULT, /* Windows decides the position */

CW_USEDEFAULT, /* where the window ends up on the screen */

544, /* The programs width */

375, /* and height in pixels */

HWND_DESKTOP, /* The window is a child-window to desktop */

NULL, /* No menu */

hThisInstance, /* Program Instance handler */

NULL /* No Window Creation data */

);

/* Make the window visible on the screen */

ShowWindow (hwnd, nCmdShow);

/* Run the message loop. It will run until GetMessage() returns 0 */

while (GetMessage (&messages, NULL, 0, 0))

{/* Translate virtual-key messages into character messages */

TranslateMessage(&messages);

/* Send message to WindowProcedure */

DispatchMessage(&messages);}

/* The program return-value is 0 - The value that PostQuitMessage() gave */

return messages.wParam;}

/* This function is called by the Windows function DispatchMessage() */

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

{HINSTANCE hInst = GetModuleHandle(NULL);

//context menu

//HFONT g_hfFont = NULL;

HMENU hMenu;

//descriptor context menu

HMENU hMenuPopup;

switch (message) /* handle the messages */

{case WM_CREATE:

{break;}

case WM_COMMAND:

{switch (wParam)

{case IDM_PMENU1: //save in file

{DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC) ModDlgProcedure);

break; }

case IDM_PMENU2: //read from file

{break;}

case IDM_PCMENU1: //change text color

{break;}

case IDM_PCMENU2: //change text-style

{break;}}

break;}

case WM_CONTEXTMENU:

{//получаем дескриптор контекстного меню

if((hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU2)))==NULL)

return 0;

//получаем дескриптор первого подменю

hMenuPopup = GetSubMenu(hMenu,0);

//отображаем контекстное меню

TrackPopupMenu(hMenuPopup, TPM_LEFTALIGN|TPM_RIGHTBUTTON, LOWORD(lParam), HIWORD(lParam), 0, hwnd,NULL);

break;}

case WM_DESTROY:

PostQuitMessage (0); /* send a WM_QUIT to the message queue */

break;

default: /* for messages that we don't deal with */

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

return 0;}

LRESULT CALLBACK ModDlgProcedure(HWND hWndDlg, UINT Msg,WPARAM wParam, LPARAM lParam)

{static char st[100]="imja ili familija";

RECT rcClient;

PAINTSTRUCT ps;

GetClientRect (hWndDlg,&rcClient);

HDC hDC;

static HBRUSH hBr;

switch (Msg)

{case WM_PAINT:

{hDC = BeginPaint (hWndDlg, &ps);

SetBkMode (hDC, TRANSPARENT);

SetTextColor(hDC, RGB(255,0,0));

DrawText(hDC, st,-1,&rcClient, DT_SINGLELINE|DT_CENTER|DT_VCENTER);

SelectObject(hDC,hBr);

Rectangle(hDC,250,100,300,400);

EndPaint(hWndDlg,&ps);

break;}

case WM_INITDIALOG:

return TRUE;

case WM_COMMAND:

switch (wParam)

{case IDC_BUTTON1:

{//проверка отмечены ли нечетные чекбоксы

if (IsDlgButtonChecked(hWndDlg,IDC_CHECKBOX1)&&IsDlgButtonChecked(hWndDlg,IDC_CHECKBOX3))

{hBr = CreateSolidBrush(RGB(0,100,0));

strcpy(st,"imja");}

else

{hBr = CreateHatchBrush(HS_FDIAGONAL,RGB(10,0,120));

strcpy(st,"familia");}

InvalidateRect(hWndDlg, &rcClient, TRUE);

string fs="holopup";

char sfs[fs.size()+1];

if (IsDlgButtonChecked(hWndDlg, IDC_RADIO1))

{reverse(fs.begin(),fs.end());

strcpy(sfs, fs.c_str());

MessageBox(NULL,"k",sfs,1);}

break;}

case IDCANCEL:

EndDialog(hWndDlg,0);

return TRUE;}

break;}

return FALSE;}

 


 

Міністерство освіти і науки, молоді та спорту України

Харківський патентно-комп’ютерний коледж

 

Лабораторна робота №6

Студента групи П-92

На тему: «Моделювання даних UML. Діаграма класів»

 

Перевірила: Гордон Н. Б.

Виконав: Коваль М. В.

 

Харків 2013

Центральное место в объектно-ориентированном программировании занимает разработка логической модели системы в виде диаграммы классов. Диаграмма классов (class diagram) служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов может отражать, в частности, различные взаимосвязи между отдельными сущностями предметной области, такими как объекты и подсистемы, а также описывать их внутреннюю структуру и типы отношений.

Диаграмма классов представляет собой граф, вершинами которого являются элементы типа «классификатор», связанные различными типами структурных отношений. Диаграмма классов может также содержать интерфейсы, пакеты, отношения и даже отдельные экземпляры, такие как объекты и связи.

 

Классы

Класс (class) в языке UML служит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами других классов. Графически класс изображается в виде прямоугольника, который дополнительно может быть разделен горизонтальными линиями на разделы или секции. В этих разделах могут указываться имя класса, атрибуты (переменные) и операции (методы).

Имя класса должно быть уникальным в пределах пакета, который описывается некоторой совокупностью диаграмм классов или одной диаграммой. Оно указывается в первой верхней секции прямоугольника. В дополнение к общему правилу наименования элементов языка UML, имя класса записывается по центру секции имени полужирным шрифтом и должно начинаться с заглавной буквы. Рекомендуется в качестве имен классов использовать существительные, записанные без пробелов. Имена классов образуют словарь предметной области.

В первой секции обозначения класса могут находиться ссылки на стандартные шаблоны или абстрактные классы, от которых образован данный класс и от которых он наследует свойства и методы. Дополнительно в этой секции может приводиться информация о разработчике данного класса и статусе состояния разработки, а также записываться и другие общие свойства этого класса, имеющие отношение к другим классам диаграммы или стандартным элементам языка UML.

Именами классов могут быть такие существительные, как «Сотрудник», «Компания, «Руководитель», «Клиент», «Продавец», «Менеджер», «Офис» и другие, имеющие непосредственное отношение к моделируемой предметной области и функциональному назначению проектируемой системы.

Класс может не иметь экземпляров или объектов. В этом случае он называется абстрактным классом, а для обозначения его имени используется курсив. В языке UML принято общее соглашение о том, что любой текст, относящийся к абстрактному элементу, записывается курсивом. Данное обстоятельство является семантическим аспектом описания соответствующих элементов языка UML.

Если необходимо явно указать к какому пакету относится тот или иной класс, то используется символ разделитель двойное двоеточие «::». Синтаксис строки имени класса в этом случае будет следующий: <Имя_пакета>::<Имя_класса>. Например, если определен пакет с именем «Банк», то класс «Счет» в этом банке может быть записан в виде: «Банк::Счет».

Атрибуты класса или свойства записываются во второй сверху секции прямоугольника класса. В языке UML каждому атрибуту класса соответствует отдельная строка текста, которая состоит из квантора видимости атрибута, имени атрибута, его кратности, типа значений атрибута и, возможно, его исходного значения:

<квантор видимости><имя атрибута>[кратность]:

<тип атрибута> = <исходное значение>{строка-свойство}

Квантор видимости может принимать одно из трех возможных значений и отображается при помощи соответствующих специальных символов:

· «+» обозначает атрибут с областью видимости типа общедоступный (public). Атрибут с этой областью видимости доступен или виден из любого другого класса пакета, в котором определена диаграмма;

· «#» обозначает атрибут с областью видимости типа защищенный (protected). Атрибут с этой областью видимости недоступен или невиден для всех классов, за исключением подклассов данного класса;

· «-» обозначает атрибут с областью видимости типа закрытый (private). Атрибут с этой областью видимости недоступен или невиден для всех классов без исключения.

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

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

Кратность атрибута характеризует общее количество конкретных атрибутов данного типа, входящих в состав отдельного класса. В общем случае кратность записывается в форме строки текста в квадратных скобках после имени соответствующего атрибута:

[нижняя_граница1.. верхняя_граница1, нижняя_граница2.. верхняя_грашца2,..., нuжняя_гpaнuцak.. верхняя_границаk],

где нижняя граница и верхняя граница являются положительными целыми числами, каждая пара которых служит для обозначения отдельного замкнутого интервала целых чисел. В качестве верхней границы может использоваться специальный символ «*», который означает произвольное положительное целое число.

Значения кратности следуют в возрастающем порядке без пропуска чисел, лежащих между нижней и верхней границами интервала. При этом нижние и верхние границы интервалов включаются в значения кратности. Если в качестве кратности указывается единственное число, то кратность атрибута принимается равной данному числу. Если же указывается единственный знак «*», то это означает, что кратность атрибута может быть произвольным положительным целым числом или нулем. Если кратность атрибута не указана, то по умолчанию принимается ее значение равное 1..1, то есть в точности 1.

Тип атрибута представляет собой выражение, семантика которого определяется языком спецификации соответствующей модели. В нотации UML тип атрибута иногда определяется в зависимости от языка программирования, который предполагается использовать для реализации данной модели. В простейшем случае тип атрибута указывается строкой текста, имеющей осмысленное значение в пределах пакета или модели, к которым относится рассматриваемый класс.

Можно привести следующие примеры задания имен и типов атрибутов классов:

· цвет: Соlоr - здесь «цвет» является именем атрибута, «Color» — именем типа данного атрибута. Указанная запись может определять традиционно используемую RGB-модель (красный, зеленый, синий) для представления цвета;

· имя_сотрудника [1..2]: String - здесь «имя_сотрудника» является именем атрибута, который служит для представления информации об имени, а возможно, и отчестве конкретного сотрудника. Тип атрибута «String» (Строка) указывает на тот факт, что отдельное значение имени представляет собой строку текста из одного или двух слов (например, «Кирилл» или «Александр Иванович»);

· видимость:Boolean - здесь «видимость» есть имя абстрактного атрибута (курсив здесь не случаен), который может характеризовать наличие визуального представления соответствующего класса на экране монитора. В этом случае тип «Boolean» означает, что возможными значениями данного атрибута является одно из двух логических значений: истина (true) или ложь (false). При этом значение истина может соответствовать наличию графического изображения на экране монитора, а значение ложь — его отсутствию, о чем дополнительно указывается в пояснительном тексте. Поскольку кратность атрибута видимость не указана, она принимает значение 1 по умолчанию. В этой ситуации англоязычное имя типа атрибута вполне оправдано наличием соответствующего базового типа в языках программирования. Абстрактный характер данного атрибута обозначается курсивным текстом в записи данного атрибута;

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

Исходное значение служит для задания начального значения соответствующего атрибута в момент создания отдельного экземпляра класса. Необходимо придерживаться правила принадлежности значения типу конкретного атрибута. Если исходное значение не указано, то значение соответствующего атрибута не определено на момент создания нового экземпляра класса. При необходимости, разработчик соответствующего объекта может переопределять исходное значение в процессе выполнения программы.

Примером задания исходного значения атрибута может быть следующая запись: цвет:Соlоr = (255, 0, 0) - в RGB-модели цвета это соответствует чистому красному цвету в качестве исходного значения для данного атрибута.

При задании атрибутов могут быть использованы две дополнительные синтаксические конструкции - подчеркивание строки атрибута и пояснительный текст в фигурных скобках.

Подчеркивание строки атрибута означает, что соответствующий атрибут может принимать подмножество значений из некоторой области значений атрибута, определяемой его типом. Эти значения можно рассматривать как набор однотипных записей или массив, которые в совокупности характеризуют каждый объект класса.

Например, если некоторый атрибут задан в виде «форма: Прямоугольник», то это будет означать, что все объекты данного класса могут иметь несколько различных форм, каждая из которых является прямоугольником. Другим примером может служить задание атрибута в виде «номер_счета:Integer», что может означать для объекта «Сотрудник» наличие некоторого подмножества счетов, общее количество которых заранее не фиксируется.

Строка-свойство служит для указания значений атрибута, которые не могут быть изменены в программе при работе с данным типом объектов. Фигурные скобки обозначают фиксированное значение соответствующего атрибута для класса в целом, которое должны принимать все вновь создаваемые экземпляры класса без исключения. Это значение принимается за исходное значение атрибута, которое не может быть переопределено в последующем. Отсутствие строки-свойства по умолчанию трактуется так, что значение соответствующего атрибута может быть изменено в программе. Например, строка-свойство в записи атрибута «заработная_плата:Currency = = {$500}» может служить для обозначения фиксированной заработной платы для каждого объекта класса «Сотрудник» определенной должности в некоторой организации. С другой стороны, запись данного атрибута в виде «заработная_плата: Currency = $500» означает, что при создании нового экземпляра «Сотрудник» (например, прием на работу нового сотрудника) для него устанавливается по умолчанию заработная плата в $500. Однако для отдельных сотрудников величина устанавливаемой заработной платы может быть изменена как в большую, так и в меньшую сторону, что необходимо дополнительно учесть при разработке программы.

Операции или методы класса записываются в третьей сверху секции прямоугольника. Операция (operation) представляет собой некоторый сервис, предоставляемый каждым экземпляром класса по определенному требованию. Совокупность операций характеризует функциональный аспект поведения класса. Запись операций класса в языке UML также стандартизована и подчиняется определенным синтаксическим правилам. При этом каждой операции класса соответствует отдельная строка, которая состоит из квантора видимости операции, имени операции, выражения типа возвращаемого операцией значения и, возможно, строка-свойство данной операции:

<квантор видимости><имя операции>(список параметров):

<выражение типа возвращаемого значения>{строка-свойство}

Квантор видимости, как и в случае атрибутов класса, может принимать одно из трех возможных значений и отображается соответствующими символами:

· «+» обозначает операцию с областью видимости типа общедоступный (public);

· «#» обозначает операцию с областью видимости типа защищенный (protected);

· «-» используется для обозначения операции с областью видимости типа закрытый (private).

Квантор видимости для операции может быть опущен. В этом случае его отсутствие просто означает, что видимость операции не указывается. Вместо условных графических обозначений также можно записывать соответствующее ключевое слово: public, protected, private.

Применительно к конкретным языкам программирования могут быть определены дополнительные кванторы видимости. В этом случае подобные дополнения являются расширением базовой нотации и требуют соответствующих пояснений в форме текста на естественном языке или в виде строки-свойства.

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

Список параметров является перечнем разделенных запятой формальных параметров, каждый из которых может быть представлен в следующем виде:

<вид параметра><имя параметра>:<выражение типа>=<значение параметра по умолчанию>.

Здесь «вид параметра» — есть одно из ключевых слов «in», «out» или «inout» со значением «in» по умолчанию, в случае, если вид параметра не указывается. «Имя параметра» есть идентификатор соответствующего формального параметра. «Выражение типа» является зависимой от конкретного языка программирования спецификацией типа возвращаемого значения для соответствующего формального параметра. Наконец, «значение параметра по умолчанию», в общем случае, представляет собой выражение для значения формального параметра, синтаксис которого зависит от конкретного языка программирования и подчиняется принятым в нем ограничениям.

Выражение типа возвращаемого значения также является зависимой от языка реализации спецификацией типа или типов значений параметров, которые возвращаются объектом после выполнения соответствующей операции. Двоеточие и выражение типа возвращаемого значения могут быть опущены, если операция не возвращает никакого значения. Для указания кратности возвращаемого значения данная спецификация может быть записана в виде списка отдельных выражений.

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

Операция с областью действия на весь класс показывается подчеркиванием имени и строки выражения типа. По умолчанию под областью операции понимается объект класса. В этом случае имя и строка выражения типа операции не подчеркиваются.

Операция, которая не может изменять состояние системы и, соответственно, не имеет никакого побочного эффекта, обозначается строкой-свойством «{запрос}» («{query}»).

Для повышения производительности системы одни операции могут выполняться параллельно или одновременно, а другие только последовательно. Для указания параллельности выполнения операции используется строка-свойство вида «{concurrency = имя}», где имя может принимать одно из следующих значений: последовательная (sequential), параллельная (concurrent), охраняемая (guarded). При этом придерживаются следующей семантики для данных значений:

· последовательная (sequential) - для данной операции необходимо обеспечить ее единственное выполнение в системе. Одновременное с ней выполнение других операций может привести к ошибкам или нарушениям целостности объектов класса;

· параллельная (concurrent) - данная операция может выполняться параллельно с другими операциями в системе, при этом параллельность должна поддерживаться на уровне реализации модели;

· охраняемая (guarded) - все обращения к данной операции должны быть строго упорядочены во времени с целью сохранения целостности объектов данного класса. При этом могут быть приняты дополнительные меры по контролю исключительных ситуаций на этапе ее выполнения.

 


 

Міністерство освіти і науки, молоді та спорту України

Харківський патентно-комп’ютерний коледж

 

Лабораторна робота №7

Студента групи П-92

На тему: «Складна інформаційна система»

 

Перевірила: Гордон Н. Б.

Виконав: Коваль М. В.

 

Харків 2013


 

#include <iostream>

#include "MyFunc.h"

 

 

using namespace std;

 

bool mysql_quick_execute(const char *server, const char *username, const char *password,

const char *database, const char *query, const char *error,const int errorlen)

{

int affectedRows = 0;

bool success = mysql_quick_execute(server, username, password, database, query, affectedRows, error, errorlen);

return success;

}

 

bool mysql_quick_execute(const char *server, const char *username, const char *password,

const char *database, const char *query,int&affectedRows, const char *error,const int errorlen)

{

MYSQL *mysql = 0;

bool success = false;

mysql = mysql_init((MYSQL*)0);

if(mysql_real_connect(mysql,server,username,password,database,0,NULL,0))

{

if(!mysql_real_query(mysql,query,(unsigned int)strlen(query)))

{

affectedRows = mysql_affected_rows(mysql);

success=true;

}

else

{

strcpy(error,mysql_error(mysql),errorlen-1);

error[errorlen-1]='\0';

success=false;

}

}

else

{

strncpy(error,mysql_error(mysql),errorlen-1);

error[errorlen-1]='\0';

success=false;

}

return success;

}

 

bool mysql_quick_execute(const char *server, const char *username, const char *password,

const char *database, const char *query, string&result, int&resultRows,int&resultField, const char *error,const int errorlen)

{

MYSQL *mysql = 0;

bool success = false;

result.clear();

mysql = mysql_init((MYSQL*)0);

if(mysql_real_connect(mysql,server,username,password,database,0,NULL,0))

{

if(mysql_real_query(mysql,query,(unsigned int)strlen(query))==0)

{

result=mysql_print_result(mysql,resultRows,resultField);

success=true;

}

else

{

strcpy(error,mysql_error(mysql),errorlen-1);

error[errorlen-1]='\0';

success=false;

}

mysql_close(mysql);

}

else

{

strncpy(error,mysql_error(mysql),errorlen-1);

error[errorlen-1]='\0';

success=false;

}

return success;

 

MYSQL * mysql_connect(const char server[],const char username[],const char password[],

const char database[])

{

MYSQL *mysql =0;

mysql=mysql_init((MYSQL*))0);

 

mysql_real_connect(mysgl,server,username,password,database,0,NULL,0);

 

return mysql;

}

 

void mysql_print_result(MYSQL*mysql)

{

MYSQL_RES*res;

MYSQL_FIELD*field;

MUSQL_ROW row;

int t=0;

int num_fields = 0;

int num_rows = 0;

 

printf("\n");

res = mysql_use_result(mysql);

if(res!=0)

{

num_fields=mysql_num_fields(res);

num_rows=mysql_num_rows(res);

printf("table with %i fields and %i records\n\n", num_fields, num_rows);

while((field = mysql_field(res)))

{

printf("%s", field->name);

}

printf("\n");

while((row=mysql_fetch_row(res)))

{

for(t=0;t<num_fields;t++)

{

if(row[t]!=0)

{

printf("%s",row[t]);

}

else

{

printf(" ");

}

printf("\n");

}

 

mysql_free_result(res);

}

}

 

string mysql_print_result(MYSQL *mysql,int& numRows,int& numFields)

{

string result = "";

 

try

{

 

MYSQL_RES*res;

MYSQL_ROW row;

int t=0;

 

res = mysql_use_result(mysql);

if(res!=0)

{

 

numFields=mysql_num_fields(res);

 

numRows=0;

while ((row= mysql_fetch_row(res)))

{

 

for(t=0;t<numFields;t++)

{

 

string row_t;

if(row[t]!=0)

{

row_t=row[t];

}

else

{

row_t="";

}

 

unsigned int i=0;

const string match= "";

while((i=row_t.find(match))!=string::npos){row_t.replace(i,match.length(),

"\\");}

result+="" + string(row_t);

if(t<numFields-1)

{

result+=",";

}

else

{

result+="";

}

 

}

result+=",";

numRows++;

}

 

mysql_free_result(res);

}

}

catch(...)

{

 

}

return result;

 

}

int main()

{

cout «"Hello world!" «endl;

return 0;

}

 

<== предыдущая лекция | следующая лекция ==>
Вимоги безпеки в аварійних ситуаціях | Как можно создавать огромную промзону в нарушение всех технических норм и САНпинов.


Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных