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

📄 selectfile.c

📁 Windows Mobile好用的今日桌面插件,在桌面插入一个Item项
💻 C
📖 第 1 页 / 共 2 页
字号:

/******************************************************************************

	CheckDir

	僨傿儗僋僩儕偐偳偆偐僠僃僢僋

******************************************************************************/

static BOOL CheckDir(TCHAR *fname)
{
	WIN32_FIND_DATA FindData;
	HANDLE hFindFile;
	TCHAR buf[BUF_SIZE];

	wsprintf(buf, TEXT("%s\\%s"), path, fname);
	if((hFindFile = FindFirstFile(buf, &FindData)) == INVALID_HANDLE_VALUE){
		return FALSE;
	}
	FindClose(hFindFile);

	if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
		return TRUE;
	}
	return FALSE;
}


/******************************************************************************

	ChangeSelPath

	僷僗偺曄峏

******************************************************************************/

static BOOL ChangeSelPath(TCHAR *fname)
{
	TCHAR buf[BUF_SIZE];

	if(CheckDir(fname) == TRUE){
		wsprintf(buf, TEXT("%s\\%s"), path, fname);
		lstrcpy(path, buf);
		return TRUE;
	}
	return FALSE;
}


/******************************************************************************

	CmboBox_AddPath

	僐儞儃儃僢僋僗偵僷僗傪愝掕偡傞

******************************************************************************/

void CmboBox_AddPath(HWND hCombo, TCHAR *fpath)
{
	TCHAR buf[BUF_SIZE];
	TCHAR *p, *r;
	int i;

	SendMessage(hCombo, CB_RESETCONTENT, 0, 0);
	SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)TEXT("\\"));
	if(*fpath == TEXT('\0')){
		SendMessage(hCombo, CB_SETCURSEL, 0, 0);
		return;
	}
	
	for(r = buf, p = fpath + 1; *p != TEXT('\0'); p++){
		if(*p == TEXT('\\')){
			*r = TEXT('\0');
			SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)buf);
			r = buf;
		}else{
			*(r++) = *p;
		}
	}
	*r = TEXT('\0');
	i = SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)buf);
	SendMessage(hCombo, CB_SETCURSEL, i, 0);
}


/******************************************************************************

	CmboBox_GetPath

	僐儞儃儃僢僋僗偺巜掕埵抲偺僷僗傪庢摼

******************************************************************************/

BOOL CmboBox_GetPath(HWND hCombo, int sel, TCHAR *fpath)
{
	TCHAR buf[BUF_SIZE];
	TCHAR *p;
	int len, i;

	p = buf;
	for(i = 1; i <= sel; i++){
		*(p++) = TEXT('\\');
		len = SendMessage(hCombo, CB_GETLBTEXT, i, (LPARAM)p);
		if(len == -1){
			return FALSE;
		}
		p += len;
	}
	*p = TEXT('\0');

	lstrcpy(fpath, buf);
	return TRUE;
}


/******************************************************************************

	SelectFileDlgProc

	僼傽僀儖慖戰僾儘僔乕僕儍

******************************************************************************/

