Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Контекст устройства позволяет выполнить аппаратно независимую процедуру рисования в Windows, он может использоваться для вывода графической информации на экран, принтер или в метафайл. Объект cciientDC инкапсулирует основные функции контекста устройства для работы с клиентской областью окна. Функция GetClientRect определяет координаты клиентской части окна приложения и сохраняет их в структуре RECT.
Привязка координат рисования выполняется по отношению к левому верхнему углу клиентской области, координаты которого равны (0,0). Функция TextOut записывает строку, начиная с координат, указанных первыми двумя параметрами. После такого теоретического отступления анализ программного кода в обработчике нажатия кнопки значительно упростится.

Для получения атрибутов контекста устройства и подготовки рисования в клиентской области окна используются следующие операторы:
CClientDC dc(this);
RECT rect;
GetClientRect(&rect)

Для вывода в клиентскую область окна текстового представления массива целых чисел применяется фрагмент кода:
for (int cnt = 0; cnt < sizeof(il)/4; cnt++)
{
dc.TextOut((rect.right - rect.left)/30 + cnt*45,
(rect.bottom - rect.top)/4,
itoa(il[cnt], buf, 10));
};

Преобразование элемента массива в строку выполняет функция:
itoa(il[cnt], buf, 10)
Результат выполнения процедуры maxval сохраняется в переменной ires для дальнейшего использования. Поскольку процедура возвращает указатель, то необходимо выполнить операцию разыменования при помощи оператора " * " :
int ires = *maxval(il, sizeof(il)/4);
И, наконец, вывод результата поиска на экран выполняется знакомой нам уже функцией TextOut:
dc.TextOut((rect.right - rect.left)/2 - 40,
(rect.bottom - rect.top)/2 + 30,
itoa(ires, buf,10));

Для нахождения минимального элемента в массиве целых чисел необходимо внести небольшие изменения в нашу процедуру на ассемблере (листинг 3.33).
Листинг 3.33. Ассемблерная процедура, выполняющая поиск минимального элемента массива
.386
.model flatpublic
_minval@8
.data
MinVal DD 0
. code
_minval@8 proc
push ESI
push EBP
mov EBP, ESP
mov ECX, DWORD PTR [EBP+16]
dec ECX
mov ESI, DWORD PTR [EBP+12]
mov EAX, [ESI]
next_cmp:
cmp EAX, [ESI+4]
jle go_ioop
mov EAX, [ESI+4]
go_loop:
add ESI, 4
loop next_cmp
DWORD PTR MinVal, EAX
EAX, offset MinVal
mov
mov
pop EBP
pop ESI
ret 8
_minval@8 endp
end


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru