GeoSELECT.ru



Программирование / Реферат: Вывод информации (Программирование)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Вывод информации (Программирование)


Устройство вывода информации


Мониторы.
Монитор (дисплей) компьютера предназначен для вывода на экран текстовой и
графической информации.
Размер экрана.
Основным потребительским параметром монитора является размер экрана по
диагонали. Он измеряется в дюймах. Основные размеры: 14, 15, 17, 19, 21.
Полоса пропускания.
Для качественного отображения текста требуется высокая четкость. Для этого
в мониторах применяют схемы тракта видеосигнала с гораздо более широкой,
чем у телевизора, полосой пропускания (bandwith).Чем меньше размер элемента
изображения, тем большая частота нужна для его четкого воспроизведения на
экране. В телевидении полоса сигнала ограничена 6,5 МГц, иначе в телеэфире
не разместилось бы столько телеканалов. Поскольку картинка на монитор
передается по кабелю, то здесь такого ограничения нет, и все зависит только
от схемотехнического решения монитора. Современный монитор должен иметь
полосу пропускания видеосигнала шириной 85-100 МГц для 15-дюймовых моделей,
110-150 МГц для 17-дюймовых и более 200 МГц для моделей больших размеров.
Чем больше полоса пропускания, тем большую частоту обновления сможет
поддержать монитор для заданного разрешения.
«Зернистость» экрана.
Когда необходимая полоса пропускания обеспечена и сигнал с четкими мелкими
деталями попадает на электронно-лучевую трубку, мы упираемся в другой
параметр монитора – так называемый «шаг маски», или, по-простому, «зерно».
Дело в том, что в цветных телевизорах и мониторах экран (изнутри) покрыт
мельчайшими частицами люминофора трех цветов – красного, зеленого и синего
свечения. Три расположенных рядом частицы образуют триаду. Если рассмотреть
в лупу экран, светящийся белым светом, мы увидим, что на самом деле
светятся частицы трех цветов, которые сливаются в белый цвет. Все остальные
цвета получаются, если элементы триады светятся с разной интенсивностью,
например, если светятся только красный и зеленый элементы триады, то мы
видим желтый цвет. Для управления свечением отдельных элементов триады
используются три электронных луча, обегающие все триады экрана с частотой
развертки. Чтобы каждый луч попадал точно на свой элемент триады, над
люминофорным покрытием экрана помещается специальная маска (сетка), попадая
на которую луч отклоняется точно на свой элемент триады.
В результате мы видим, что экран цветного монитора, в отличие от
монохромного, где покрытие люминофором сплошное и однородное, имеет
зернистую структуру. Понятно, что чем меньше размер этих «зерен», тем
большую четкость обеспечит трубка.

Первые цветные мониторы имели размер «зерна» - 0,42 мм. С появлением
графических режимов высокого разрешения использовать такие мониторы стало
невозможно: мелкие детали, например тонкие вертикальные полосы, стали
рябить и переливаться всеми цветами радуги. Позже появились трубки с
«зерном» 0,31 мм, а затем и 0,28 мм. Сегодня самое распространенное
значение – 0,27 мм, но в более дорогих моделях применяют трубки с еще
меньшей зернистостью – 0,26-0,24 мм.

Современные кинескопы по форме экрана делятся на три типа: сферический,
цилиндрический и плоский.
У сферических экранов поверхность выпуклая и все пиксели (точки) находятся
на равном расстоянии от электронной пушки.
Цилиндрический экран представляет собой сектор цилиндра: плоский по
вертикали и закругленный по горизонтали. Преимущество экрана – большая
яркость по сравнению с обычным плоскими экранами мониторов и меньшее
количество бликов на экране
Плоские экраны ( Flat Sguare Tube) наиболее перспективны. Устанавливаются в
самых совершенных моделях мониторов.

Сферический экран
Цилиндрический экран



Плоский экран



