⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getfileopenname.cpp

📁 CE的系统函数里面没有类似于VC++的获取文件路径的对话框函数GetFileOpenName
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// GetFileOpenName.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "resource.h"
#include "Commctrl.h"
#include "GetFileOpenName.h"

//#define MAX  50;

//全局变量
HINSTANCE g_hInst;
int numb = 0;
int nIndex = 0;
int searchFlag=0;
int Flag[MAX_PATH] = {0};
TCHAR m_szDir[MAX_PATH];
//TCHAR FilePath[MAX_PATH] = {0};
TCHAR g_szFilePath[MAX_PATH] = {0};
TCHAR m_CurDir[256][MAX_PATH] = {0};
TCHAR m_szInitDir[MAX_PATH] = {0};
TCHAR m_szCurDir[MAX_PATH] = {0};
TCHAR m_szNewFileName[MAX_PATH] = {0};
TCHAR szFilterShow[10][50] = {0};
TCHAR szFilterType[10][50];
TCHAR Item[10][50];


//函数声明
void CreateToolbar (HWND hwnd);
//void OpenFile(TCHAR name[MAX_PATH]);
void SearchFile(HWND hDlg,TCHAR SName[MAX_PATH]);
void CreateNewFile(HWND hDlg,TCHAR NewFileName[MAX_PATH]);
void GetSubItemList(HWND hDlg,TCHAR Filter[MAX_PATH]);
BOOL AddItems(HWND hwnd);
LRESULT CALLBACK	Proc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK	NewProc(HWND, UINT, WPARAM, LPARAM);


BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	g_hInst = (HINSTANCE)hModule;
    return TRUE;
}


EXPORT BOOL CALLBACK GetFileOpenName(TCHAR DirName[20],TCHAR FilterShow[10][50],TCHAR FilterType[10][50],TCHAR FilePath[MAX_PATH])
{	
	TCHAR sz_DirName[20];
	int i = 0;

//	RETAILMSG(1,(L"FilterType=%s",FilterType[0]));
//	RETAILMSG(1,(L"FilterType=%s",FilterType[1]));
//	RETAILMSG(1,(L"FilterShow=%s",FilterShow[0]));
//	RETAILMSG(1,(L"FilterShow=%s",FilterShow[1]));
	
	if(!wcscmp(FilterType[0],_T("")))
	{
		MessageBox(NULL,_T("没有滤波文件类型!"),_T("目录浏览器"),MB_OK);
		return 0;
	}
	else
	{
		do
		{
			wsprintf(szFilterShow[i],FilterShow[i]);
			wsprintf(szFilterType[i],FilterType[i]);
			i++;
		}while(wcscmp(FilterType[i],_T("")));

	}
	wsprintf(sz_DirName,TEXT("\\%s"),DirName);
	wsprintf(m_szCurDir,sz_DirName);
//	wsprintf(m_szCurDir,TEXT("\\硬盘"));
//	wsprintf(szFilterShow,FilterShow);	
//	wsprintf(szFilterType,FilterType);
	InitCommonControls();
	DialogBox(g_hInst, (LPCTSTR)IDD_OPENFILE, NULL, (DLGPROC)Proc);
	_tcscpy(FilePath,g_szFilePath);
	return 0;
}


LRESULT CALLBACK Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
//	MessageBox(NULL,TEXT("  hehe! "),TEXT("hello!"),MB_OK);
	HWND hWnd;
	RECT rt;
	LVCOLUMN lvc;
	TCHAR str[MAX_PATH];	
	TCHAR lpszBuffer[MAX_PATH];	
