计算机二级辅导:VC编写的打字练习
来源:优易学  2011-12-10 17:20:36   【优易学:中国教育考试门户网】   资料下载   IT书店

  一开始走了很多弯路,后来发现直接使用RichEdit2.0就OK.使用原因:由于RichEdit2.0A自动为宽字符(WideChar),所以它可以解决中文乱码以及一些汉字问题

  一、原理:

  添加两个重叠的RichEdit,然后设置行高为字体高度的一倍。两个错开,一个用于文本显示,一个用于用户输入。关闭窗口时判分。

  二、在对话框里添加两个重叠的RICHEDIT2.0。

  方法一:(msdn上的做法,适用于用VC.NET及以后版本创建的工程)

  To update rich edit controls in existing Visual C++ applications to version 2.0, open the .RC file as text, change the class name of each rich edit control from   "RICHEDIT" to  "RichEdit20a". Then replace the call to AfxInitRichEdit with AfxInitRichEdit2.

  方法二:以对话框为例:

  (1)增加一全局变量HMODULE hMod;

  (2)  在CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T("riched20.dll"));

  在CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);

  (3)   在对话框上放一个richedit,文本方式打开.rc文件修改该richedit控件的类名"RICHEDIT" to  "RichEdit20a".

  (4)在对话框头文件添加CRichEditCtrl m_richedit;

  在OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);

  本文采用第二种方法。

  三、初始化RichEdit(两个richedit都差不多,用户输入那个放在上面,所以要设置其为背景透明)

  包括三个过程

  1.读入文件

  2.设置行高

  3.设置字体

  4.设置背景透明

  /*读入文件*/

  DWORD CALLBACK CTest9Dlg::MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)

  {

  CFile* pFile = (CFile*) dwCookie;

  *pcb = pFile->Read(pbBuff, cb);

  return 0;

  }

  /*设置行高*/

  CTest9Dlg::setLineHeight(int iHigh, CRichEditCtrl &m_richEdit)

  {

  CHARFORMAT cf;

  cf.cbSize = sizeof(cf);

  cf.dwMask = CFM_OFFSET;

  cf.yOffset =  iHigh;

  m_richEdit.SetDefaultCharFormat(cf);

  }

  /*设置字体*/

  CTest9Dlg::setFont(CRichEditCtrl &m_RichEdControl)

  {

  CHARFORMAT cf;

  ZeroMemory(&cf, sizeof(CHARFORMAT));

  cf.cbSize = sizeof(CHARFORMAT);

  cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |

  CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;

  cf.dwEffects = 0;

  cf.yHeight = 300;//文字高度cf.crTextColor = RGB(29, 55, 188); //文字颜色strcpy(cf.szFaceName ,_T("宋体"));//设置字体m_RichEdControl.SetSel(0, -1); //设置处理区域,0到-1为全部设置m_RichEdControl.SetSelectionCharFormat(cf);

  }

  /*设置背景透明*/

  ::SetWindowLong(m_RichEd_test.GetSafeHwnd(),GWL_EXSTYLE, ::GetWindowLong(m_RichEd_test.GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_TRANSPARENT);

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训