Экранное покрытие
Важным параметром кинескопа являются отражающие и защитные свойства его
поверхности. Если поверхность экрана никак не обработана, то он будет
отражать все предметы, находящиеся за спиной пользователя, а также его
самого. Кроме того, поток вторичного излучения, возникающий при попадании
электронов на люминофор, может негативно влиять на здоровье человека.
Наиболее распространенным и доступным видом антибликовой обработки экрана
является покрытие диоксидом кремния. Это химическое соединение внедряется
в поверхность экрана тонким слоем. Некоторые изготовители кинескопов
добавляют в покрытие также химические соединения, выполняющие функции
антистатиков. В наиболее передовых способах обработки экрана для улучшения
качества изображения используются многослойные покрытия из различных видов
химических соединений.
Мониторы по схеме изображения, делятся на два типа:
- на основе электронно-лучевой трубке (ЭЛТ, или CRT)
- на основе жидких кристаллов (ЖК-панель, LCD-панель).
Безопасность монитора.
Наиболее вредными для здоровья являются ЭЛТ-мониторы. Прежде всего, за счет
рентгеновского излучения, возникающего из-за торможения электронов в
трубке, и паразитного ультрафиолетового излучения монитора. К тому же на
глазах человека отрицательно сказывается неравномерная яркость экрана,
нечеткость изображения и выпуклость экрана.
В связи с этим стали выпускать мониторы, поддерживающие различные
эргономические стандарты: ТСО 95 и ТСО 99. Мониторы (стандарт ТСО 99)
гарантируют непричинение вреда здоровью человека.


Принтеры.
Принтер (или печатающее устройство) предназначен для вывода информации на
бумагу.
Все принтеры могут выводить текстовую, а также графическую информацию
(рисунки, графики и т.д.).
Струйные принтеры.
В этих принтерах изображение формируется микрокаплями специальных чернил,
выдуваемых на бумагу с помощью сопел. Скорость печати струйных принтеров –
от 60 до 10 сек. на страницу.
Лазерные принтеры.
Обеспечивают в настоящее время наилучшее (близкое к типографскому) качество
печати. В этих принтерах для печати используется принцип ксерокопии:
изображение переносится на бумагу со специального барабана, к которому
электрически притягиваются частички краски. Отличие лазерного принтера от
обычного ксерокопировального аппарата состоит в том, что печатающий барабан
электризуется с помощью луча лазера по командам из компьютера. Скорость
печати лазерных принтеров – от 15 до 3 сек на страницу.
Существует несколько тысяч моделей принтеров, которые используются с
процессорами, такие как Epson , Hewlett Packard , Canon и т.д.

Плоттер –устройство для вывода рисунков и другой графической информации на
бумагу .Скорость печати у них ниже, чем у лазерных принтеров.
Графопостроитель - устройство для вывода чертежей на бумагу. Имеются
графопостроители, рассчитанные на размер бумаги пишущей машинки (формат
А4), а бывают графопостроители, выдающие чертежи размером 2х2м и более.







Реферат на тему: Вывод на экран текущий каталог в графическом режиме (со скролингом)

Министерство образования Российской Федерации
Институт переподготовки кадров

Уральского государственного технического университета



Кафедра микропроцессорной техники



Курсовая работа



На тему: Вывод на экран текущий каталог в графическом режиме (со
скролингом)



Руководитель В.П. Кулюкин

Студент гр.СП-923



г.Нягань
2001г.


СОДЕРЖАНИЕ

1. ВВЕДЕНИЕ 3
2. ОСНОВНАЯ ЧАСТЬ 4
3. ЗАКЛЮЧЕНИЕ 17
4. БИБЛИОГРАФИЧЕСКИЙ СПИСОК 18



Введение.

Ассемблер- один из самых старых из существующих сегодня языков
программирования.Когда-то это был самый основной язык, без которого нельзя
было заставить компьютер сделать что-либо полезное.
Постепенно ситуация менялась. Появились более удобные средства общения с
компьютером. Но в отличии от других языков ассемблер не умирал, более того
он немог этого сделать в принципе.
Если коротко, то ассемблер- это символическое представление машинного
языка. Все процессы в машине на самом низком, аппаратном уровне приводятся
в действие только командами машинногшо языка.
Отсюда понятно, что несмотря на общее название, язык Ассемблера для каждого
типа компьютера свой. Это касается и внешнего вида программ, написанных на
Ассемблере, и идей, отражением которых этот язык является.



Описание программы.

