reactos操作系统实现(145)
前面的函数已经介绍怎么样显示一个字符串了,那么下面就来仔细地实查看怎么样实现一个字符的显示,当然这里字符的显示,只是字母的显示,没有中文显示,如果需要实现中文字符的显示,就需要修改这个函数和相应的排版函数、读取相应的字体文件。由于显示卡已经被初始化为图形模式,那么所有字符的显示都生成图形方式来显示,文字也不例外,因此需要使用字体的点阵数据。具体实现代码如下: #001 VOID #002 NTAPI #003 DisplayCharacter(CHAR Character, #004 ULONG Left, #005 ULONG Top, #006 ULONG TextColor, #007 ULONG BackTextColor) #008 { #009 PUCHAR FontChar; #010 ULONG i,j,XOffset; #011
从字体数组里获取字符的图形点阵数据。 #012 /* Get the font line for this character */ #013 FontChar = &FontData[Character * 13 - Top]; #014
每字符高度为13像素. #015 /* Loop each pixel height */ #016 i = 13; #017 do #018 {
每字符的16个像素显示。 #019 /* Loop each pixel width */ #020 j = 128; #021 XOffset = Left; #022 do #023 {
检查是否需要显示这个点像素,从字体的高位开始从来第一个像素显示。 #024 /* Check if we should draw this pixel */ #025 if (FontChar[Top] & (UCHAR)j) #026 { #027 /* We do,use the given Text Color */ #028 SetPixel(XOffset,Top,(UCHAR)TextColor); #029 } #030 else if (BackTextColor < 16) #031 {
这里显示背境颜色。 #032 /* This is a background pixel. We're drawing it unless it's */ #033 /* transparent. */ #034 SetPixel(XOffset,(UCHAR)BackTextColor); #035 } #036
每次只移动一个像素。 #037 /* Increase X Offset */ #038 XOffset++; #039 } while (j >>= 1); #040 #041 /* Move to the next Y ordinate */ #042 Top++; #043 } while (--i); #044} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |