加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(145)

发布时间:2020-12-15 04:59:22 所属栏目:百科 来源:网络整理
导读:前面的函数已经介绍怎么样显示一个字符串了,那么下面就来仔细地实查看怎么样实现一个字符的显示,当然这里字符的显示,只是字母的显示,没有中文显示,如果需要实现中文字符的显示,就需要修改这个函数和相应的排版函数、读取相应的字体文件。由于显示卡已

前面的函数已经介绍怎么样显示一个字符串了,那么下面就来仔细地实查看怎么样实现一个字符的显示,当然这里字符的显示,只是字母的显示,没有中文显示,如果需要实现中文字符的显示,就需要修改这个函数和相应的排版函数、读取相应的字体文件。由于显示卡已经被初始化为图形模式,那么所有字符的显示都生成图形方式来显示,文字也不例外,因此需要使用字体的点阵数据。具体实现代码如下:

#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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读