Windows-приложение на ассемблере содержит один сегмент данных .data и
один сегмент кода .code. В программе использовано 28 функций API. Параметры
этим функциям передаются через стек, результат возвращается в регистре ЕАХ.
Регистр mode1 задает модуль сегментации (flat) и стиль генерации кода при
входе в процедуры программы и выходе из них (stdcall). Модель памяти flat
обозначает плоскую модель памяти. В соответствии с этой моделью компилятор
создает программу, которая содержит 32-битовый сегмент для данных и кода
программы. Указание этой модели памяти заставляет компоновщик создать
исполняемый файл с расширением .exe. Параметр stdcall определяет порядок
передачи параметров через стек справа налево.
Директива include включае в программу файл win32.inc.
Функции Win32 API, используемые в программе должны быть объявлены с помощью
директивы extrn для того, чтобы компилятор мог сгенерировать правильный
код.
Строки 35-68 содержат описание сегмента данных, в котором определяются
переменные и экземпляры структур, используемые в программе. Для запуска
приложения под управлением Windows необходимо выполнить ряд шагов,
содержание которых заключается в вызове ряда функций Win32.API:
* Выполнение стартового кода;
* Выполнение главной функции, которая выполняет следующие действия;
. Регистрирует класс окна;
. Создает окно;
. Отображает окно;
. Запускает цикл обработки сообщений;
. Завершает цикл обработки сообщения;
* Организация обработки сообщений в оконной процедуре.
Оконная процедура определяет то, что выводится в рабочую область окна, и
то, как окну реагировать на пользовательский ввод.Создание окна выполняется
функцией Win32 API CreateWindowEx. Для этого ей нужно передать множество
параметров. Для создания окна необходимы 2 шага: сначала определение класса
окна, а лишь затем непосредственно его создание.
После выполнения функции CreateWindowExA создается окно, но это пока
произойдет только лишь внутри самой Windows, - на экране это новое окно
пока еще не отобразится. Для того чтобы созданное окно появилось на экране,
применяем функцию ShowWindowA. В качестве параметров этой функции
передается дескриптор hWnd окна, которое необходимо отобразить на экране, и
константа, задающая начальный вид окна.
Приложение может иметь несколько оконных функций. Их количество
определяется количеством классов окон, зарегестрированных в системе
функцией Register Class(Ex).
Windows требует, чтобы оконная функция сохраняла значения регистров ebi,
edi и esi ,т.к. оконная функция должна быть рекурсивной.По завершении
работы оконная функция формирует значения в регистре EAX. Если сообщение
обрабатывалось в оконной функции, то в eax необходимо поместить нулевое
значение.
Полосы прокрутки - этоэлементы управления, предназначенные для
регулирования вертикального и горизонтального положения на экране
ассоциированных с ними объектов. Разница между полосами прокрутки,
являющимися частью окна и полосами прокрутки - дочерними окнами, состоит в
том, что дочерние окна имеют встроенный клавиатурный интерфейс, позволяющий
воздействовать на полосу прокрутки с помощью клавиатуры. Сообщение
SB_LINEUP генерируется обеими полосами при щелчке на верхней или левой
стрелке, а сообщение SB_LINEDOWN - в случае нажатия нижней или правой
стрелки. Чтобы полоса прокрутки функционировала корректно необходимо
определить для нее диапозон прокрутки и задать позицию бегунка.
Встроенная полоса прокрутки, к сожалению, досталась только управлению с
помощью курсора мыши. По умолчанию для полос прокрутки, являющимися частью
окна, этот диапозон(число шагов мужду крайними позициями бегунка) определен
от 0 до 100. Для того, чтобы изменить диапозон прокрутки необходимо вызвать
функцию SetScrollRange
В Windows не смотря на то, что операции ввода осуществляемые приложением,
ограничены рабочей областью его окна, программа должна быть готова обновить
информацию в этой области по требованию системы.
В программе использован ряд функций Windows API, которые как бы являются
основными, когда речь идет об оконных процедурах (CreateWindow, ShowWindow
и др.).
Рассмотрим подробнее процедуры, которые организованы на основе стиля окна.
Краткое описание процедур:
InvalidateRect - эта функция добавляет прямоугольник к области модификации
указанных окон. Область модификации является частью области клиентского
окна, которая должна быть повторно перересована.
Параметры:
hWnd определяет окно, чья область изменилась, если этот параметр равен 0,
то Windows изменяет все окна и посылает оконной процедуре сообщение
*WM_ERASEBKGND and WM_NCPAINT*;
lpRect указатель на структуру RECT, которая содержит координаты
клиентского прямоугольника, который будет добавлен к области
модификациибласти. Если этот параметр равен ноль, то вся область клиента
добавляется к области модификации.
BErase определяет должен ли быть стерт фон в пределах области модификации.
Если этот параметр true, фон стирается при вызове BeginPaint

