/* * $Id$ * * (C) 2003-2006 Gabest * (C) 2006-2010 see AUTHORS * * This file is part of mplayerc. * * Mplayerc is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Mplayerc is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "stdafx.h" #include "MainFrm.h" #include "OpenDirHelper.h" WNDPROC COpenDirHelper::CBProc; bool COpenDirHelper::m_incl_subdir; CString COpenDirHelper::strLastOpenDir; void COpenDirHelper::SetFont(HWND hwnd,LPTSTR FontName,int FontSize) { HFONT hf, hfOld; LOGFONT lf= {0}; HDC hdc=GetDC(hwnd); GetObject(GetWindowFont(hwnd),sizeof(lf),&lf); lf.lfWeight = FW_REGULAR; lf.lfHeight = (LONG)FontSize; lstrcpy( lf.lfFaceName, FontName ); hf=CreateFontIndirect(&lf); SetBkMode(hdc,OPAQUE); hfOld = (HFONT)SendMessage(hwnd,WM_GETFONT,NULL,NULL); //get old font SendMessage(hwnd,WM_SETFONT,(WPARAM)hf,TRUE); // set new font if(!hfOld && (hfOld!=hf)) { DeleteObject(hfOld); //if the old font is not system font or the same as newfont, release it. } ReleaseDC(hwnd,hdc); } // Subclass procedure LRESULT APIENTRY COpenDirHelper::CheckBoxSubclassProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { if(uMsg==WM_LBUTTONUP) { if((SendMessage(hwnd,BM_GETCHECK,0,0))==1) { m_incl_subdir = FALSE; } else { m_incl_subdir = TRUE; } } return CallWindowProc(CBProc, hwnd, uMsg, wParam, lParam); } int __stdcall COpenDirHelper::BrowseCallbackProcDIR(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData) { HWND checkbox; //Initialization callback message if(uMsg==BFFM_INITIALIZED) { SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)strLastOpenDir); RECT ListViewRect; RECT Dialog; RECT ClientArea; RECT ButtonRect; checkbox = CreateWindowEx(0, _T("BUTTON"), ResStr(IDS_MAINFRM_DIR_CHECK), WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | BS_AUTOCHECKBOX | BS_MULTILINE, 0, 100, 100, 50, hwnd, 0, AfxGetApp()->m_hInstance, NULL); HWND ListView=FindWindowEx(hwnd,NULL,_T("SysTreeView32"),NULL); HWND id_ok = GetDlgItem(hwnd, IDOK); HWND id_cancel = GetDlgItem(hwnd, IDCANCEL); GetWindowRect(hwnd,&Dialog); MoveWindow(hwnd, Dialog.left, Dialog.top, Dialog.right-Dialog.left+50, Dialog.bottom-Dialog.top+70, TRUE); GetWindowRect(hwnd,&Dialog); GetClientRect(hwnd,&ClientArea); GetWindowRect(ListView,&ListViewRect); MoveWindow(ListView, ListViewRect.left-Dialog.left-3, ListViewRect.top-Dialog.top-55, ListViewRect.right-ListViewRect.left+49, ListViewRect.bottom-ListViewRect.top+115, TRUE); GetWindowRect(ListView,&ListViewRect); GetWindowRect(id_ok,&ButtonRect); MoveWindow(id_ok, ButtonRect.left-Dialog.left+49, ButtonRect.top-Dialog.top+50, ButtonRect.right-ButtonRect.left, ButtonRect.bottom-ButtonRect.top, TRUE); GetWindowRect(id_cancel,&ButtonRect); MoveWindow(id_cancel, ButtonRect.left-Dialog.left+49, ButtonRect.top-Dialog.top+50, ButtonRect.right-ButtonRect.left, ButtonRect.bottom-ButtonRect.top, TRUE); SetWindowPos(checkbox, HWND_BOTTOM, (ListViewRect.left-Dialog.left-3), ClientArea.bottom - 35, 120, 27, SWP_SHOWWINDOW); SetFont(checkbox,_T("Tahoma"),13); CBProc = (WNDPROC) SetWindowLongPtr(checkbox, GWLP_WNDPROC, (LONG_PTR) CheckBoxSubclassProc); SendMessage(checkbox,BM_SETCHECK,(WPARAM)m_incl_subdir,0); } return 0; } void COpenDirHelper::RecurseAddDir(CString path, CAtlList* sl) { WIN32_FIND_DATA fd = {0}; HANDLE hFind = FindFirstFile(path + _T("*.*"), &fd); if(hFind != INVALID_HANDLE_VALUE) { do { CString f_name = fd.cFileName; if((fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) && (f_name!=_T(".")) && (f_name!=_T(".."))) { CString fullpath = path + f_name; if(fullpath[fullpath.GetLength()-1] != '\\') { fullpath += '\\'; } sl->AddTail(fullpath); RecurseAddDir(fullpath, sl); } else { continue; } } while(FindNextFile(hFind, &fd)); FindClose(hFind); } }