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

📄 childview.cpp

📁 Sunplus DVD 字体文件查看修改工具,只针对Font_ori.c文件!使用方便,可以编译成支持Unicode的软件!
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CdlgCharEdit dlg(this);
	CRect cRect;
	static int i,j;

	//	绘图区域!
	cRect.left = this->m_MapX;
	cRect.right = this->m_MapX + p_Grid_W * m_col;
	cRect.top =  this->m_MapY ;
	cRect.bottom =  this->m_MapY + p_Grid_H * m_row;

	//	计算行列范围.
	if(cRect.PtInRect(point))
	{
		i = (point.x - cRect.left) / p_Grid_W ;
		j = (point.y - cRect.top) / p_Grid_H ;
		
		dlg.SetFontArray(arr_tbl[id_fnt][i + j * 16]);	
	}

	//	修改
	int iRet = dlg.DoModal();
	//TRACE("dlg return:%d\n",iRet);

	if(iRet == IDC_OK)
	{
		TRACE("Get Dialog Font Arr!");

		//	释放字体
		if(arr_tbl[id_fnt][i + j * 16])
			free(arr_tbl[id_fnt][i + j * 16]);
		
		//	清空指针
		arr_tbl[id_fnt][i + j * 16] = NULL;
		
		//	取得阵列数据
		arr_tbl[id_fnt][i + j * 16] = dlg.GetFontArray();

		this->Invalidate(FALSE);
	}

	CWnd::OnLButtonDblClk(nFlags, point);
}

//================================================================================
//=	填充字符数据:字符大小要选择确定
//================================================================================
void CChildView::OnEditFill()
{
	//	创建对话框
	CdlgCharFill dlg(this);

	//	取得字符数据位置
	dlg.m_pArr = &(arr_tbl[id_fnt][0]);

	//	选择属性
	int id = dlg.DoModal();

	//	确定
	if(id == IDC_OK )
	{
		//	如果已经修改数据但是以前没有就要添加,否则,不与保存.
		if(sFnt[id_fnt].GetCount() == 0)
			sFnt[id_fnt].Add(_T("Font_Arry"));

		this->Invalidate(FALSE);
	}
}

//================================================================================
//	属性
//================================================================================
void CChildView::OnEditProperty()
{
	CdlgCharEdit dlg(this);
	CRect cRect;
	static int i,j;

	//	初始化
	i = 1; j = 1;

	//	返回数据
	int iRet = dlg.DoModal();

	TRACE("dlg return:%d\n",iRet);

	if(iRet == IDC_OK)
	{
		TRACE("Get Dialog Font Arr!");
		
		//	释放字体
		if(arr_tbl[id_fnt][i + j * 16])
			free(arr_tbl[id_fnt][i + j * 16]);
		
		//	清空指针
		arr_tbl[id_fnt][i + j * 16] = NULL;
		
		//	取得阵列数据
		arr_tbl[id_fnt][i + j * 16] = dlg.GetFontArray();
		
		//	刷新
		this->Invalidate(FALSE);
	}
}

//================================================================================
//	另存为
//================================================================================
void CChildView::OnFileSaveas()
{
	CFileDialog dlg(FALSE,_T("c"),_T("font.c"),
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		_T("Font C File (*.c)|*.c|Any File (*.*)|*.*|"),this);

	//	打开保存对话框
	int iRet = dlg.DoModal();

	//	文件为空就无效,返回
	if(dlg.GetFileName()==_T("") || iRet == 0)
	{
		return;
	}
	
	m_SavePathName = dlg.GetPathName();
	//	保存文件
	DoSaveToFile(m_SavePathName);

	//	修改标题
	this->GetParentFrame()->SetWindowText
		(CString(_T("TFont V 1.00 (R) - Font File [")) + m_SavePathName + CString(_T("]")));
}

//================================================================================
//=		文件保存处理
//================================================================================
void CChildView::OnFileSave()
{
	if (m_SavePathName != _T(""))
	{	
		//	保存文件
		DoSaveToFile(m_SavePathName);
	}
	else
	{
		// TODO: 在此添加命令处理程序代码.
		CFileDialog dlg(FALSE,_T("c"),_T("font.c"),
			OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
			_T("Font C File (*.c)|*.c|Any File (*.*)|*.*|"),this);

		//	打开保存对话框
		int iRet = dlg.DoModal();

		TRACE("CFileDialog Return = %x",iRet);

		//	文件为空就无效,返回.
		if(dlg.GetFileName()==_T("") || iRet != 1)
			return;
		
		m_SavePathName = dlg.GetPathName();

		//	保存文件
		DoSaveToFile(m_SavePathName);

		//	修改标题
		this->GetParentFrame()->SetWindowText
			(CString(_T("TFont V 1.00 (R) - Font File [")) + m_SavePathName + CString(_T("]")));
	}
}

//=================================================================================================
//	绘制字体1
//=================================================================================================
void CChildView::OnFont1() 
{
	SetFontTable(0);
}