GetClientRect - отыскивает координаты области клиента окна. Клиентские
координаты определяют координаты верхнего левого и правого нижнего углов.
Координаты верхнего левого угла равны (0,0).
Параметры:
hWnd : определяет окно, координаты которого надо найти.
lpRect: указатель на структуру, которая получит кооридинаты.
При правильном завершении функции возвращается значение, отличное от 0.
SetScrollRange - функция устанавливает минимальное и максимальное значения
позиций для указанной полосы прокрутки. Может также использоваться для
скрытия стандартной полосы прокрутки.
Параметры :
hWnd : определяет, что это стандартное окно с полосой прокрутки или просто
полоса прокрутки, в зависимости от значения параметра nBar.
nBar: определяет полосу прокрутки. Этот параметр может принимать разные
значения. Он устанавливает диапазон управления, если полоса окно.
Устанавливает диапазон стандартной вертикальной или горизонтальной полосы
прокрутки. Определяет минимальную прокручиваемую позицию. Определяет,
должна ли быть полоса прокрутки повторно оттянута. Если истина, то да,
должна быть.

ScrollWindow - функция, которая прокручивает содержание области клиента
указанного окна.
hWnd : определяет дескриптор окна, где клиентская область должна быть
прокручена.
XAmount: определяет состав модуля для горизонтальной прокрутки.
YAmount: определяет состав модуля для вертикальной прокрутки.
lpRect: указатель на структуру RECT , определяющую часть области клиента
для прокрутки. Если этот параметр равен 0, то прокручивается вся клиентская
область
lpClipRect: указатель на структуру RECT , содержащую координаты
прямоугольника отсечения.
Если функция выполнилась правильно, то она возвращает значение, отличное от
ноля.

SetScrollPos - функция, которая устанавливает позицию бегунка в указанной
полосе прокрутки и изменяет эту позицию.
Параметры:
hWnd : идентифицирует полосу прокрутки или окно со стандартной полосой
прокрутки, в зависимости от значения параметра nBar.
nBar: определяет полосу прокрутки.
Этот параметр может принимать одно из следующих значений:
- SB_CTL - устанавливает позицию бегунка в управлении полосы прокрутки,
hWnd - дискриптор полосы прокрутки.
- SB_GORS - устанавливает позицию бегунка в стандартной горизонтальной
полосе прокрутки.
- SB_VERT - устанавливает позицию бегунка в стандартной вертикальной
полосе прокрутки.
nPos: параметр, определяющий новую позицию бегунка. Она должна быть в
пределах прокручиваемого диапазона.
bRedraw: параметр, определяющий оттянута ли повторно полоса прокрутки, для
того чтобы отобразить новую позицию бегунка. Если этот параметр истина, то
полоса прокрутки повторно оттянута.
Если функция неправильно завершена, то возвращается ноль.



1. p486 ; эта директива разрешает транслятору
; обрабатывать команды процессора i486
2. jumps ; транслятор автоматически преобразует
; команду условной передачи управления в комбинацию
; условной и безусловной команд, если условная команда в
; cилу ограниченности области своего действия не
; обеспечивает передачу управления по нужному адресу

3. model flat,STDCALL ; выбирается модель памяти для 32-
; разрядного программирования и правила
;передачи параметров функциям STDCALL,
; далее действующие по умолчанию

