⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winsorthzdlg.cpp

📁 汉字字模提取程序,自动生成C语言字库,自己编写的,有用的着的可以用一下,需要UCDOS的字库
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	m_targetFile.WriteString("\n};\n");
	m_targetFile.Close();
	hzkLib.Close();
	
}

void CWinSortHzDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnOK();
}

void CWinSortHzDlg::InitOutput()
{
	m_pMemDC = new CDC;
	m_pWnd = GetDlgItem(IDC_OUTPUT);
	m_pWnd->GetClientRect(&m_rect);
	m_pDC = m_pWnd->GetDC();
	m_pMemDC->CreateCompatibleDC(m_pDC);
	m_memBitmap.CreateCompatibleBitmap(m_pDC,m_rect.right,m_rect.bottom);
	m_pOldBmp = m_pMemDC->SelectObject(&m_memBitmap);
	m_pMemDC->Rectangle(&m_rect);
	m_pMemDC->PatBlt(m_rect.left,m_rect.top,m_rect.right,m_rect.bottom,BLACKNESS);
	m_pDC->BitBlt(m_rect.left,m_rect.top,m_rect.right,m_rect.bottom,m_pMemDC,0,0,SRCCOPY);
    
//	m_pMemDC->SetBkMode(TRANSPARENT);
	m_pMemDC->SetTextColor(RGB(125,0,125));

}

void CWinSortHzDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
		if(m_pMemDC != NULL)
	{
		m_pMemDC->SelectObject(m_pOldBmp);
		delete m_pMemDC;
		m_pMemDC = NULL;
		m_pOldBmp = NULL;
	}

	if(m_pDC != NULL)
	{
		delete m_pMemDC;
		m_pMemDC = NULL;
	}

	if(m_memBitmap.m_hObject != NULL)
	{
		m_memBitmap.DeleteObject();
	}

	
}

void CWinSortHzDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	DisplayLib(); 
	m_pDC->BitBlt(m_rect.left,m_rect.top,m_rect.right,m_rect.bottom,m_pMemDC,0,0,SRCCOPY);

	CDialog::OnTimer(nIDEvent);
}

void CWinSortHzDlg::OnDisplay() 
{
	unsigned short i,j,k;
	unsigned char dianzhen[288];

	unsigned short row,col;

	m_position += m_byteNum;
	if(m_position/m_byteNum > m_hzNum)
	{
		m_position = 0;
	}

	col = m_byteNum / m_rows;
	row = m_rows;

//   	m_tempFile.Open(m_OpenFile, CFile::modeRead);

    m_tempFile.Seek(m_position,SEEK_SET);

	m_tempFile.Read(dianzhen,m_byteNum);

	for(i=0;i<m_rows;i++)
	{
		for(j=0;j<col;j++)
		{
			for(k=0;k<8;k++)
			{
				if((dianzhen[i*col+j] & (0x80>>k)) != 0)
				{
					m_pMemDC->SetPixel(j*8+k,i,RGB(255,0,0));
				}
				else
				{
				    m_pMemDC->SetPixel(j*8+k,i,RGB(0,0,0));
				}
			}
		}

	}
//    m_tempFile.Close();
	OnPaint();
	
}

void CWinSortHzDlg::OnHzlib() 
{
	// TODO: Add your control notification handler code here
	CString str;
	BROWSEINFO bi;
	char name[MAX_PATH];

	ZeroMemory(&bi,sizeof(BROWSEINFO));
	bi.hwndOwner=GetSafeHwnd();
	bi.pszDisplayName=name;
	bi.lpszTitle="";
	bi.ulFlags=0;
	LPITEMIDLIST idl=SHBrowseForFolder(&bi);
	if(idl==NULL)
		return;
	SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));
	str.ReleaseBuffer();
	m_hzLibDir=str;
	if(str.GetAt(str.GetLength()-1)!='\\')
		m_hzLibDir+="\\";
	UpdateData(FALSE);

}

void CWinSortHzDlg::OnPredisplay() 
{
	// TODO: Add your control notification handler code here
	m_position -= m_byteNum * 2;
	if(m_position < -m_byteNum)
	{
		m_position = -m_byteNum;
	}
    OnDisplay();
	
}

void CWinSortHzDlg::OnBrowselib() 
{
	UpdateData(TRUE);
	if(m_bDisplay)
	{
		m_browseLibButton.SetWindowText("显示汉字库");
		m_bDisplay = 0;
		KillTimer(1);
	}
	else
	{
    	if(m_dianzhenSel == "12")
		{
			if(m_fontSel == "ASC")
			{
			    m_byteNum = 12;
			}
			else
			{
			    m_byteNum = 24;
			}
		    m_rows = 12;
		}
	    else if(m_dianzhenSel == "16")
		{
			if(m_fontSel == "ASC")
			{
			    m_byteNum = 16;
			}
			else
			{
			    m_byteNum = 32;
			}
			m_rows = 16;
		}
		else if(m_dianzhenSel == "24")
		{
			m_byteNum = 72;
			m_rows = 24;
		}
		else if(m_dianzhenSel == "40")
		{
			m_byteNum = 200;
			m_rows = 40;
		}
		else if(m_dianzhenSel == "48")
		{
			m_byteNum = 288;
			m_rows = 48;
		}

		m_position = 0;

		m_browseLibButton.SetWindowText("停止显示");
		m_bDisplay = 1;

		SetTimer(1, 200, NULL);
	}

}