//=================================================================================================
//	绘制字体2
//=================================================================================================
void CChildView::OnFont2() 
{
	SetFontTable(1);
}

//=================================================================================================
//	绘制字体2
//=================================================================================================
void CChildView::OnFont3()
{
	SetFontTable(2);
}

//=================================================================================================
//	绘制字体 4
//=================================================================================================
void CChildView::OnFont4()
{
	SetFontTable(3);
}

//=================================================================================================
//	拷贝数据到剪贴板
//=================================================================================================
void CChildView::OnEditCopy()
{
	UINT idDataFormat = 0;
	UINT w = 0;
	UINT h = 0;
	UINT iSize = 0;

	//TRACE("复制!\n");

	//	判断数据是否有效?
	if(!m_CurArray)
	{
		TRACE("当前数据地址无效\n");
		return;
	}

	//	是否有数据?
	if(!(*m_CurArray))
	{
		TRACE("复制无效数据!\n");
		return;
	}

	//	打开剪贴板
	if(!this->OpenClipboard())
	{
		TRACE("剪贴板打开失败!\n");
		return;
	}

	//	清空剪贴板数据
	EmptyClipboard();

	//	注册剪贴板数据.
	idDataFormat = RegisterClipboardFormat(_T("CF_TFONT_CHAR"));

	TRACE(_T("CF_TFONT_CHAR = %X \n"),idDataFormat);

	w = (*m_CurArray)[0];
	h = (*m_CurArray)[1];
	iSize = (w * h + 7) / 8 + 3;

	//	分配可以移动内存!
	HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE,iSize);

	//	分配数据是否有效?
	if(!hMem)
	{
		TRACE(_T("全局内存分配失败!\n"));
		return ;
	}

	//	分配数据
	LPVOID pAlloc = GlobalLock(hMem);
	
	//	数据拷贝.
	memcpy(pAlloc,(*m_CurArray),iSize);

	//	解开锁定
	GlobalUnlock(hMem);

	//	设置剪贴板数据
	SetClipboardData(idDataFormat,hMem);

	//	关闭剪贴板
	CloseClipboard();
}

//=================================================================================================
//	剪切
//=================================================================================================
void CChildView::OnEditCut()
{
	UINT idDataFormat = 0;
	UINT w = 0;
	UINT h = 0;
	UINT iSize = 0;

	//TRACE("复制!\n");

	//	判断数据是否有效?
	if(!m_CurArray)
	{
		TRACE("当前数据地址无效\n");
		return;
	}

	//	是否有数据?
	if(!(*m_CurArray))
	{
		TRACE("复制无效数据!\n");
		return;
	}

	//	打开剪贴板
	if(!this->OpenClipboard())
	{
		TRACE("剪贴板打开失败!\n");
		return;
	}

	//	清空剪贴板数据
	EmptyClipboard();

	//	注册剪贴板数据.
	idDataFormat = RegisterClipboardFormat(_T("CF_TFONT_CHAR"));

	TRACE(_T("CF_TFONT_CHAR = %X \n"),idDataFormat);

	w = (*m_CurArray)[0];
	h = (*m_CurArray)[1];
	iSize = (w * h + 7) / 8 + 3;

	//	分配可以移动内存!
	HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE,iSize);

	//	分配数据是否有效?
	if(hMem == NULL)
	{
		TRACE("全局内存分配失败!\n");
		return ;
	}

	//	分配数据
	LPVOID pAlloc = GlobalLock(hMem);
	
	//	数据拷贝.
	memcpy(pAlloc,(*m_CurArray),iSize);

	//	解开锁定
	GlobalUnlock(hMem);

	//	设置剪贴板数据
	SetClipboardData(idDataFormat,hMem);

	//	关闭剪贴板
	CloseClipboard();

	//	释放掉数据,清空数据对象.
	free(*m_CurArray);

	//	释放数据
	*m_CurArray = NULL;

	this->Invalidate(0); 
}

//=================================================================================================
//	删除字符
//=================================================================================================
void CChildView::OnEditDelete()
{
	//	释放掉数据,清空数据对象.
	if(!m_CurArray)
		return;
	
	if(!*m_CurArray)
		return;

	free(*m_CurArray);

	*m_CurArray = NULL;

	this->Invalidate(0); 
}