4. include win32.inc ; файл, содержащий описания структур
; данных и констант
5. L equ ; последовательности символов LARGE,
; являющейся именем операции,
; объявляющей следующий за ней операнд ; 32-
разрядным, присваивается имя L
6. extrn ginPaint:PROC ; описание импортируемых из
;Windows функций
7. extrn CreateWindowExA:PROC
8. extrn DefWindowProcA:PROC
9. extrn DispatchMessageA:PROC
10. extrn EndPaint:PROC
11. extrn ExitProcess:PROC
12. extrn GetMessageA:PROC
13. extrn GetModuleHandleA:PROC
14. extrn LoadCursorA:PROC
15. extrn LoadIconA:PROC
16. extrn PostQuitMessage:PROC
17. extrn RegisterClassA:PROC
18. extrn ShowWindow:PROC
19. extrn TextOutA:PROC
20. extrn UpdateWindow:PROC
21. extrn GetTextMetricsA:PROC
22. extrn SetCurrentDirectoryA:PROC
23. extrn FindFirstFileA:PROC
24. extrn FindNextFileA:PROC
25. extrn FindClose:PROC
26. extrn SetScrollPos:PROC
27. extrn InvalidateRect:PROC
28. extrn GetClientRect:PROC
29. extrn ScrollWindow:PROC
30. extrn GetDC:PROC
31. extrn ReleaseDC:PROC
32. extrn SetScrollRange:PROC
33. extrn TranslateMessage:PROC
34. .data ;предопределенное имя,
;означающее начало сегмента данных
35. hFindFile dd 0
36. newhwnd dd 0
37. wc WNDCLASS
38. qq1 db '@@@@'
39. lppaint PAINTSTRUCT
40. qq2 db '@@@@'
41. msg MSGSTRUCT
42. tm TEXTMETRIC
43. rc RECT
44. charht dd 0
45. hInst dd 0
46. fl dw 0
47. szTitleName db 'Это курсовой',0
48. szClassName db 'ASMCLASS32',0
49. Buffer db 'Помни о порядке передачи параметров функции!',0
50. buf_v db 260 dup (0)
51. num dd 0

52. ;##########################
53. lpPathName dd 0

54. szP db 0
55. w32fd WIN32_FIND_DATA
56. lpFileName dd 0
57. fn db "*.*",0
58. ;##########################
59. nVertDifference dd 0
60. nVertPosition dd 0
61. cyStep dd 0
62. nFirst dd 0
63. nLast dd 0
64. cyMax dd 0
65. cyPos dd 0
66. cory dd 5
67. count dd 0
68. py dd 0
69. .code ;предопределенное имя, означающее
;начало сегмента кода
70. start:
71. push L 0
72. call GetModuleHandleA ;возвращает базовый адрес модуля,
;указывающий, куда был отображен в адресном
; пространстве процесса EXE- или DLL файла
73. mov [hInst], eax ; результат выполнения функции
сохраняется в качестве переменной hInst

74. reg_class:
75. ;************************************************
;инициализация структуры WNDCLASS
76. mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW ; стиль класса
77. mov [wc.clsLpfnWndProc], offset WndProc ;адрес оконной процедуры

78. mov wc.clsCbClsExtra], 0 ;определяет дополнительное число
; байтов для структуры класса окна,
; которые система резервирует
;в служебной памяти для всех окон
; этого класса
79. mov [wc.clsCbWndExtra], 0 ; задает в байтах объем памяти,
; резервируемой системой в конце
; каждой такой структуры каждого окна
; данного класса

80. mov eax, [hInst]
81. mov [wc.clsHInstance], eax ; содержит базовый адрес данного
;EXE- файла, полученный с помощью
;функции GetModuleHandle

82. call LoadIconA, 0, IDI_APPLICATION ; заданная по умолчанию
; пиктограмма
83. mov [wc.clsHIcon], eax

84. call LoadCursorA, 0 ,IDC_ARROW ; стандартная стрелка курсора
85. mov [wc.clsHCursor], eax

86. mov [wc.clsHbrBackground],COLOR_WINDOW +1
87. mov dword ptr [wc.clsLpszMenuName], 0
88. mov dword ptr [wc.clsLpszClassName], offset szClassName

89. call RegisterClassA, offset wc ; регистрирует класс окна,
; атрибуты которого определены ;в
структуре WNDCLASS

90. call CreateWindowExA, 0,offset szClassName,offset szTitleName,
; создает окно, имеющее указанный тип
; и принадлежащее указанному классу
91. WS_OVERLAPPEDWINDOW OR WS_VSCROLL,CW_USEDEFAULT,
92. CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,
93. [hInst], 0

94. mov [newhwnd], eax

95. call ShowWindow, [newhwnd], SW_SHOWNORMAL ; показывает каким
; образом должно быть
; показано окно
96. call UpdateWindow, [newhwnd] ; обновляет изображение
; окна, посылая
;сообщение WM_PAINT
; оконной процедуре, если
; область модификации
; окна не пуста

97. msg_loop:
98. call GetMessageA, offset msg, 0, 0, 0 ;считывает сообщение
; очереди сообщений
; прикладной задачи
99..if eax!= 0
100. call DispatchMessageA, offset msg ; передает сообщение
; оконной процедуре
101. call TranslateMessage, offset msg
102. jmp msg_loop
103. ; .endif
104. call ExitProcess, [msg.msWPARAM] ;


