C++字模程序 串口发送

/***字模生成加通讯运行正常,需增加先发送汉字个数***/

/**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;                            //返回长度 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值