File-boxes in MFC
Posted
by Tom Werner Halvorsrxd
on January 24th, 1999
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
{
...
public:
// Dialog Data
//{{AFX_VIRTUAL(CLBFileDlg)
protected:
...
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
...
//}}AFX_VIRTUAL
private:
...
//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
//interaction
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
if(message==m_nBoxMsg)
{
CString temp_string;
//update the dir-box and file-box if we change drive
if(wParam==DRIVES)
{
m_cflDir.RefreshBox(m_cflDrive.getPath());
m_cflFile.RefreshBox(m_cflDrive.getPath());
}
//update the file-box if we change directory
else if(wParam==DIRECTORIES)
{
m_cflFile.RefreshBox(m_cflDir.getPath());
}
//for simplicity we'll just show the selected file
//in the CStatic
else if(wParam==FILES)
{
m_cflFile.GetText(m_cflFile.GetCurSel(), temp_string);
m_clsSelection.SetWindowText(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
c:\inn\pics\..\html\..\..\windows\system\..\..\det.log
this a right and proper path but of course this one can
be much slimmer, like this:
c:\det.log
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.

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