常州市润邦电子科技有限公司

热保护器测试专业供应商

 

提取Windows矢量字库的方法

Windows矢量字库有很多优点,最主要的就是无级缩放。在进行嵌入式开发时常常用到点阵字库,这时候可以从Windows矢量字库中提取,非常方便。只要你的Windows安装了某国语言,就可以方便的得到它的点阵。

具体的代码如下,调用过程 GetCurrentDC(),DrawText(),getImage()

HANDLE m_MemDC=NULL;

char *m_image[WIDTH*HEIGHT];  

HDC GetCurrentDC()
{
 HDC winDC;
 HWND hActiveWnd=::GetActiveWindow();

 ::DeleteDC(m_MemDC);
   if(hActiveWnd==INVALID_HANDLE_VALUE)
    return NULL;

   winDC=::GetWindowDC(hActiveWnd); 

   if(winDC!=NULL)
   {
    
    m_MemDC=::CreateCompatibleDC(winDC);
   
    if(m_MemDC==NULL)
    {
     AfxMessageBox("获取内存句柄失败!");
     return NULL;
    }

    SetBkColor(m_MemDC,RGB(0x0,0x0,0x0));  
   
    SetTextColor(m_MemDC,RGB(0xFF,0xFF,0xFF));   
  
    HBITMAP bitmap=CreateCompatibleBitmap(winDC,640,1024);  
    SelectObject(m_MemDC,bitmap);

   }
 return m_MemDC;
}

 

 

void DrawText(CString str,int left,int top,int FontSize)
{
 if(m_MemDC!=NULL)
 {
  LOGFONT lf;
  CFont font;
  CBrush brush(RGB(0x0,0x0,0x0));
  COLORREF cr=RGB(0xFF,0xFF,0xFF);
  CRect rect(00,00,320,FontSize);

  memset(&lf,0,sizeof(LOGFONT));
  lf.lfHeight=FontSize;
  lf.lfWeight=700;


  memcpy(lf.lfFaceName,"宋体",5);
   
  // font.CreateFont(14,0,0,0,FW_THIN,0,0,0,DEFAULT_CHARSET,0,0,0,0,"Thamo");  
  font.DeleteObject();
  BOOL b=font.CreateFontIndirect(&lf);
  HGDIOBJ      pSaveFont   =   SelectObject(m_MemDC,font);  

  ::DrawText(m_MemDC,str,strlen(str),&rect,DT_CALCRECT);

  ::DrawText(m_MemDC,str,str.GetLength(),CRect(left,top,rect.Width()+left,FontSize+top),NULL);
//::DrawText(::GetWindowDC(::GetActiveWindow()),"str",3,CRect(left,top,rect.Width()+left,FontSize+top),NULL);
  SelectObject(m_MemDC,pSaveFont);  
 }
}

char *getImage(void)

{

for(int i=0;i<WIDTH/8;i++)
  for(int j=0;j<HEIGHT;j++)
  {
   pix=0;
   for(int k=0;k<8;k++)
   {
    pix<<=1;
    if(GetPixel(m_MemDC,i*8+k,j)!=RGB(0,0,0))
     pix+=1;
   }
    m_image[i+j*width/8]=pix;
  }
}

 

 

posted on 2009-11-06 08:13  常州市润邦电子科技  阅读(1841)  评论(0编辑  收藏  举报

导航