1. 程式人生 > >CStdioFile類開啟檔案,用TextOut輸出時亂碼……

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的各位大俠們的幫助……再次感謝…………