Example: Writing Text Colors

To demonstrate the use of colors and attributes, the WriteColors.asm program creates an array of characters and an array of attributes, one for each character. It calls WriteConsoleOutputAttribute to copy the attributes to the screen buffer and WriteConsoleOutputCharacter to copy the characters

to the same screen buffer cells:

TITLE Writing Text Colors (WriteColors.asm)
INCLUDE Irvine32.inc
.data
outHandle HANDLE ?
cellsWritten DWORD ?
xyPos COORD <10,2>
; Array of character codes:
buffer BYTE 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
BYTE 16,17,18,19,20
BufSize DWORD ($-buffer)
; Array of attributes:
attributes WORD 0Fh,0Eh,0Dh,0Ch,0Bh,0Ah,9,8,7,6
WORD 5,4,3,2,1,0F0h,0E0h,0D0h,0C0h,0B0h
.code
main PROC
; Get the Console standard output handle:
INVOKE GetStdHandle,STD_OUTPUT_HANDLE
mov outHandle,eax
; Set the colors of adjacent cells:
INVOKE WriteConsoleOutputAttribute,
outHandle, ADDR attributes,
BufSize, xyPos, ADDR cellsWritten
; Write character codes 1 through 20:
INVOKE WriteConsoleOutputCharacter,
outHandle, ADDR buffer, BufSize,
xyPos, ADDR cellsWritten
INVOKE ExitProcess,0 ; end program
main ENDP
END main
View Code

Figure 11–3 shows a snapshot of the program’s output, in which character codes 1 through 20 are displayed as graphic characters. Each character is in a different color, although the printed page appears in grayscale.

 

posted @ 2016-10-24 16:23  dreamafar  阅读(427)  评论(0编辑  收藏  举报