/***字模生成加通讯运行正常,需增加先发送汉字个数***/
/**2014 6 3 18:15 PAST L665 */
#include "stdafx.h" //L681
#include "FONTADV.h"
#include "FONTADVDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/***1***本测试主要针对串口数据发送接收做检测***************/
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/***2*****************************************/
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
/***3*****************************************/
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
/***4*****************************************/
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/***5*****************************************/
CFONTADVDlg::CFONTADVDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFONTADVDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFONTADVDlg)
m_ZiInput = _T("");
m_FontHeight = _T("");
m_discode = _T("");
m_ZiInput = _T("佳");
m_market = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
/***6*****************************************/
void CFONTADVDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFONTADVDlg)
DDX_Control(pDX, IDC_EDIT5, m_Edit5);
DDX_Control(pDX, IDC_EDIT4, m_Edit4);
DDX_Control(pDX, IDC_EDIT3, m_Edit3);
DDX_Control(pDX, IDC_DISCODE, m_outcode);
DDX_Control(pDX, IDC_TIME, m_Time);
DDX_Control(pDX, IDC_SPEED, m_speed);
DDX_Control(pDX, IDC_SELECT, m_select);
DDX_Control(pDX, IDC_FONTTYPE, m_CBox);
DDX_Control(pDX, IDC_INTTXT, m_Edit);
DDX_Text(pDX, IDC_INTTXT, m_ZiInput);
DDX_CBString(pDX, IDC_FONTTYPE, m_FontHeight);
DDX_Control(pDX, IDC_MSCOMM1, m_Comm);
DDX_Text(pDX, IDC_DISCODE, m_discode);
DDX_Text(pDX, IDC_EDIT5, m_market);
//}}AFX_DATA_MAP
}
/***7*****************************************/
BEGIN_MESSAGE_MAP(CFONTADVDlg, CDialog)
//{{AFX_MSG_MAP(CFONTADVDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTCHANGE, OnButchange)
ON_BN_CLICKED(IDC_BUTOPEN, OnButopen)
ON_BN_CLICKED(IDC_BUTSEND, OnButsend)
ON_CBN_SELENDOK(IDC_FONTTYPE, OnFonttype)
ON_EN_CHANGE(IDC_INTTXT, OnChangeInttxt)
ON_CBN_SELENDOK(IDC_SELECT, OnSelect)
ON_CBN_SELENDOK(IDC_SPEED, OnSpeed)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/***8*****************************************/
BOOL CFONTADVDlg::OnInitDialog()
{
CString str;
CString temp;
str.LoadString(IDR_MAINFRAME);
SetWindowText(str);
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
GetFont()->GetLogFont(&lf);
//m_ModeCBox.SetCurSel(0); //纵向横向下拉列表框
m_CBox.SetCurSel(1);
int buff[]={-12,-16,-24,-32,-40};
lf.lfHeight=buff[m_CBox.GetCurSel()];
model=0;
m_select.SetCurSel(2); //517 add code 串口号默认值
m_speed.SetCurSel(3); //517 add code 波特率默认值
m_Time.SetCurSel(3); //523 add code 定时器默认值
m_Comm.SetInputMode(1); //输入方式为二进制方式
m_Comm.SetInBufferSize(1024); //设置输入缓冲区大小
m_Comm.SetOutBufferSize(1024); //设置输出缓冲区大小,波特率4800无校验,8个数据位,2个停止位
m_Comm.SetRThreshold(1); //串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_Comm.SetSThreshold(1); //传输缓冲区完全空时将引发一个接收数据的OnComm事件
m_Comm.SetInputLen(0); //设置当前接收区数据长度为0
m_Comm.GetInput(); //先预读缓冲区以清除残留数据
//串口号 和 波特率待编辑代码
if(!m_Comm.GetPortOpen()) //判断串口的状态,如果是关闭状态,则打开
m_Comm.SetPortOpen(TRUE); //打开串口
//m_ModeCBox.SetCurSel(0); //纵向横向下拉列表框
return TRUE; // return TRUE unless you set the focus to a control
}
/***9*****************************************/
void CFONTADVDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
/***10****************************************/
void CFONTADVDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
UpdateFont(&dc);
}
/***11****************************************/
HCURSOR CFONTADVDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/***12****************************************/
BEGIN_EVENTSINK_MAP(CFONTADVDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CFONTADVDlg)
ON_EVENT(CFONTADVDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
/***15****************************************/
void CFONTADVDlg::OnButchange()
{
// TODO: Add your control notification handler code here
UpdateData(); //更新编辑框
model=0; //定义一个内部函数变量 model 横向 纵向选择
count=0; //字数计算器等于0 初始值
CString str; //字符串对象str
CString out; //字符串对象out
CDC MemDC; //首先定义一个显示设备对象 MemDC
CBitmap MemBitmap; //定义一个位图对象 MemBitmap
CClientDC dc(this); //获取当前的绘制设备(如:窗口,打印机)句柄
MemDC.CreateCompatibleDC(NULL); //函数创建一个与应用程序当前显示器兼容的内存设备上下文环境
MemBitmap.CreateCompatibleBitmap(&dc,100,100); //创建与指定设备环境相关兼容的位图
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//在MemDC上画一个位图
HFONT hfont=::CreateFontIndirect(&lf); //创建一种在指定结构定义其特性的逻辑字体
CFont* pfont=CFont::FromHandle(hfont); //
CFont* def_font=MemDC.SelectObject(pfont); //选择新字体
int i; //
str=""; //字符串对象str
out=""; //字符串对象out
for(i=0; i<m_ZiInput.GetLength();) //获得字节数
{ //
WCHAR ch=m_ZiInput.GetAt(i++)&0xFF; //函数返回值当前索引下所对应的数组元素
if(ch>0xA0) //1010 0000 128+32=160
{ //
ch+=m_ZiInput.GetAt(i++)<<8; //当前索引下所对应的数组元素
} //
switch(model) //修改为自定义内部函数变量 model 横向 纵向选择
{ //
case 0: //
TCharToZi(&MemDC,ch,str); //
break; //
case 1: //
TCharToZiH(&MemDC,ch,str); //
break; //
} //
out+=str; //
count++;
} //
SetDlgItemText(IDC_DISCODE,out); //代码输出
UpdateData(); //更新编辑框527
MemDC.SelectObject(def_font); //
// Done with the font. Delete the font object.
::DeleteObject(hfont); //绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
m_Edit4.SetSel(0,-1); //选中代码统计编辑框内容
m_Edit4.ReplaceSel(""); //清除代码统计编辑框内容
char sPos1[10]; //定义字符串变量sPos2
itoa(count,sPos1,10); //字符串转换字数X32
m_Edit4.ReplaceSel(sPos1); //显示代码统计字符串内容
m_Edit3.SetSel(0,-1); //选中代码统计编辑框内容
m_Edit3.ReplaceSel(""); //清除代码统计编辑框内容
char sPos2[10]; //定义字符串变量sPos2
itoa(count*=32,sPos2,10); //字符串转换字数X32
m_Edit3.ReplaceSel(sPos2); //显示代码统计字符串内容
count=m_discode.GetLength(); //取代码输出编辑框字符串长度527 ADD CODE
m_Edit5.SetSel(0,-1); //选中字符输出编辑框所有内容
m_Edit5.ReplaceSel(""); //清除字符输出编辑框所有内容
char sPos[10]; //一个汉字得到96个编辑框字符长度
itoa(count,sPos,10); //十进制转换字符串
m_Edit5.ReplaceSel(sPos); //在字符输出编辑框输出
}
/***16****************************************/
void CFONTADVDlg::OnButopen()
{
// TODO: Add your control notification handler code here
if( !m_Comm.GetPortOpen())
m_Comm.SetPortOpen(TRUE);//打开串口
UpdateData(TRUE);
}
/***16****************************************/
void CFONTADVDlg::OnButsend()
{
}
/***18*选择字体高度***************************/
void CFONTADVDlg::OnFonttype()
{
// TODO: Add your control notification handler code here
// CString strSend;
// CByteArray hexdata;
// int len=Str2Hex(m_discode ,hexdata);
// m_Comm.SetOutput(COleVariant(hexdata));
}
/***19汉字输入编辑框*************************/
void CFONTADVDlg::OnChangeInttxt()
{
// TODO: Add your control notification handler code here
UpdateData(); //更新编辑框
model=0; //定义一个内部函数变量 model 横向 纵向选择
count=0; //字数计算器等于0 初始值
CString str; //字符串对象str
CString out; //字符串对象out
CDC MemDC; //首先定义一个显示设备对象 MemDC
CBitmap MemBitmap; //定义一个位图对象 MemBitmap
CClientDC dc(this); //获取当前的绘制设备(如:窗口,打印机)句柄
MemDC.CreateCompatibleDC(NULL); //函数创建一个与应用程序当前显示器兼容的内存设备上下文环境
MemBitmap.CreateCompatibleBitmap(&dc,100,100); //创建与指定设备环境相关兼容的位图
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//在MemDC上画一个位图
HFONT hfont=::CreateFontIndirect(&lf); //创建一种在指定结构定义其特性的逻辑字体
CFont* pfont=CFont::FromHandle(hfont); //
CFont* def_font=MemDC.SelectObject(pfont); //选择新字体
int i; //
str=""; //字符串对象str
out=""; //字符串对象out
for(i=0; i<m_ZiInput.GetLength();) //获得字节数
{ //
WCHAR ch=m_ZiInput.GetAt(i++)&0xFF; //函数返回值当前索引下所对应的数组元素
if(ch>0xA0) //1010 0000 128+32=160
{ //
ch+=m_ZiInput.GetAt(i++)<<8; //当前索引下所对应的数组元素
} //
out+=str; //
count++;
} //
SetDlgItemText(IDC_DISCODE,out); //代码输出
MemDC.SelectObject(def_font); //
// Done with the font. Delete the font object.
::DeleteObject(hfont); //绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
CString str_tmp;
// m_Edit4.SetSel(0,-1); //选中代码统计编辑框内容
// m_Edit4.ReplaceSel(""); //清除代码统计编辑框内容
// char sPos1[10]; //定义字符串变量sPos2
// itoa(count,sPos1,10); //字符串转换字数X32
// m_Edit4.ReplaceSel(sPos1); //显示代码统计字符串内容
str_tmp.Format(_T("已经输入%d个字,还可以输入%d个字"), count,10-count);
SetDlgItemText(IDC_STATIC_1, str_tmp);//dw_len/2,10-dw_len/2一个汉字为两个计数单位
Invalidate();
}
/***20****************************************/
void CFONTADVDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT m_input1;
COleSafeArray m_input2;
long length,i;
BYTE data[1024];
CString str;
if(m_Comm.GetCommEvent()==2) //接收缓冲区内有字符
{
m_input1=m_Comm.GetInput(); //读取缓冲区内的数据
m_input2=m_input1; //VARIANT变量转换ColeSafeArray型变量
length=m_input2.GetOneDimSize(); //确定数据长度
for(i=0;i<length;i++)
m_input2.GetElement(&i,data+i); //将数据转换为BYTE型数组
for(i=0;i<length;i++) //将数组转换为Cstring型变量
{
BYTE a=* (char *)(data+i);
str.Format("%02X ",a);
m_market+=str; //
}
}
UpdateData(FALSE); //更新编辑框内容
}
/***21****************************************/
void CFONTADVDlg::OnSelect()
{
// TODO: Add your control notification handler code here
if(m_Comm.GetPortOpen()) //
m_Comm.SetPortOpen(FALSE); //
m_Comm.SetCommPort(m_select.GetCurSel()+1); //
}
/***22****************************************/
void CFONTADVDlg::OnSpeed()
{
// TODO: Add your control notification handler code here
CString temp;
int i=m_speed.GetCurSel();
switch(i)
{
case 0:
i=1200;
break;
case 1:
i=2400;
break;
case 2:
i=4800;
break;
case 3:
i=9600;
break;
case 4:
i=19200;
break;
case 5:
i=38400;
break;
}
temp.Format("%d,n,8,1",i);
m_Comm.SetSettings(temp);
}
/***23****************************************/
void CFONTADVDlg::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
}
/***24****************************************/
void CFONTADVDlg::GetFontToFile(CDC *pDC, CArchive &ar, int width, int height)
{
int i,j;
for(i=0;i<height;i++)
{
ar<<'\t'; //水平制表(HT) (跳到下一个TAB位置)
for(j=0;j<width;j++)
{
COLORREF color=pDC->GetPixel(j+0, i+0);//518 add code
ar<<(ColorToBool(color)? '_': 'X');
if((j+1)%8==0 ) //
ar<<','; //
}
j=(j)%8;
if(j!=0)
{
for(;j<8;j++)
{
ar<<'_';
}
ar<<',';
}
ar<<'\r'<<'\n'; //\r回车(CR) ,将当前位置移到本行开头
}
ar<<'\r'<<'\n'; //\n将当前位置移到下一行开头
}
/***25****************************************/
void CFONTADVDlg::DisFont()
{
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap; //定义一个位图对象
int height=abs(lf.lfHeight);
CClientDC dc(this);
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(&dc, 100, 100);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
HFONT hfont=::CreateFontIndirect(&lf);
CFont* pfont=CFont::FromHandle(hfont);
CFont* def_font=MemDC.SelectObject(pfont);
CString str;
m_Edit.GetWindowText(str);
MemDC.FillSolidRect(0,0,height,height,RGB(255,100,100));//519
MemDC.TextOut(0,0,str,str.GetLength());
MemDC.SelectObject(def_font);
int i,j;
int x, y;
CRect rect;
GetClientRect(&rect);
y=0;
x=rect.Width()-height*10;
for(i=0; i<height;i++)
{
for(j=0;j<height;j++)
{
COLORREF color=MemDC.GetPixel(j, i);
dc.FillSolidRect(x+j*10,y,9,9,color);
}
y+=10;
}
::DeleteObject(hfont);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
/***26****************************************/
void CFONTADVDlg::UpdateFont(CDC *pDC)
{
UpdateData(TRUE); //MFC的窗口函数,用来刷新数据
CDC MemDC; //
CBitmap MemBitmap; //
int height=abs(lf.lfHeight); //获取下拉列表框内的字体
MemDC.CreateCompatibleDC(NULL); //创建一个与指定设备兼容的内存设备上下文环境(DC)
MemBitmap.CreateCompatibleBitmap(pDC,100,100); //创建与指定的设备环境相关的设备兼容的位图
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap); //选择一对象到指定的设备上下文环境中选择一对象到指定的设备上下文环境中
HFONT hfont=::CreateFontIndirect(&lf); //创建一种在指定结构定义其特性的逻辑字体
CFont* pfont=CFont::FromHandle(hfont); //new一个CWnd对象
CFont* def_font=MemDC.SelectObject(pfont); //选择一对象到指定的设备上下文环境中选择一对象到指定的设备上下文环境中
CString str; //定义一个CString类对象 str
m_Edit.GetWindowText(str); //将指定窗口的标题条文本拷贝到一个缓存区内->编辑框1
MemDC.FillSolidRect(0,0,100,100,RGB(255,0,200)); //DDX_Control(pDX, IDC_EDIT1, m_Edit);背景色
MemDC.TextOut(0,0,str,str.GetLength()); //写入一个要 取模的汉字 参数1左距2右距 获取字符串长度
MemDC.SelectObject(def_font); //选择一对象到指定的设备上下文环境中
int i,j;
int x,y;
y=0;
x=0;
for(i=0;i<height;i++)
{
for(j=0;j<height;j++)
{
COLORREF color=MemDC.GetPixel(j+0,i+0); //
pDC->FillSolidRect(x+j*10,y,9,9,color); //
}
y+=10;
}
::DeleteObject(hfont); //
MemBitmap.DeleteObject(); //
MemDC.DeleteDC();
}
/***27****************************************/
int CFONTADVDlg::ColorToBool(COLORREF color)
{
int ret;
ret=GetRValue(color)*30 + GetGValue(color)*59+GetBValue(color)*11;
ret/=100;
return ret;
}
/***28****************************************/
int CFONTADVDlg::TCharToZi(CDC *pDC, WCHAR ch, CString &str)
{
int height=16; //列表框外部变量修改为程序内部变量
int width=ch>0xA0? height: height/1; //大于0xA0 /2改/1数字全屏显示
int i=(width+7)/8 ; //
int cnt=height * i; //
BYTE *buff, *pd; //
char chBuff[4]={0}; //
int x,y; //
buff=(BYTE *)malloc(cnt); //使用malloc分配内存的首地址,然后赋值给buff
if( buff==NULL) //
return FALSE; //
pd=buff; //
ZeroMemory(buff, cnt); //ZeroMemory宏用0来填充一块内存区域
chBuff[0]=ch&0xFF; //
if(ch>0xA0) //
{ //
chBuff[1]=(ch>>8)&0xFF;
}
/**%s字符串%d十进制**\r回车将当前位置移到本文开头\n换行
将当前位置移到下一行开头,\t水平制表跳到下一个tab位置**/
//str.Format("\r\n\t/*%s%dx%d 横向取模*/\r\n\t{", chBuff, width, height);
//chBuff要转换代码的汉字
str.Format("");//注销中文显示
pDC->FillSolidRect(0,0,height+10,height+10,RGB(255,0,0));
pDC->TextOut(0,0,chBuff,2); //
TRACE("\r\n%s\r\n",chBuff); //TRACEWIN.H
for(y=0;y<height;y++) //字体高
{
for(x=0;x<width;x++) //字体宽
{
*pd<<=1; //左移一位
COLORREF color=pDC->GetPixel(x+0, y+0);
if(!ColorToBool(color)) //判断颜色
{
TRACE("%c",'X'); //输出一个字符
*pd|=0x01; //最低位相或
}
else
TRACE("%c",'_'); //
if((x+1)%8==0)
{
TRACE("%c", ','); //移动8位
pd++; //加一
}
}
x=x%8; //
if(x) //
{ //
for(;x<8;x++) //
TRACE("%c",'_'); //
TRACE("%c",','); //
*pd >>= 8-x; //
pd++; //
} //
TRACE("\r\n"); //
} //
i=0;
do
{ //
out.Format("%02X ",buff[i]); //x 必须是一个整形值以十六进制的形式返回."%02X(空格)"
int len=Str2Hex(out,data); //字符串转换十六进制2014 6 3ADD
m_Comm.SetOutput(COleVariant(data)); //发送数据2014 6 3ADD
str+=out; //
i++;
Sleep(1000);
} //
while(i<cnt-1);
out.Format("%02X ", buff[i]); //"%02X",修改"%02X ",x后一个空格每一个字后面产生一空格
int len=Str2Hex(out,data); //字符串转换十六进制2014 6 3ADD
m_Comm.SetOutput(COleVariant(data)); //发送数据2014 6 3ADD
str+=out; //
free(buff); //
return TRUE; //
}
/***29****************************************/
int CFONTADVDlg::TCharToZiH(CDC *pDC, WCHAR ch, CString &str)
{
int height=16;//lf.lfHeight = buff[m_CBox.GetCurSel()];
int width=ch>0xA0? height: height/2; //BYTE字节
int i=(height+7)/8 ; //
int cnt=width * i; //
BYTE *buff,*pd; //字节类指针
char chBuff[4]={0}; //字符数据表
int x,y,j; //
buff=(BYTE *) malloc( cnt ); //向系统申请分配指定BYTE *字节的内存空间
if(buff==NULL) //如果buff==NULL
return FALSE; //返回假
pd=buff; //
ZeroMemory(buff, cnt ); //用0来填充一块内存区域
chBuff[0]=ch&0xFF; //
if(ch>0xA0 ) //1010 0000
{
chBuff[1]=(ch>>8)&0xFF; //
}
/**%s字符串%d十进制**\r回车将当前位置移到本文开头\n换行
将当前位置移到下一行开头,\t水平制表跳到下一个tab位置
Format是CString类的一个成员函数,它通过格式操作使任意
类型的数据转换成一个字符串。 FillSolidRect调用该成员
函数具有指定的纯色填充给定矩形的函数 **/
str.Format("\r\n\t/*%s%dx%d 纵向取模*/\r\n{\n", chBuff, width, height);
pDC->FillSolidRect(0, 0, height+10, height+10, RGB(255,0,0));
pDC->TextOut(0, 0, chBuff, 2);
for(j=0; j<height/8; j++)
{
y=j*8;
for(x=0;x<width;x++)
{
for(i=0;i<8;i++)
{
*pd<<=1;
COLORREF color = pDC->GetPixel(x+0, y+i+0);
if( !ColorToBool(color) )
{
*pd|=0x01;
}
}
pd++;
}
}
if( height % 8 )
{
y=j*8;
for(x=0;x<width;x++)
{
for(i=0;i<8;i++)
{
*pd>>=1; //<<? GetPixel检索指定坐标点像素RGB颜色值。
COLORREF color = pDC->GetPixel(x+0, y+i+0);
if( !ColorToBool(color) )
{
*pd|=0x80; //0X01?
}
}
pd++; //指针加一
}
}
CString out;
for( i=0; i<cnt-1; i++)
{
out.Format("0x%02X,", buff[i]); //格式化
str+=out;
}
out.Format("0x%02X}", buff[i]);
str+=out;
free(buff); //释放
return TRUE;
}
/***29****************************************/
char CFONTADVDlg::HexChar(char c)
{
if((c>='0')&&(c<='9'))
return c-0x30;
else if((c>='A')&&(c<='F'))
return c-'A'+10;
else if((c>='a')&&(c<='f'))
return c-'a'+10;
else return 0x10;
}
/***29****************************************/
int CFONTADVDlg::Str2Hex(CString str, CByteArray &data)
{
//将一个字符串作为十六进制串转化为一个字节数组,字节间可用空格分隔,
//返回转换后的字节数组长度,同时字节数组自动设置
int t,t1; //
int rlen=0,len=str.GetLength(); //
data.SetSize(len/2); //
for(int i=0;i<len;) //
{
char l,h=str[i]; //
if(h==' ') //
{
i++; //
continue; //
}
i++;
if(i>=len)break; //
l=str[i]; //
t=HexChar(h); //
t1=HexChar(l); //
if((t==16)||(t1==16)) //
break; //
else t=t*16+t1; //
i++; //
data[rlen]=(char)t; //
rlen++; //
} //
data.SetSize(rlen); //
return rlen; //返回长度
}