Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для 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
<< Назад В начало Далее >> |
|