CFileDialog的m_ofn緩充區設定
¶CFileDialog的m_ofn緩充區設定
原文連結: https://darkblack01.blogspot.com/2012/08/cfiledialogmofn.html
移植時的最後更新日期: 2012-08-13T13:30:17.773+08:00
MFC的Class,不好用是用過都不喜歡的!就是有很多小地方要注意。
MFC的Class,好用是用過都難以忘記的!就是有很多架構都弄得好好的。
可以說是半成品,所以我就想把所有用過的Class的注意小細節,再包一層Class起來!(算是一個大計劃吧!也許有人做過了!)
這一次是CFileDialog(之前對它的了解,就只是認識這個函數,其它都沒有記錄下來)
CFileDlg aFileDialog (TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, m_strFilter);
在這樣使用時,總是會有緩充區的問題。
這一次設定了好久,終於弄好了!想說這個code以後要保留下來,所以要把它再包一層下來。
Sample Code
void CSelExcelDlg::OnButtonFindfile()
{
// TODO: Add your control notification handler code here
CString m_strFilter(“OrigMsrData Files (.omd)|.omd|Text File(.txt)|.txt|All Files (.)|. ||”);//檔案過濾條件
CFileDlg aFileDialog (TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, m_strFilter);
aFileDialog.SetMultiFileNameBuffer(100);
int nID = aFileDialog.DoModal();
if (nID == IDOK)
{
HDFileCouont = aFileDialog.GetSelFileList(m_lstSelFileList);
}
if(CommDlgExtendedError() == FNERR_BUFFERTOOSMALL) //FNERR_BUFFERTOOSMALL要#include “cderr.h”
AfxMessageBox( “Sel Excel Dialog緩衝區不夠大\n剪下畫面,並且找程式設計師解決這問題。”);
}
CFileDlg .h
class CFileDlg : public CFileDialog
{
//在Class裡設定一個CString當作Buffer是避免兩種情況
//若宣告在CFileDlg.SetMutiFileNameBuffer()裡,則設定完Buffer之後,這個字串空間就消失了。會造成緩充區不足或沒有緩充區的問題。
//若宣告在在Sample Code裡則就沒有OO的架構,否則,原本找到的Code(MSDN的Code)是放在 Sample Code 的。
CString szFileNameBuffer;
public:
void SetMultiFileNameBuffer(const int);
};
CFileDlg.cpp
void CFileDlg::SetMultiFileNameBuffer(const int FileMaxBuffer)
{
const int BufferSize = (FileMaxBuffer * (MAX_PATH + 1)) + 1;
m_ofn.nMaxFile = BufferSize;
m_ofn.lpstrFile = szFileNameBuffer.GetBuffer(BufferSize);
m_ofn.lpstrFile[0] = NULL;
}