首页 点阵汉字显示软件文档

点阵汉字显示软件文档

举报
开通vip

点阵汉字显示软件文档点阵汉字显示软件文档 一、 软件需求说明 当前针式打印机采用24针进行字符打印,字符点阵采用24×24的排列方式,用72个字节来保存。将所有字符的点阵数据按一定的秩序排列在一起就形成了点阵字库。为了对字库中所保存的字模进行可视化浏览,以设计出更好的打印方式,特设计一个点阵汉字显示工具。 此工具至少需要满足以下需求: 1、 能够根据汉字的通讯码定位到相应字库中的字模位置,并能得出相对偏移量 2、 能够对字库进行分页浏览,并可以利用鼠标与键盘进行相应字符的定位 3、 对选定的字符能够进行放大显示,以更清楚地...

点阵汉字显示软件文档
点阵汉字显示软件文档 一、 软件需求说明 当前针式打印机采用24针进行字符打印,字符点阵采用24×24的排列方式,用72个字节来保存。将所有字符的点阵数据按一定的秩序排列在一起就形成了点阵字库。为了对字库中所保存的字模进行可视化浏览,以设计出更好的打印方式,特设计一个点阵汉字显示工具。 此工具至少需要满足以下需求: 1、 能够根据汉字的通讯码定位到相应字库中的字模位置,并能得出相对偏移量 2、 能够对字库进行分页浏览,并可以利用鼠标与键盘进行相应字符的定位 3、 对选定的字符能够进行放大显示,以更清楚地查看其点阵排列方式 4、 对选定的字符能够查看其16进制行列扫描方式 5、 既能对行扫描方式保存的字库正常显示,也能对列扫描方式保存的字库正常显示 二、 软件开发平台 操作系统:WinXP 开发平台:VC++6.0 三、 软件处理流程图 编码输入中文输入索引输入鼠标选择键盘选择 编码验证获取编码索引验证字符定位字符定位 编码计算索引位置计算索引 合法索引 页面定位 取消原有选定字是=当前页面,否显示新页面符 选定字符选定字符 放大显示放大显示 四、系统界面 系统界面分为三个主要部分: 1、 字库浏览区:将字库进行分页显示,每页显示为16×18个字符,提供按钮和用户输入 页数进行页面的选择,也可以用键盘控制进行页面选择,PageUp(向上翻面), PageDown(向下翻页),Home(定位首页),End(定位末页),可以用鼠标在页面上单击来 选定字符。同时系统提供行列两种扫描方式,以满足不同字库扫描方式的需求。 2、 当前选定字符浏览区:在点阵显示区将当前选定的字符进行放大显示,默认放大7倍显 示,可以通过滑块进行放大倍数选择(4~11倍),也可用小键盘上的‘+’ 与‘-’进行放大 与缩小显示,最大可以全屏显示字符的点阵排列方式。在十六进制点阵区域的两个文本 框中显示字符的十六进制行扫描方式与列扫描方式。对于点阵中每个点的图案有两种可 选的图形,圆形与方形,用户可能随时进行切换显示。 3、 用户与系统交互区:用户可以在此区域选择点阵字库和输入方式,并输入相应的内容, 系统会自动对输入内容进行验证并定位到相应页面中的字符处。提供按钮进行字符的定 位,也可以通过键盘上的上、下、左、右键来定位字符。可以随时设置字符的前景与背 景颜色,也可以重新打开新的字库文件。 五、相关类介绍 系统采用MFC中基于对话框的应用程序实现,主要包括以下四个类: CDianzhenDlg:点阵对话框类,主要功能全部在此类实现 CFullScreenDlg:用来全屏显示单个字符的点阵排列方式 CDianzhenApp:应用程序类,此类主要用来响应一些键盘按键处理 CAboutDlg:关于对话类,用来介绍软件的一些相关信息 CFullScreenDlg,CDianzhenApp,CAboutDlg这三个类相对来说比较简单,就不作详细介绍了。软件功能的主要实现函数都是在CDianzhenDlg类中完成的,所以下面着重介绍CDianzhenDlg类的相关内容。 CDianzhenDlg类是软件中最主要的类,所有的功能函数和相关变量都是在此类中定义 的,如分页显示函数,字符定位函数,字符放大显示函数,索引计算函数等。下面详细列举 出了其中的成员变量和相关函数的介绍说明: 宏定义部分: #define ROWNUM 16 /*每面每行字符数*/ #define COLNUM 18 /*每面每列字符数*/ #define PAGENUM (ROWNUM*COLNUM) /*每面总字符数*/ #define DZ_NUM 72 /*保存一个点阵字符所需要的字节数量*/ #define X_PAGE_START 35 /*整屏点阵显示的起始X座标*/ #define Y_PAGE_START 30 /*整屏点阵显示的起始Y座标*/ #define MAX_FONT 11 /*字符最大放大倍数*/ #define MIN_FONT 4 /*字符最小放大倍数*/ /*以下四个宏定义来自于打印机驱动程序中的cn_code.c*/ #define FOUR_82_2_POS (long)(4*1260+(0x0eb-0x81)*10) #define FOUR_82_3_POS (long)(FOUR_82_2_POS+90) #define FOUR_82_4_POS (long)(FOUR_82_3_POS+90) #define FOUR_END_POS (long)(FOUR_82_4_POS+90) 成员变量定义部分: CString m_fileName; //字库文件名字 FILE * m_pFile; //保存打开字库文件的文件指针 CBrush m_dotBrush; //保存用有点颜色建立的画刷 CBrush m_notDotBrush; //保存用无点颜色建立的画刷 COLORREF m_dotColor; //保存有点颜色 COLORREF m_ndotColor; //保存无点颜色 byte m_buf[DZ_NUM]; //用来保存当前所选字符的点阵数据 byte m_destBuf[DZ_NUM]; //用来保存当前所选字符行列转换后的点阵数据 byte m_bufArr[PAGENUM][DZ_NUM]; //保存一页字符 int m_dotSize; //点大小 int X_START; //显示单个点阵字符时的x座标 int Y_START; //显示单个点阵字符时的y座标 int m_maxPage; //最大页数 int m_maxIndex; //最后字符索引 int m_xpos; //用来保存当前选择字符的x座标 int m_ypos; //用来保存当前选择字符的y座标 CFullScreenDlg fsDlg; //用来全屏显示点阵字符的对话框 int m_numPage; //保存当前页码 int m_codeType; //保存当前编码类型:暂时只对gb18030码进行处理 int m_scanType; //保存当前扫描方式 CSliderCtrl m_numEnlarge; //字符显示大小控制滑块 CEdit m_dzHexH; //显示当前所选字符的16进制行扫描点阵方式 CEdit m_dzHexV; //显示当前所选字符的16进制列扫描点阵方式 int m_input; //用来保存当前所选字符索引 CString m_code; //获取用户输入 int m_inputKind; //保存输入方式 int m_numPage; //保存当前页码 int m_codeType; //保存当前编码方式 int m_scanType; //保存当前扫描方式 int m_dotType; //保存当前绘制的点的类型 函数声明部分: int getIntByChar(char c); //将0-9,A-F字符转变为相应的10进制整数 void DoPrePage(); //前一页 void DoNextPage(); //后一页 void DoFirstPage(); //首页 void DoLastPage(); //末页 void DoBtnPrevious(); //向左箭头(前一个字) void DoBtnNext(); //向右箭头(后一个字) void DoBtnUp(); //向上箭头(上一行正上方的字) void DoBtnDown(); //向下箭箭(下一行正下方的字) void DoSlidEnlarge(bool isLarge); //用'+','-'控制点字符放大与缩小所调用的函数 /***************************************************************** description:根据字符索引选择当前字符并放大显示 firstColor:字符前景颜色 secondColor:字符背景颜色 ******************************************************************/ void SelByIndex(COLORREF &firstColor,COLORREF &secondColor); /***************************************************************** description:将以字节保存的点阵字符转变为16进制的方式保存 buf:输入点阵 str:保存点阵的16进制 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 形式 ******************************************************************/ void GetStr16FromByteArr(byte buf[DZ_NUM],CString& str); /***************************************************************** description:将字符点阵扫描方式进行行列转换 srcBuf:输入点阵 destBuf:输出点阵 ******************************************************************/ void FromColtoRow(const byte *srcBuf,byte *destBuf); /***************************************************************** description:由字符索引来获取字符编码(此函数已废弃不用) index:字符索引 buf:字符编码 ******************************************************************/ void GetCodeByIndex(int index,char* buf); /***************************************************************** description:在页面上重绘一个字符 x:起始x座标 y:起始y座标 buf:存放点阵的字节数组 dc:绘图设备 len:给制点的大小 dotCol:有点的颜色 notDotCol:没有点的颜色 isDolScan:行列扫描方式 ******************************************************************/ void SmallFontDislpay(int x,int y,byte* buf,CDC *dc, int len,COLORREF& dotCol,COLORREF& notDotCol,int isColScan = 0); /***************************************************************** description:在点阵显示区打印一个字 x:起始x座标 y:起始y座标 buf:存放点阵的字节数组 dc:绘图设备 len:给制点的大小 dotBrush:有点的颜色所构建出来的画刷 noDotBrush:无点的颜色所构建出来的画刷 isDolScan:行列扫描方式 ******************************************************************/ void FontDisPlay(int x,int y,byte *buf,CDC *dc, int len,CBrush& dotBrush,CBrush& noDotBrush,int isColScan = 0); /***************************************************************** description:显示一页,此函数调用SmallFontDislpay来绘制一个个字符 x:起始x座标 y:起始y座标 buf:存放点阵的字节数组 dc:绘图设备 len:给制点的大小 dotCol:有点的颜色 notDotCo:没有点的颜色 isDolScan:行列扫描方式 ******************************************************************/ void FontArrDisPlay(int x,int y,byte bufArr[PAGENUM][DZ_NUM],CDC *dc, int len,COLORREF& dotCol,COLORREF& notDotCol,int isColScan = 0); /***************************************************************** description:根据页码显示一页,具体显示方式由FontArrDisplay来实现 pageIndex::输入页面 ******************************************************************/ void PrintPage(int pageIndex); /***************************************************************** description:在(left,top,right,bottom)所指定的区域绘制一个相应的图形 dc:绘图设备 left,top,right,bottom:指定绘制区域 dotType:绘制的图形类型 ******************************************************************/ void DrawDot(CDC *pdc,int left,int top,int right,int bottom,int dotType); /***************************************************************** description:四字节字符偏移量的计算 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 c1,c2,c3,c4:汉字的四个字节 return:字符在字库的索引位置 ******************************************************************/ unsigned short FourBytePro(unsigned short c1,unsigned short c2,unsigned short c3,unsigned short c4); //重写基类的两个虚函数,以免按下回车或ESC键程序自动退出 void OnOK(); void OnCancel(); 六、主要功能实现以及相应的代码 1、整页字符显示:每次更新页面的时候都会调用函数PrintPage(int pageIndex),它调用 FontArrDisPlay()函数读入一页字符大小,并按16×18显示在页面指定的区域,其中单个字 符的绘制由函数SmallFontDislpay完成。 //根据页面索引显示一页 void CDianzhenDlg::PrintPage(int pageIndex) { memset(m_bufArr,0,sizeof(m_bufArr)); fseek(m_pFile,DZ_NUM*pageIndex*PAGENUM,SEEK_SET); fread(m_bufArr,1,DZ_NUM*PAGENUM,m_pFile); /**************利用双缓冲技术来显示页面***************/ //创建兼容DC CDC memDC; memDC.CreateCompatibleDC(GetDC()); //设置内存绘制区域 CBitmap pageFace; pageFace.CreateCompatibleBitmap(GetDC(),ROWNUM * 25+1,COLNUM * 25+1); memDC.SelectObject(&pageFace); //在内存区域上绘制图象 FontArrDisPlay(1, 1, m_bufArr,&memDC,1,m_dotColor,m_ndotColor,m_scanType); //将内存图像拷贝到显示位置上 GetDC()->BitBlt(X_PAGE_START-6,Y_PAGE_START+4,ROWNUM*25+1,COLNUM*25+1,&memDC,0, 0,SRCCOPY); } void CDianzhenDlg::FontArrDisPlay(int x,int y,byte bufArr[PAGENUM][72],CDC *dc, int len,COLORREF& dotCol,COLORREF& notDotCol,int isColScan) { for(int i=0;i 0字 个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字 符通讯码来定位到字库中的具体字的点阵上。 对于其他类型的字库,如BIG5与UNICODE点阵字库,由于没有提供编码与索引位置的对应关系,所以现在还不能通过通讯码来定位到相应的字符上去。但是只要是24×24点阵的字库,都可以通过系统进行查看。下一步可以对这些功能进行完善。
本文档为【点阵汉字显示软件文档】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_105949
暂无简介~
格式:doc
大小:71KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-11-01
浏览量:22