几天前开始学习VC++(MFC)了,我很是激动,因为以前上课讲了C/C++,但是那都是些基础的运算,还没有真正的涉及到程序设计的实质性东西,现在我终于决定要学习编写一个程序了,我决定写一个小程序,文本阅读器,就像Windows的记事本一样的东西。但是一开始就遇到非常大的问题……我用MFC建立了程序框架,开始写代码,第一个代码,我决定写打开功能,也就是onFileOpen函数,但这个函数整整花了我四天时间……哎,那个累啊……
好了,罗嗦了一大段,下面说说这个问题。
在写onFileOpen函数是,在打开文件后,我用了CDC::TextOut函数将其输出到用户区窗口上,但是遇到一个问题,就是在输出中文的时候出现了乱码……于是,我展开了大量搜索,终于把这个问题解决了……
我的源代码如下:
void CTextReadView::OnFileOpen()
{
// TODO: 在此添加命令处理程序代码
CString fpathname;
static TCHAR BASED_CODE szFilter[] = _T("文本文档(*.txt)|*.txt|")
_T("All Files (*.*)|*.*||");
CFileDialog openDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL,0,TRUE);
if(openDlg.DoModal()==IDOK)
{
fpathname=openDlg.GetPathName();
CStdioFile ofile(fpathname,CFile::modeRead);
CString ofstr;
CClientDC dc(this);
CFont font;
font.CreatePointFont(200,_T("宋体"),NULL);
dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CPoint pt;
pt=0;
while(ofile.ReadString(ofstr))
{
dc.TextOut(pt.x,pt.y,ofstr);
pt.y=pt.y+tm.tmHeight;
}
}
}
如果就这样直接编译运行,在输出是中文会乱码,解决方法如下:
打开项目属性,修改项目属性里面的“字符集”能够解决这个问题呢,但是同时要改“公共语言运行库支持”,否则编译时会报错得……
但是这样仍然只能显示ANSI格式的文本,其他格式的文本都会不同程度的乱码……怎么办了,一位高手提供了一种解决方法,就是把其他的编码格式转化成ANSI格式,那么不就行咯,转化方法参考该大虾的博客:http://www.cppblog.com/greatws/archive/2008/08/31/60546.html。
……所以,哎,我的这个问题总算是解决,感谢优快云的各位大侠们的帮助……再次感谢…………