static BOOL CALLBACK SelectFileDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	SHINITDLGINFO shidi;
	SHFILEINFO shfi;
	LVCOLUMN lvc;
	HIMAGELIST IconList;
	TCHAR buf[BUF_SIZE];
	TCHAR *p;
	int i;

	switch(uMsg)
	{
	case WM_INITDIALOG:
		//PocketPC梡弶婜壔
		shidi.dwMask = SHIDIM_FLAGS;
		shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
		shidi.hDlg = hDlg;
		SHInitDialog(&shidi);

		SetWindowText(hDlg, TEXT("Select file"));

		if((TCHAR *)lParam != NULL){
			SendDlgItemMessage(hDlg, IDC_EDIT_NAME, WM_SETTEXT, 0, lParam);
		}
		SendDlgItemMessage(hDlg, IDC_COMBO_PATH, CB_SETEXTENDEDUI, TRUE, 0);

		lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;

		lvc.cx = 150;
		lvc.pszText = TEXT("Name");
		lvc.cchTextMax = lstrlen(TEXT("Name"));
		lvc.iSubItem = 0;
		lvc.fmt = LVCFMT_LEFT;
		ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_FILE), 0, &lvc);

		lvc.cx = 100;
		lvc.pszText = TEXT("Type");
		lvc.cchTextMax = lstrlen(TEXT("Type"));
		lvc.iSubItem = 1;
		lvc.fmt = LVCFMT_LEFT;
		ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_FILE), 1, &lvc);

		lvc.cx = 70;
		lvc.pszText = TEXT("Size");
		lvc.cchTextMax = lstrlen(TEXT("Size"));
		lvc.iSubItem = 2;
		lvc.fmt = LVCFMT_RIGHT;
		ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_FILE), 2, &lvc);

		lvc.cx = 150;
		lvc.pszText = TEXT("Date");
		lvc.cchTextMax = lstrlen(TEXT("Date"));
		lvc.iSubItem = 3;
		lvc.fmt = LVCFMT_LEFT;
		ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_FILE), 3, &lvc);

		IconList = (HIMAGELIST)SHGetFileInfo(TEXT(""), 0,
			&shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SYSICONINDEX);
		ListView_SetImageList(GetDlgItem(hDlg, IDC_LIST_FILE), IconList, LVSIL_SMALL);

		ListView_SetExtendedListViewStyle(GetDlgItem(hDlg, IDC_LIST_FILE), LVS_EX_ONECLICKACTIVATE);

	case WM_SHOWFILELIST:
		SetCursor(LoadCursor(NULL, IDC_WAIT));
		SendMessage(GetDlgItem(hDlg, IDC_LIST_FILE), WM_SETREDRAW, (WPARAM)FALSE, 0);

		CretaeList(GetDlgItem(hDlg, IDC_LIST_FILE));
		ListView_SortItems(GetDlgItem(hDlg, IDC_LIST_FILE), CompareFunc, 1);

		CmboBox_AddPath(GetDlgItem(hDlg, IDC_COMBO_PATH), path);

		SetCursor(NULL);
		SendMessage(GetDlgItem(hDlg, IDC_LIST_FILE), WM_SETREDRAW, (WPARAM)TRUE, 0);
		break;

	case WM_NOTIFY:
		return ListView_NotifyProc(hDlg, lParam);

	case WM_LVCLICK:
		if(ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_FILE), -1, LVIS_SELECTED) != -1){
			SendMessage(hDlg, WM_COMMAND, IDOK, 0);
		}
		break;

	case WM_LVITEMCHANGED:
		if((i = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_FILE), -1, LVIS_SELECTED)) == -1){
			break;
		}
		*buf = TEXT('\0');
		ListView_GetItemText(GetDlgItem(hDlg, IDC_LIST_FILE), i, 0, buf, BUF_SIZE - 1);
		if(CheckDir(buf) == TRUE){
			break;
		}
		SendDlgItemMessage(hDlg, IDC_EDIT_NAME, WM_SETTEXT, 0, (LPARAM)buf);
		break;

	case WM_LVKEYDOWN:
		if(((LV_KEYDOWN *)lParam)->wVKey == VK_BACK){
			SendMessage(hDlg, WM_COMMAND, IDC_BUTTON_UP, 0);
			break;
		}
		break;

	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDC_EDIT_NAME:
			switch(HIWORD(wParam)){
			case EN_SETFOCUS:
				SHSipPreference(hDlg, SIP_UP);
				break;
			case EN_KILLFOCUS:
				SHSipPreference(hDlg, SIP_DOWN);
				break;
			}
			break;

		case IDC_COMBO_PATH:
			if(HIWORD(wParam) == CBN_CLOSEUP){
				i = SendDlgItemMessage(hDlg, IDC_COMBO_PATH, CB_GETCURSEL, 0, 0);
				if(i < SendDlgItemMessage(hDlg, IDC_COMBO_PATH, CB_GETCOUNT, 0, 0) - 1){
					CmboBox_GetPath(GetDlgItem(hDlg, IDC_COMBO_PATH),
						SendDlgItemMessage(hDlg, IDC_COMBO_PATH, CB_GETCURSEL, 0, 0), path);
					SendMessage(hDlg, WM_SHOWFILELIST, 0, 0);
				}
			}
			break;

		case IDC_BUTTON_UP:
			for(p = path + lstrlen(path) - 1; p > path && *p != TEXT('\\'); p--);
			if(p <= path){
				*path = TEXT('\0');
			}else{
				*p = TEXT('\0');
			}
			SendMessage(hDlg, WM_SHOWFILELIST, 0, 0);
			break;

		case IDCANCEL:
			ListView_DeleteAllItems(GetDlgItem(hDlg, IDC_LIST_FILE));
			DestroyWindow(GetDlgItem(hDlg, IDC_LIST_FILE));
			EndDialog(hDlg, FALSE);
			break;

		case IDOK:
			if((i = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_FILE), -1, LVIS_SELECTED)) != -1){
				*buf = TEXT('\0');
				ListView_GetItemText(GetDlgItem(hDlg, IDC_LIST_FILE), i, 0, buf, BUF_SIZE - 1);
				if(CheckDir(buf) == TRUE){
					ChangeSelPath(buf);
					SendMessage(hDlg, WM_SHOWFILELIST, 0, 0);
					break;
				}
			}
			*filename = TEXT('\0');
			SendDlgItemMessage(hDlg, IDC_EDIT_NAME, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)filename);
			if(*filename == TEXT('\0')){
				break;
			}
			if(ChangeSelPath(filename) == TRUE){
				SendMessage(hDlg, WM_SHOWFILELIST, 0, 0);
				break;
			}
			ListView_DeleteAllItems(GetDlgItem(hDlg, IDC_LIST_FILE));
			EndDialog(hDlg, TRUE);
			break;
		}
		break;

	default:
		return FALSE;
	}
	return TRUE;
}


/******************************************************************************

	SelectFile

	僼傽僀儖慖戰

******************************************************************************/

BOOL SelectFile(HWND hDlg, HINSTANCE hInst, TCHAR *fname, TCHAR *ret)
{
	BOOL rc;

	rc = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG_SELECTFILE), hDlg, SelectFileDlgProc, (LPARAM)fname);
	if(rc == TRUE){
		wsprintf(ret, TEXT("%s\\%s"), path, filename);
	}
	if(FileList != NULL){
		LocalFree(FileList);
	}
	FileList = NULL;
	FileListCnt = 0;
	return rc;
}
/* End of source */

⌨️ 快捷键说明

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