📄 getfileopenname.cpp
字号:
// 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 + -