105. ;*************************************************
106. ;Оконная процедура
107. ;**************************************************
108. WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,
109. wparam:DWORD, lparam:DWORD

110. LOCAL hDC:DWORD

111. cmp [wmsg], WM_DESTROY ; посылается оконной процедуре сразу
; же после закрытия окна
112. je wmdestroy
113. cmp [wmsg], WM_SIZE ; посылается оконной процедуре после того,
; как изменился размер окна
114. je wmsize
115. cmp [wmsg], WM_CREATE ; передача оконной процедуре нового
; окна после того, как окно создано,
; но прежде чем окно стало видимым

116. je wmcreate
117. cmp [wmsg],WM_PAINT ; обеспечивают перерисовку окна, когда
; часть или вся рабочая область окна
; становится недействительной
118. je wmpaint
119. cmp [wmsg],WM_VSCROLL ;
120. je wmscroll
121. jmp defwndproc

122. wmcreate:
123. call GetDC,[hwnd] ;дескриптор контекстного устройства
124. mov [hDC],eax

125. call GetTextMetricsA,[hDC],offset tm

126. mov ebx,0
127. mov bx,[tm.tmExtLeading] ; межстрочное расстояние
128. add bx,[tm.tmHeight] ;высота (добавка к координате строки)
129. mov [charht],ebx
130. call ReleaseDC,[hwnd],[hDC] ; отказ от контекстного устройства
131. mov eax, 0
132. jmp finish
133. defwndproc:
134. call DefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]
135. jmp finish


136. wmscroll:
137. call GetClientRect,[hwnd],offset rc ;определение клиентской
; области окна
138. movzx eax,[word ptr wparam] ;преобразование содержимого wparam в
; двойное слово
139. cmp eax,SB_LINEDOWN ; щелчок мыши на стрелке вниз,
; приводит к прокрутке на одну строку
; вниз
140. je sblinedown
141. cmp eax,SB_LINEUP ; щелчок мыши на стрелке вверх,
; приводит к прокрутке на одну строку
; вверх

142. je sblineup
143. cmp eax,SB_ENDSCROLL ;отпускание любого органа управления
; отпущена клавиша мыши после
; удерживания ее на полосе прокрутки
144. je bp3

145. sblinedown:
146. mov [cyStep],1 ; прибавить шаг
147. jmp endvscroll_1

148. sblineup:
149. mov [cyStep],-1
150. jmp endvscroll


151. endvscroll:

152. cmp [cyPos],0
153. je bp3
154. endvscroll_1: mov eax,[cyPos] ;посылаем позицию бегунка в
; регистр
155. add eax,[cyStep]
156. mov [cyPos],eax
157. mov eax,0
158. sbb eax,[charht] ;расчет межстрочного расстояния
159. mov ecx,[cyStep]
160. mov edx,0
161. mul ecx
162. mov ecx,eax
163. call ScrollWindow,[hwnd],0,ecx,0,0 ; определяем дескриптор окна,
; где клиентская область должна
; быть прокручена
164. call InvalidateRect,[hwnd],offset rc,TRUE ; определяем окно с
; изменившейся
; областью
165. call SetScrollPos,[hwnd],SB_VERT,[cyPos],TRUE ;установление
;позиции бегунка в
; стандартной
;вертикальной
;полосе прокрутки

166. call UpdateWindow,[hwnd] ;обновление изображения окна,
; если область не пуста

167. bp3: mov eax,0
168. jmp finish

169. wmdestroy:
170. call PostQuitMessage,0
171. mov eax, 0
172. jmp finish

173. wmsize: ;для перерисовки нового размера окна
;значение старшего слова означает высоту
; клиентской части
174. mov eax,[lparam]
175. mov cl,16
176. rcr eax,cl
177. and eax,0ffffh
178. mov dx,0
179. mov cx,word ptr [charht]
180. div cx
181. movzx ecx,ax
182. mov eax,101
183. sbb eax,ecx
184. cmp eax,0
185. ja www1
186. mov eax,0
187. www1: mov [cyMax],ecx
188. call FindFirstFileA,offset fn,offset w32fd
189. mov [hFindFile],eax
190. mov esi,1
191. s_m4:
192. call FindNextFileA,[hFindFile],offset w32fd
193. cmp eax,0
194. je s_m5
195. inc esi
196. jmp s_m4
197. s_m5: mov [nLast],esi
198. mov eax,[cyMax]
199. cmp eax,[cyPos]
200. ja www2
201. mov [cyPos],eax
202. www2: push FALSE
203. push esi
204. push L 0
205. push SB_VERT
206. push [hwnd]
207. call SetScrollRange
208. push TRUE
209. push [cyPos]
210. push SB_VERT
211. push [hwnd]
212. call SetScrollPos
213. mov eax, 0
214. jmp finish

