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

2016-07-31СтудИзба

Описание файла

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

Онлайн просмотр документа "nata"

Текст 2 страницы из документа "nata"

; которые система резервирует

;в служебной памяти для всех окон

; этого класса

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

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее