在寫onFileOpen函數(shù)是,在打開文件后,我用了CDC::TextOut函數(shù)將其輸出到用戶區(qū)窗口上,但是遇到一個問題,就是在輸出中文的時候出現(xiàn)了亂碼……于是,我展開了大量搜索,終于把這個問題解決了……
源代碼如下:
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格式的文本,其他格式的文本都會不同程度的亂碼……怎么辦了,一位高手提供了一種解決方法,就是把其他的編碼格式轉(zhuǎn)化成ANSI格式,那么不就行了。
源代碼如下:
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格式的文本,其他格式的文本都會不同程度的亂碼……怎么辦了,一位高手提供了一種解決方法,就是把其他的編碼格式轉(zhuǎn)化成ANSI格式,那么不就行了。