CFileDialog的m_ofn緩充區設定


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;
}

沒有留言:

張貼留言

(什麼是留言欄訊息?)