215. wmpaint:
216. call BeginPaint,[hwnd],offset lppaint ;получили контекст
; устройства
217. mov [hDC],eax
218. mov eax,[cyPos] ; начальная позиция бегунка
219. mov ecx,[charht] ;получили координату вывода в пикселях
220. mov dx,0
221. mul cx
222. movzx ecx,ax
223. mov [cory],5 ; занесли по у -5
224. mov ecx,1 ; занесли по x -1
225. call FindFirstFileA,offset fn,offset w32fd ;отыскиваем
;первый
; файл
226. mov [hFindFile],eax
227. cmp ecx,[cyPos]
228. jne qqq1
229. mov esi,0
230. m3: mov dl,w32fd.cFileName[esi] ;отрисовка первой строки
231. cmp dl,0
232. je m2
233. mov buf_v[esi],dl
234. inc esi
235. jmp m3
236. cmp [cyPos],0 ; если не ноль, то переход на метку
; qqql
237. jne qqq1
238. m2:
239. mov [num],esi
240. call TextOutA,[hDC],5,[cory],offset buf_v,[num] ; вывод
;первого
;найденного
; файла
241. qqq1: mov ebx,1
242. m6:
243. call FindNextFileA,[hFindFile],offset w32fd ; следующий файл
244. cmp eax,0 ; проверка для
; последнего файла
245. je kon
246. mov esi,0
247. mov edi,0
248. m4: mov dl,w32fd.cFileName[edi] ; получили имя
;файла
249. cmp dl,0
250. je m5
251. mov buf_v[esi],dl
252. inc edi
253. inc esi
254. jmp m4
255. m5: cmp ebx,[cyPos]
256. jb qqq2
257. mov eax,[charht]
258. add [cory],eax
259. call TextOutA,[hDC],5,[cory],offset buf_v,esi ;вывод
;новой строки
260. qqq2: inc ebx ;счетчик строк
261. jmp m6
262. kon: call EndPaint,[hwnd],offset lppaint ;отдали
;контекст
; устройства и
;перешли в цикл
;обработки сообщений
263. mov eax,0
264. jmp finish

265. finish:
266. ret
267. WndProc endp
268. public WndProc
269. end start ; конец программы.



Заключение.


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



Библиографический список.


1. Windows 98: руководство разработчика: Пер.с англ. – К.: Издательская
группа BHV, 1999. – T.1. –672 c.
2. Зубков С.В. Asstmbler. Для DOC, Windows Unix. M.: ДМК, 1999. 640 с.
3.
-----------------------
[pic]







Новинки рефератов ::

Реферат: Философия (Философия)


Реферат: Специфика количественных и качественных методов изучения аудитории (Социология)


Реферат: Становление Норвежского менталитета (Культурология)


Реферат: Нормы и принципы международного права (Международное публичное право)


Реферат: Руджеро Леонкавалло (Искусство и культура)


Реферат: Компьютер как средство обучения (Педагогика)


Реферат: Налоговый контроль в Республике Беларусь и пути его совершенствования (Право)


Реферат: Tall Stranger (Иностранные языки)


Реферат: Система коррекционной помощи детям с отклоняющимся развитием (Педагогика)


Реферат: Вирусные и хакерские аткаи, защита от спама (Программирование)


Реферат: Исследования микромира и микрокосмоса (Физика)


Реферат: Культура Древнего Рима (Культурология)


Реферат: Основы делопроизводства (Контрольная) (Право)


Реферат: Материалы с памятью формы (Технология)


Реферат: Анализ затрат на производство (Бухгалтерский учет)


Реферат: Нитрид бора и его физико-химические свойства (Химия)


Реферат: Особенности российского федерализма (Право)


Реферат: Статья: "пойду ли я на дискотеку" (Культурология)


Реферат: Пищевые токсикоинфекции и токсикозы (Ветеринария)


Реферат: Школьник (Физкультура)



Copyright © GeoRUS, Геологические сайты альтруист