//=================================================================================================
//	粘贴字符
//=================================================================================================
void CChildView::OnEditPaste()
{
	UINT idDataFormat = 0;
	UINT w = 0;
	UINT h = 0;

	//TRACE("粘贴!\n");

	if(!m_CurArray)
	{
		return ;
	}

	//	打开剪贴板
	if(!this->OpenClipboard())
	{
		TRACE("剪贴板打开失败!\n");
		return;
	}

	//	注册剪贴板数据.
	idDataFormat = RegisterClipboardFormat(_T("CF_TFONT_CHAR"));

	TRACE(_T("CF_TFONT_CHAR = %x\n"),idDataFormat);
		
	//	内存句柄
	HGLOBAL hMem = GetClipboardData(idDataFormat);

	//	是否有效?
	if(hMem == NULL)
	{
		TRACE(_T("剪贴板无数据!\n"));
		return ;
	}

	//	锁定分配数据
	LPVOID pAlloc = GlobalLock(hMem);
	//	数据大小
	UINT iSize = GlobalSize(hMem);

	//	判断数据是否有效.
	if(*m_CurArray)
	{
		free(*m_CurArray);
		*m_CurArray = NULL;
	}

	//	重新分配数据
	*m_CurArray = (BYTE*)malloc(iSize);

	//	数据拷贝.
	memcpy((*m_CurArray),pAlloc,iSize);

	//	解开锁定
	GlobalUnlock(hMem);

	//	关闭剪贴板
	CloseClipboard();

	//	刷新
	this->Invalidate(0);
}

//=================================================================================================
//	插入字符
//=================================================================================================
void CChildView::OnEditInsert()
{
	// TODO: 在此添加命令处理程序代码
}

//=================================================================================================
//	鼠标右键菜单
//=================================================================================================
void CChildView::OnRButtonDown(UINT nFlags, CPoint point)
{
	CMenu oMenu;
	CMenu *pSubMenu;
	POINT p;

	oMenu.LoadMenu(IDR_MENU_POP);
	pSubMenu = oMenu.GetSubMenu(0);

	p.x = point.x ;
	p.y = point.y ;

	this->ClientToScreen(&p);

	pSubMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,p.x ,p.y ,this);

	CWnd::OnRButtonDown(nFlags, point);
}

//=================================================================================================
//	选择数据.
//=================================================================================================
void CChildView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CRect cRect;
	static int Col,Row;
	static int OldCol,OldRow;

	CDC *dc = this->GetDC();

	//	是否有效!
	if(dc != NULL)
	{
		//	绘图区域!
		cRect.left		= this->m_MapX ;
		cRect.right		= this->m_MapX + p_Grid_W * m_col;
		cRect.top		= this->m_MapY ;
		cRect.bottom	= this->m_MapY + p_Grid_H * m_row;

		//	上次位置
		OldCol = Col;
		OldRow = Row;

		//	判断范围
		if(cRect.PtInRect(point))
		{
			Col = (point.x - cRect.left) / p_Grid_W ;
			Row = (point.y - cRect.top) / p_Grid_H ;

			dc->Draw3dRect(cRect.left + OldCol * p_Grid_W	,cRect.top + OldRow * p_Grid_H	,p_Grid_W,p_Grid_H,pvBackColor,pvBackColor);
			dc->Draw3dRect(cRect.left + Col * p_Grid_W		,cRect.top + Row * p_Grid_H		,p_Grid_W,p_Grid_H,0xff00ff,0x0000ff);

			//	记录区域
			m_CurRect.left = cRect.left;
			m_CurRect.top = cRect.top;
			m_CurRect.right = cRect.right;
			m_CurRect.bottom = cRect.bottom;
		}

		//	记录当前的位置
		m_CurArray = &(arr_tbl[id_fnt][Row * 16 + Col]);
	}

	CWnd::OnLButtonDown(nFlags, point);
}

//=================================================================================================
//=	数据设置
//=================================================================================================
void CChildView::OnViewSetup()
{
	CdlgSetup dlg;

	dlg.DoModal();

	this->m_data.LoadFromProfile();

	//	立即更新大小
	if(this->m_data.m_iSizeW >= 8 && this->m_data.m_iSizeW <= 100)
		p_Grid_W = this->m_data.m_iSizeW;

	if(this->m_data.m_iSizeH >= 8 && this->m_data.m_iSizeH <= 100)
		p_Grid_H = this->m_data.m_iSizeH;

	//	修改大小
	RECT r;
	this->GetClientRect(&r);
	this->OnSize(0,r.right - r.left ,r.bottom - r.top );
}

//=================================================================================================
//=		设置字体表
//=================================================================================================
int CChildView::SetFontTable(int nIndex)
{
	CString sTemp;
	CMenu *pMenu = NULL;
	CMainFrame *pMainFrm = NULL;

	//	默认的字符表格一
	p_fnt = (BYTE **)(&arr_tbl[id_fnt = nIndex % 4][0]);

	//	刷新数据
	this->Invalidate(TRUE);

	//	检测主窗口
	pMainFrm = (CMainFrame *)AfxGetMainWnd();

	//	无效退出
	if(pMainFrm == NULL)
		return 0;

	//	显示当前字符表
	sTemp.Format(_T("Font Table[%d]"),nIndex + 1);
	pMainFrm->ShowStatuText(sTemp,2);

	//	取得菜单
	pMenu = pMainFrm->GetMenu();

	//	如果菜单无效就退出
	if(pMenu == NULL)
		return 0;

	//	检查菜单
	pMenu ->CheckMenuRadioItem(IDM_FONT_1,IDM_FONT_4,IDM_FONT_1+nIndex % 4,MF_BYCOMMAND);

	return 1;
}

⌨️ 快捷键说明

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