Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Вывод на екран поточного каталогу в графічному режимі (зі скроллингом)

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Полосы прокручування — этоэлементы управління, призначені для регулювання вертикального і горизонтального становища на екрані асоційованих із нею об'єктів. Різниця між смугами прокручування, можуть бути частиною вікна і смугами прокручування — дочірніми вікнами, у тому, що дочірні вікна мають вмонтований клавіатурний інтерфейс, дозволяє впливати на смугу прокручування з допомогою клавіатури… Читати ще >

Вывод на екран поточного каталогу в графічному режимі (зі скроллингом) (реферат, курсова, диплом, контрольна)

Министерство освіти Російської Федерации Институт перепідготовки кадров Уральского державного технічного университета Кафедра мікропроцесорної техники.

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

На тему: Висновок на екран поточний каталог в графічному режимі (зі скролингом).

Руководитель В. П. Кулюкин Студент гр. СП-923.

г. Нягань.

2001 г.

ВВЕДЕНИЕ

3.

ОСНОВНАЯ ЧАСТИНА 4.

ЗАКЛЮЧЕНИЕ

17.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК 18.

Ассемблеродне із найбільш старих з сьогодні мов программирования. Когда-то це був основний мову, якого не міг змусити комп’ютер зробити щось полезное.

Постепенно ситуація змінювалася. З’явилися кращі кошти спілкування з комп’ютером. Однак у відмінність з інших мов асемблер не помирав, більше він немог цього в принципе.

Если коротко, то асемблерце символічне уявлення машинного мови. Усі в машині на низькому, апаратній рівні наводяться на дію лише командами машинногшо языка.

Отсюда зрозуміло, що попри під назвою, мову Ассемблера кожному за типу комп’ютера свій. Це стосується й зовнішнього вигляду програм, написаних на Ассемблері, й ідей, відбитком яких цю мову является.

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

Windows-приложение на ассемблері містить один сегмент даних .data і тільки сегмент коду .code. У програмі використано 28 функцій АПІ. Параметри цим функцій передаються через стік, результат повертається у регістрі ЕАХ.

Регистр mode1 задає модуль сегментації (flat) і стиль генерації коду біля входу до процедури програми розвитку й виході їх (stdcall). Модель пам’яті flat позначає пласку модель пам’яті. Відповідно до цієї моделлю компілятор створює програму, що містить 32-битовый сегмент для даних, і коду програми. Вказівка цієї моделі пам’яті змушує компоновщик створити виконуваний файл з розширенням .exe. Параметр stdcall визначає порядок передачі параметрів через стік справа налево.

Директива include включае у програмі файл win32.inc.

Функции Win32 АПІ, використовувані у програмі мають оголошені з допомогою директиви extrn для здобуття права компілятор міг згенерувати правильний код.

Строки 35−68 містять опис сегмента даних, у якому визначаються перемінні і екземпляри структур, використовувані у програмі. Для запуску додатка за управлінням Windows необхідні ряд кроків, зміст яких залежить від виклик низки функцій Win32. API:

* Виконання стартового кода;

* Виконання головною функції, що виконує такі действия;

Регистрирует клас окна;

Создает окно;

Отображает окно;

Запускает цикл обробки сообщений;

Завершает цикл обробки сообщения;

* Організація обробки повідомлень в віконною процедуре.

Оконная процедура визначає те, що виводиться в робочу область вікна, і те, як вікна реагувати на користувальницький ввод. Создание вікна виконується функцією Win32 АПІ CreateWindowEx. І тому їй потрібно передати безліч параметрів. До сформування вікна необхідні 2 кроку: спочатку визначення класу вікна, а лише потім безпосередньо створення.

После виконання функції CreateWindowExA створюється вікно, але що можливе лише лише всередині самої Windows, — на це нове вікно поки що не відобразиться. Щоб створене вікно тут прийшли у екрані, застосовуємо функцію ShowWindowA. Як параметрів цієї функції передається дескриптор hWnd вікна, що слід відобразити на екрані, і константа, задающая початковий вид окна.

Приложение може мати кілька віконних функцій. Їхню кількість визначається кількістю класів вікон, зарегестрированных у системі функцією Register Class (Ex).

Windows вимагає, щоб віконна функція зберігала значення регістрів ebi, edi і esi, т.к. віконна функція мусить бути рекурсивной. По завершенні роботи віконна функція формує значення регістрі EAX. Якщо повідомлення оброблялося в віконної функції, то eax необхідно помістити нульовий значение.

Полосы прокручування — этоэлементы управління, призначені для регулювання вертикального і горизонтального становища на екрані асоційованих із нею об'єктів. Різниця між смугами прокручування, можуть бути частиною вікна і смугами прокручування — дочірніми вікнами, у тому, що дочірні вікна мають вмонтований клавіатурний інтерфейс, дозволяє впливати на смугу прокручування з допомогою клавіатури. Повідомлення SB_LINEUP генерується обома смугами при щиглику верхній чи лівої стрілці, а повідомлення SB_LINEDOWN — у разі натискання нижньої чи правої стрілки. Щоб смуга прокручування функціонувала коректно необхідно визначити нею диапозон прокручування і позицію бегунка.

Встроенная смуга прокручування, на жаль, дісталася лише управлінню з допомогою курсору миші. За умовчанням для смуг прокручування, можуть бути частиною вікна, цей диапозон (число кроків мужду крайніми позиціями бігунка) визначено від 0 до 100. А, щоб змінити диапозон прокручування необхідно викликати функцію SetScrollRange.

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

В програмі використаний ряд функцій Windows АПІ, що ніби основні, коли йдеться про віконних процедурах (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: параметр, визначальний відтягнута чи повторно смуга прокручування, щоб відобразити нову позицію бігунка. Якщо це параметр істина, то смуга прокручування повторно оттянута.

Якщо функція неправильно завершено, то повертається ноль.

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 endvscroll1.

148. sblineup:

149. mov [cyStep],-1.

150. jmp endvscroll.

151. endvscroll:

152. cmp [cyPos], 0.

153. je bp3.

154. endvscroll1: 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. divx 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 підтримують роботи з мишею, це станеться стоїть вважати серйозним недоліком. І було виконати низку дій, як додаток змогло адекватно реагувати на повідомлення, що посилаються смугами прокрутки.

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

Windows 98: керівництво розробника: Пер. с анг. — До.: Видавнича група BHV, 1999. — T.1. -672 c.

Зубков С.В. Asstmbler. Для DOC, Windows Unix. M.: ДМК, 1999. 640 с.

Показати весь текст
Заповнити форму поточною роботою