//	TCHAR m_InitDir[MAX_PATH];
	TCHAR buf[64] = {0};	
	int num,len = MAX_PATH;
	int i;
	
		
	switch (message)
	{
		case WM_INITDIALOG:
		
			CreateToolbar(hDlg);
			hWnd = GetDlgItem(hDlg,IDC_LIST1);
			GetWindowRect(hWnd,&rt);			
			ListView_SetExtendedListViewStyleEx(hWnd,
						NULL,
//						LVS_EX_FULLROWSELECT | 
						NULL);
//						LVS_EX_GRIDLINES);
			lvc.cx = (rt.right-rt.left)/4;
			lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; 
			for(i=1;i<=4;i++)
			{
			
			lvc.fmt = LVCFMT_BITMAP_ON_RIGHT ;			
			LoadString(g_hInst,i,buf,50);
			lvc.pszText = buf;		
			ListView_InsertColumn(hWnd, i, &lvc);
			}

			hWnd = GetDlgItem(hDlg,IDC_COMBO1);
			AddItems(hWnd);
//			SendMessage(hWnd,CB_GETLBTEXT,SendMessage(hWnd,CB_GETCURSEL,0,0),(LPARAM)lpszBuffer);
//			RETAILMSG(1,(_T("Ready to entry GetSubItemList")));
			wsprintf(lpszBuffer,szFilterType[SendMessage(hWnd,CB_GETCURSEL,0,0)]);
			GetSubItemList(hDlg,lpszBuffer);			
//			GetSubItemList(hDlg,TEXT("*.*"));

			return true;

		case WM_NOTIFY:
			switch(int(wParam))
			{
			case IDC_LIST1:
				hWnd = GetDlgItem(hDlg,IDC_LIST1);	
				num = ListView_GetItemCount(hWnd);
				if(((NMKEY *) lParam)->hdr.code == LVN_ITEMCHANGED)//IDC_LIST1
				{
					ZeroMemory(str,sizeof(str));
					ListView_GetItemText(hWnd,ListView_GetSelectionMark(hWnd),0,str,len);	
					SetWindowText(GetDlgItem(hDlg,IDC_EDIT1),str);							
					
				}	
				switch( ((NMHDR *)lParam)->code) 
				{
				case NM_CLICK:
					ZeroMemory(str,sizeof(str));
					ListView_GetItemText(hWnd,ListView_GetSelectionMark(hWnd),0,str,len);	
					SetWindowText(GetDlgItem(hDlg,IDC_EDIT1),str);							
					break;
				case NM_DBLCLK:
					ZeroMemory(str,sizeof(str));
					ListView_GetItemText(hWnd,ListView_GetSelectionMark(hWnd),0,str,len);		

					if(Flag[ListView_GetSelectionMark(hWnd)] == 1)// 1 表示文件夹,0 表示文件
					{
						wsprintf(m_szDir,m_szCurDir);
						wsprintf(m_szCurDir,TEXT("%s\\%s"),m_szDir,str);
						GetSubItemList(hDlg,TEXT("*.*"));							
						wsprintf(m_CurDir[numb++],m_szDir);
					//	numb = numb+1;
//						RETAILMSG(1,(L"numb=%d",numb));
					}
					else if(Flag[ListView_GetSelectionMark(hWnd)] == 2)
					{
//						OpenFile(str);//g_szFilePath
//						ZeroMemory(FilePath,sizeof(FilePath));
//						wsprintf(FilePath,TEXT("%s\\%s"),m_szCurDir,str);
						ZeroMemory(g_szFilePath,sizeof(g_szFilePath));
						wsprintf(g_szFilePath,TEXT("%s\\%s"),m_szCurDir,str);
						RETAILMSG(1,(L"g_szFilePath=%s",g_szFilePath));
						EndDialog(hDlg, LOWORD(wParam));
					}
					break;
				}							
				break;
			}
			break;
		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
			case IDC_COMBO1:
				hWnd = GetDlgItem(hDlg,IDC_COMBO1);
				if(nIndex != SendMessage(hWnd,CB_GETCURSEL,0,0))
				{				
					nIndex = SendMessage(hWnd,CB_GETCURSEL,0,0);
					wsprintf(lpszBuffer,szFilterType[nIndex]);
				    GetSubItemList(hDlg,lpszBuffer);
				}
				break;
			case ID_GOUP:
//				MessageBox(NULL,TEXT("  hehe! "),TEXT("hello!"),MB_OK);				
				if(numb>0)					
				{
//					RETAILMSG(1,(L"numb111=%d",numb));
//					MessageBox(NULL,TEXT("  hehe! "),TEXT("hello!"),MB_OK);	
					wsprintf(m_szCurDir,m_CurDir[numb-1]);
//					MessageBox(NULL,m_szDir,TEXT("hello!"),MB_OK);
					GetSubItemList(hDlg,TEXT("*.*"));
					numb = numb-1;
				}
				else MessageBox(NULL,_T("无浏览上级目录的权限"),_T("目录浏览器"),MB_OK);
				break;
			case ID_NEW:
				DialogBox(g_hInst, (LPCTSTR)IDD_NEWFILENAME, NULL, (DLGPROC)NewProc);
				CreateNewFile(hDlg,m_szNewFileName);
				break;						
			case IDC_EDIT1:				
				break;
			case IDOK:				
				ZeroMemory(str,sizeof(str));
				hWnd = GetDlgItem(hDlg,IDC_EDIT1);
				GetWindowText(hWnd,str,MAX_PATH);
//				MessageBox(NULL,str,TEXT("hello!"),MB_OK);
//				SetWindowText(GetDlgItem(hDlg,IDC_EDIT1),_T(""));				
				SearchFile(hDlg,str);
				if(searchFlag == 1)
				{
					EndDialog(hDlg, LOWORD(wParam));
				}
				if(!searchFlag)
				{
					MessageBox(NULL,_T("输入的文件名不存在!\r\n请输入完整的文件名!"),_T("目录浏览器"),MB_OK);
				}
				break;
			case IDCANCEL:
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}	
	}
	
	return 0;
}