void CWinSortHzDlg::DisplayLib()
{

	unsigned short i,j,k;
	unsigned char dianzhen[288];

	unsigned short row,col;

    col = m_byteNum / m_rows;
	row = m_rows;

    m_position += m_byteNum;
   	m_libFile.Open(m_OpenFile, CFile::modeRead);

    m_libFile.Seek(m_position,SEEK_SET);

	m_libFile.Read(dianzhen,m_byteNum);

	for(i=0;i<m_rows;i++)
	{
		for(j=0;j<col;j++)
		{
			for(k=0;k<8;k++)
			{
				if((dianzhen[i*col+j] & (0x80>>k)) != 0)
				{
					m_pMemDC->SetPixel(j*8+k,i,RGB(255,0,0));
				}
				else
				{
				    m_pMemDC->SetPixel(j*8+k,i,RGB(0,0,0));
				}
			}
		}

	}
    m_libFile.Close();
	

}

void CWinSortHzDlg::OnAscii() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);

	m_targetFile.Open(m_ToFile, CFile::modeCreate|CFile::modeWrite);

	m_targetFile.WriteString("/**************************点阵数组********************/");
	m_targetFile.WriteString("\ncode char asciiFontOrg[] =\n{\n");

	unsigned char dianzhen[288];
	unsigned int offse = 0;
	CFile hzkLib;
	CString m_path;
    m_path = m_hzLibDir + m_fontSel + m_dianzhenSel;
    unsigned short byteNum;
	CString  str;
	int i,j;

	hzkLib.Open(m_path, CFile::modeRead);

	if(m_dianzhenSel == "12")
	{
		byteNum = m_byteNum = 12;
		m_rows = 12;
	}
	else if(m_dianzhenSel == "16")
	{
		byteNum = m_byteNum = 16;
		m_rows = 16;
	}
	else if(m_dianzhenSel == "24")
	{
		byteNum = m_byteNum = 48;
		m_rows = 24;
	}
	else if(m_dianzhenSel == "40")
	{
		byteNum = m_byteNum = 120;
		m_rows = 40;
	}
	else if(m_dianzhenSel == "48")
	{
		byteNum = m_byteNum = 144;
		m_rows = 48;
	}

    m_position = 0;
	m_tempFile.SeekToBegin();
	for(i=' '; i<='~'; i++)
	{
		offse = (i-0x20)*byteNum;
		hzkLib.Seek(offse,SEEK_SET);
		hzkLib.Read(dianzhen, byteNum);
		str.Format("/* %c  */\n",i);
		m_targetFile.WriteString(str);

		for(j=0;j<m_byteNum;j++)
		{
			if(i==m_hzNum-1 && j==m_byteNum-1)
			{
				str.Format("0x%02X",dianzhen[j]);
			}
			else
			{
				str.Format("0x%02X,",dianzhen[j]);
			}
			m_targetFile.WriteString(str);
			if(((j+1)%m_rows == 0) || j==m_byteNum-1)
			{
				m_targetFile.WriteString("\n");
			}
		}
		m_tempFile.Write(dianzhen, m_byteNum);
	}

	m_targetFile.WriteString("\n};\n");
	m_targetFile.Close();
	hzkLib.Close();
	
	
}

void CWinSortHzDlg::OnCreateCarry() 
{

	// TODO: Add extra validation here
	UpdateData(TRUE);

/*************************************************
    文件读取过程
*************************************************/
	int j;
	long length;
	m_sourceFile.Open(m_OpenFile, CFile::modeRead);


    CString str;
	m_targetFile.Open(m_ToFile, CFile::modeCreate|CFile::modeWrite);

/*************************************************
    点阵数组写入文件
*************************************************/

	m_targetFile.WriteString("/**************************点阵数组********************/");
	m_targetFile.WriteString("\ncode char chineseFontOrg[] =\n{\n");


	unsigned char dianzhen[288];
    unsigned short byteNum;

	if(m_dianzhenSel == "12")
	{
		if(m_fontSel == "ASC")
		{
			byteNum = m_byteNum = 12;
		}
		else
		{
			byteNum = m_byteNum = 24;
		}
		m_rows = 12;
	}
	else if(m_dianzhenSel == "16")
	{
		byteNum = m_byteNum = 32;
		m_rows = 16;
	}
	else if(m_dianzhenSel == "24")
	{
		byteNum = m_byteNum = 72;
		m_rows = 24;
	}
	else if(m_dianzhenSel == "40")
	{
		byteNum = m_byteNum = 200;
		m_rows = 40;
	}
	else if(m_dianzhenSel == "48")
	{
		byteNum = m_byteNum = 288;
		m_rows = 48;
	}

    m_position = 0;
	m_tempFile.SeekToBegin();
	length = m_sourceFile.GetLength();
	m_hzNum = length / m_byteNum;
	while(m_position < length)
	{
		m_sourceFile.Seek(m_position,SEEK_SET);
		m_sourceFile.Read(dianzhen, byteNum);
		m_position += byteNum;
		for(j=0;j<m_byteNum;j++)
		{
			if((m_position>=length) && (j==m_byteNum-1))
			{
				str.Format("0x%02X",dianzhen[j]);
			}
			else
			{
				str.Format("0x%02X,",dianzhen[j]);
			}
			m_targetFile.WriteString(str);
			if(((j+1)%m_rows == 0) || j==m_byteNum-1)
			{
				m_targetFile.WriteString("\n");
			}
		}
		m_tempFile.Write(dianzhen, m_byteNum);
	}

	m_targetFile.WriteString("\n};\n");
	m_targetFile.Close();
	m_sourceFile.Close();

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -