CStdioFile類開啟檔案,用TextOut輸出時亂碼……
幾天前開始學習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。
……所以,哎,我的這個問題總算是解決,感謝CSDN的各位大俠們的幫助……再次感謝…………