// ModifyPath.cpp : implementation file // #include "stdafx.h" #include "ImageGrinder.h" #include "ModifyPath.h" ///////////////////////////////////////////////////////////////////////////// // CModifyPath dialog CModifyPath::CModifyPath(CWnd* pParent /*=NULL*/) : CDialog(CModifyPath::IDD, pParent) { //{{AFX_DATA_INIT(CModifyPath) m_path = _T(""); //}}AFX_DATA_INIT } void CModifyPath::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CModifyPath) DDX_Text(pDX, IDC_PATH, m_path); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CModifyPath, CDialog) //{{AFX_MSG_MAP(CModifyPath) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_EN_CHANGE(IDC_PATH, OnChangePath) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CModifyPath message handlers void myILFree(LPITEMIDLIST pidl); void myILFree(LPITEMIDLIST pidl) { LPMALLOC pMalloc; if (pidl) { #ifdef DEBUG UINT cbSize = ILGetSize(pidl); VALIDATE_PIDL(pidl); // Fill the memory with some bad value... _fmemset(pidl, 0xE5, cbSize); // If large enough try to save the call return address of who // freed us in the 3-6 byte of the structure. if (cbSize >= 6) *((UINT*)((LPSTR)pidl + 2)) = *(((UINT*)&pidl) - 1); #endif SHGetMalloc(&pMalloc); pMalloc->Free( pidl); pMalloc->Release(); } } void CModifyPath::OnBrowse() { CString TexturePath; char pname[MAX_PATH]; BROWSEINFO bi; bi.hwndOwner =m_hWnd; bi.pidlRoot = NULL; bi.pszDisplayName = NULL; bi.lpszTitle = "Choose Texture Path..."; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = (LPARAM)this; LPITEMIDLIST pidl = SHBrowseForFolder(&bi); if (SHGetPathFromIDList(pidl,pname)) { TexturePath=pname; } if (bi.pidlRoot) { myILFree( const_cast< ITEMIDLIST* >( bi.pidlRoot ) ); } m_path=TexturePath; UpdateData(FALSE); } int CModifyPath::DoModal() { return CDialog::DoModal(); } void CModifyPath::OnChangePath() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here UpdateData(TRUE); } void CModifyPath::OnOK() { // TODO: Add extra validation here if(0xffffffff==GetFileAttributes( m_path )) { MessageBox("Invalid Path","Path Error",MB_ICONERROR|MB_OK); } else CDialog::OnOK(); }