void GetSubItemList(HWND hDlg,TCHAR Filter[MAX_PATH])  //查找文件
{

	HWND    hWnd;
	HANDLE  hFile;
	LVITEM  lvi1,lvi[20];
	WIN32_FIND_DATA wfd;	
	HICON hIcon;
	SYSTEMTIME st;
	TCHAR szFileName[MAX_PATH];
	TCHAR string[MAX_PATH] = {0};
	TCHAR str[MAX_PATH];
	TCHAR FileName[20][100] = {0};
	TCHAR FileSize[20][100] = {0};
	TCHAR FileType[20][100] = {0};
	TCHAR FileTime[20][100] = {0};
	int i=1,j=0,k=0;
	int num;
	SHFILEINFO stFileInfo;
	HIMAGELIST  ilist;
	
//	RETAILMSG(1,(_T("Have entry GetSubItemList")));
//	RETAILMSG(1,(L"GetLastError = %s",GetLastError()));
//	MessageBox(NULL,wfd.cFileName,TEXT("hello!"),MB_OK);
    lvi1.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE; 
	lvi1.state = 0; 
	lvi1.stateMask=0;
	lvi1.iSubItem=0;

	
	ZeroMemory(str,sizeof(str));
	wsprintf(str,TEXT("当前文件夹:%s"),m_szCurDir);
	SetWindowText(GetDlgItem(hDlg,IDC_STATIC1),str);
	wsprintf(m_szInitDir,TEXT("%s\\%s"),m_szCurDir,Filter);
//	RETAILMSG(1,(L"%s",Filter));
	hFile = FindFirstFile(m_szInitDir,&wfd);
	hWnd = GetDlgItem(hDlg,IDC_LIST1);
	ListView_DeleteAllItems(hWnd);
	ilist = ImageList_Create(16,16,ILC_COLOR,0,0);//创建image列表
	ListView_SetImageList(hWnd,ilist, LVSIL_SMALL);
	ImageList_SetImageCount(ilist,100);//设置image列表初始值
						
//	MessageBox(NULL,wfd.cFileName,TEXT("hello!"),MB_OK);
	if(hFile == INVALID_HANDLE_VALUE) 
	{
//		MessageBox(NULL,TEXT("hello!"),TEXT("hello!"),MB_OK);
		return;
	}
	do
	{
		if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
	             !(wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
		{
			if( wfd.cFileName[0] != '.' )
			{
							
				wsprintf(szFileName,_T("%s\\%s"),m_szCurDir,wfd.cFileName);//文件路径
			    SHGetFileInfo(szFileName,NULL,&stFileInfo,sizeof(stFileInfo),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_TYPENAME);
				hIcon = stFileInfo.hIcon;
				ImageList_ReplaceIcon(ilist,0,hIcon);
				 
				FileTimeToSystemTime(&wfd.ftLastWriteTime,&st);//把文件时间转化为系统时间
				
				lvi1.iImage = 0;
				num = ListView_GetItemCount(hWnd);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -