File-boxes in MFC

Wouldn't it be nice to have drive, dir and file-boxes, as in VisualBasic, in MFC. This project give you just that possibility. To use these list-boxes in your project include FileList.h and FileList.cpp in your project and add the following code:

class CLBFileDlg : public CDialog
    // Dialog Data
    virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);	
    //the three boxes in this example
    CFileList m_cflDrive;
	CFileList m_cflDir;	
    CFileList m_cflFile;
    //user-defined message for communication between the boxes
    //and dialog (msg is trapped in WindowProc)
    UINT m_nBoxMsg;	
BOOL CLBFileDlg::OnInitDialog()
    // TODO: Add extra initialization here	
    //register a personal, user-defined msg so that our boxes can post msg's for	
    m_nBoxMsg=RegisterWindowMessage("Tom's little box");	

    //init the  boxes	

    //the definition of:	
    //BOOL InitBox(UINT res_from_template, 	
    //	       CWnd *parent, 	
    //	       LPSTR lpszPath, 	
    //	       LPSTR lpszFileMask, 	
    //	       UINT flags, 	
    //	       UINT msg);	

    m_cflDrive.InitBox(IDC_LIST_DRIVE, this, "c:\\", "*.*", DRIVES, m_nBoxMsg);	
    m_cflDir.InitBox(IDC_LIST_DIR, this, "c:\\", "*.*", DIRECTORIES, m_nBoxMsg);	
    m_cflFile.InitBox(IDC_LIST_FILE, this, "c:\\", "*.*", FILES, m_nBoxMsg);	

    //in this example we'll just display the selected file in a CStatic	
    m_clsSelection.InitSelect(IDC_SELECT, this);

LRESULT CLBFileDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    // TODO: Add your specialized code here and/or call the base class
        //process the user-defined msg	
            CString temp_string;
            //update the dir-box and file-box if we change drive
            //update the file-box if we change directory
            else if(wParam==DIRECTORIES)		
            //for simplicity we'll just show the selected file	
            //in the CStatic	
            else if(wParam==FILES)	
                m_cflFile.GetText(m_cflFile.GetCurSel(), temp_string);	
        return CDialog::WindowProc(message, wParam, lParam);

Minor update:

Changes since v. 1.0
  • improving update in FillBox(): no update untill the box is filled
  • much faster draw
  • declaring CheckEntry as inline and changing the argument
  • moving FillBox over to private-sector
  • improving OnDblclk():
    if you use the dir-box a lot then the path may look like this
    this a right and proper path but of course this one can
    be much slimmer, like this:

As far as I can see, all the updates are internal to FileList and does not invalidate usage of this class. However since the header has had an update, a recompile of the project is required.

Download demo project - 20 KB


  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Anthony Christie, the Chief Marketing Officer for Level Communications, is responsible for customer experience, worldwide marketing and product management. In this informative asset, he shares his insights into why a private network connection to cloud-bases applications is the right decision for your enterprise. Download now to find out more.

  • Enterprises are increasingly looking to platform as a service (PaaS) to lower their costs and speed their time to market for new applications. Developing, deploying, and managing applications in the cloud eliminates the time and expense of managing a physical infrastructure to support them. PaaS offerings must deliver additional long-term benefits, such as a lower total cost of ownership (TCO), rapid scalability, and ease of integration, all while providing robust security and availability. This report …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date