让复选框的选择决定遍历文件的类型,最后把目录下选定类型的文件显示在列表控件中?

xixia07m 2017-07-10 11:43:18

// remarksecretDlg.h : 头文件
//

#pragma once
#include "afxcmn.h"
#include <string>


// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult);
CListCtrl mlist; //自注:控件变量在这里设置

//wstring suffixStr;
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedCheck1();
afx_msg void OnBnClickedCheck2();
afx_msg void OnBnClickedCheck3();
afx_msg void OnBnClickedCheck4();
afx_msg void OnBnClickedCheck5();
};


/ remarksecretDlg.cpp : 实现文件
//


#include "stdafx.h"
#include "remarksecret.h"
#include "remarksecretDlg.h"
//#include "afxdialogex.h"
#include "Resource.h"
//#include "windows.h"
//#include <tchar.h>
#include <algorithm>
//#include <string>
#include <vector>
//#include <string>
//#include <iterator>
//#include <functional>



#ifdef _DEBUG
#define new DEBUG_NEW
#endif
using std::wstring;
wstring suffixStr;


struct FileInfo
{
std::wstring szFileName;
std::wstring szFilePath;
std::wstring szCreateTime;
};

BEGIN_MESSAGE_MAP(CremarksecretDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CremarksecretDlg::OnLvnItemchangedList1)
ON_BN_CLICKED(IDC_BUTTON1, &CremarksecretDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_CHECK1, &CremarksecretDlg::OnBnClickedCheck1)
ON_BN_CLICKED(IDC_CHECK2, &CremarksecretDlg::OnBnClickedCheck2)
ON_BN_CLICKED(IDC_CHECK3, &CremarksecretDlg::OnBnClickedCheck3)
ON_BN_CLICKED(IDC_CHECK4, &CremarksecretDlg::OnBnClickedCheck4)
ON_BN_CLICKED(IDC_CHECK5, &CremarksecretDlg::OnBnClickedCheck5)
END_MESSAGE_MAP()

void CremarksecretDlg::OnBnClickedCheck1()
{
// TODO: 在此添加控件通知处理程序代码
//extern std::wstring suffixStr;
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck());
if(nstatus=1)
{
suffixStr==_T("doc")||suffixStr==_T("docx");
}
else
{
suffixStr==_T(" ");
}
}


void CremarksecretDlg::OnBnClickedCheck2()
{
// TODO: 在此添加控件通知处理程序代码
//extern std::wstring suffixStr;
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK2))->GetCheck());
if(nstatus=1)
{
suffixStr==_T("pdf");
}
else
{
suffixStr==_T(" ");
}
}


void CremarksecretDlg::OnBnClickedCheck3()
{
// TODO: 在此添加控件通知处理程序代码
//extern std::wstring suffixStr;
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK3))->GetCheck());
if(nstatus=1)
{
suffixStr==_T("ppt")||suffixStr==_T("pptx");
}
else
{
suffixStr==_T(" ");
}
}


void CremarksecretDlg::OnBnClickedCheck4()
{
// TODO: 在此添加控件通知处理程序代码
//extern std::wstring suffixStr;
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK4))->GetCheck());
if(nstatus=1)
{
suffixStr==_T("xls")||suffixStr==_T("xlsx"); ;
}
else
{
suffixStr==_T(" ");
}
}


void CremarksecretDlg::OnBnClickedCheck5()
{
// TODO: 在此添加控件通知处理程序代码
//extern std::wstring suffixStr;
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK5))->GetCheck());
if(nstatus=1)
{
suffixStr==_T("txt");
}
else
{
suffixStr==_T(" ");
}

}


//递归遍历所有文件
void find (LPCTSTR lpPath,std::vector<FileInfo>&FileList)
{
//std::vector<FileInfo>fileList;
std::wstring szFind(lpPath);
WIN32_FIND_DATA FindFileData;
szFind+=_T("\\*.*");
HANDLE hFind=::FindFirstFile(szFind.c_str(),&FindFileData);
if(INVALID_HANDLE_VALUE==hFind) return;
do//while(1)
{
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{//dir 目录在列表中可以双击打开,不要递归!
if(FindFileData.cFileName[0]!='.')
{
std::wstring szPath(lpPath);
szPath+=_T("\\");
szPath+=FindFileData.cFileName;
TRACE1("%s\n",szPath.c_str());
find(szPath.c_str(),FileList); //自注:这里小写的fileList不行。
}
}
else
{//file
std::wstring strFileName=FindFileData.cFileName;//文件名
/*std::wstring*/suffixStr=strFileName.substr(strFileName.find_last_of('.')+1);
void OnBnClickedCheck5();
if(suffixStr==_T("txt")) //根据后缀选出自己感兴趣的文件,比如txt文件,注意大小写,如果想不区分大小写,需要自己统一转化为大写或小写然后比较
{
FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
swprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
std::wstring strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi; //自注:结构变量不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str()); //自注:这句是后加上的
FileList.push_back(fi); //自注:push_back(fi)是什么意思?
//fi=FileList;
}
void OnBnClickedCheck1();
if(suffixStr==_T("doc")) //根据后缀选出自己感兴趣的文件,比如txt文件,注意大小写,如果想不区分大小写,需要自己统一转化为大写或小写然后比较
{
FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
swprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
std::wstring strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi;
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
FileList.push_back(fi);
}
else if(suffixStr==_T("docx")) //根据后缀选出自己感兴趣的文件,比如txt文件,注意大小写,如果想不区分大小写,需要自己统一转化为大写或小写然后比较
{
FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
swprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
std::wstring strFilePath=lpPath;
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi;
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
FileList.push_back(fi);
}
void OnBnClickedCheck2();

}
}while(::FindNextFile(hFind,&FindFileData));
}
//FindClose(hFind);

#define BIF_NEWDIALOGSTYLE 0x0040

// CremarksecretDlg 消息处理程序


// TODO: 在此添加额外的初始化代码
mlist.SetExtendedStyle(mlist.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
mlist.InsertColumn(0,_T("操作"),LVCFMT_LEFT,80);//100指定每列宽度
mlist.InsertColumn(1,_T("文件名"),LVCFMT_LEFT,500);
mlist.InsertColumn(2,_T("创建时间"),LVCFMT_LEFT,120);
mlist.InsertColumn(3,_T("路径"),LVCFMT_LEFT,360);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

void CremarksecretDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 自注:以下是我添加的代码
BROWSEINFO bi; //BROWSEINFO结构有很多成员参数可以自己设置
ZeroMemory(&bi,sizeof(BROWSEINFO)); //将以&bi为起始地址,大小为sizeof(BROWSEINFO)的内存区域用0填充
bi.ulFlags=BIF_BROWSEINCLUDEFILES; //设置弹出的对话框属性。此处意思为包含文件。如果不设这个值,默认的是只有文件夹。ulFlags还可以定义很多别的属性
bi.ulFlags=BIF_NEWDIALOGSTYLE; //窗口可以调整大小,有新建文件夹按钮
LPITEMIDLIST pidl = SHBrowseForFolder(&bi); //Displays a dialog box enabling the user to select a Shell folder.
TCHAR * path = new TCHAR[MAX_PATH]; //自注:点击按钮获得的地址在path变量中
if(pidl!= NULL)
{
SHGetPathFromIDList(pidl,path); //Converts an item identifier list to a file system path
//MessageBox(path);
}

//FileInfo fileList;
using std::vector;
vector<FileInfo>FileList; //自注:程序不承认FileList是个结构变量
//std::vector<FileInfo>fileList;
find(/*_T("D:\\xsmposc\\XSMPos"*/path,FileList); //取得文件信息,可自行插入列表框
//FileInfo fileList;
UINT nCount=FileList.size(); //得到控件的行数
//Filelist=fi;
int i;
CString empty;
CString name;
CString time;
CString mypath;
for(i=0;i<nCount;i++)
{
empty.Format(_T(""),i+1);
mlist.InsertItem(i,empty);
name.Format(_T("%s"),FileList[i].szFileName.c_str());
mlist.SetItemText(i,1,name); //插入列
time.Format(_T("%s"),FileList[i].szCreateTime.c_str());
mlist.SetItemText(i,2,time);
mypath.Format(_T("%s"),FileList[i].szFilePath.c_str());
mlist.SetItemText(i,3,mypath);
}

}



这个程序中有5个复选框,它们分别是doc/docx, pdf , ppt/pptx, xls/xlsx, txt,现在要按照选取的文件类型把点击文件按钮后出现的浏览文件夹对话框中选择的目录下的特定类型的
文件都遍历出来,然后显示在列表控件CListctrl中,分别显示文件名、创建时间、路径,请问要想实现控制文件类型的遍历如何改动find()函数,请高手明示,多谢。
...全文
652 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-07-24
  • 打赏
  • 举报
回复
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
schlafenhamster 2017-07-21
  • 打赏
  • 举报
回复
再给你一次代码

/////////////////////////////////////////////////////////////////////////////////////
string suffixStr;// UNICODE wstring

BOOL CShowdirDlg::GetTypes(string &str)
{
	str="";// 1002 -> 1006
	char tmp[10];
	for (UINT n=IDC_CHECK1;n<=IDC_CHECK5; n++) 
	{
		if(((CButton*)GetDlgItem(n))->GetCheck() == 1)
		{
			tmp[0]=0;
			GetDlgItem(n)->GetWindowText(tmp,9);
			str += tmp;
		}
	}
	if(str.compare("")==0) return FALSE;
	str += '.';// seperater
	return TRUE;
}
void find(LPCTSTR lpPath,vector<FileInfo>& FileList)
{
	string szFind(lpPath);
	WIN32_FIND_DATA FindFileData;
	szFind+=_T("\\*.*");
	HANDLE hFind=::FindFirstFile(szFind.c_str(),&FindFileData);
	if(INVALID_HANDLE_VALUE==hFind) return;
//
	do
	{
		if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{// dir
			if(FindFileData.cFileName[0] != '.') 
			{
				string szPath(lpPath);
				szPath+=_T("\\");
				szPath+=FindFileData.cFileName;
				//TRACE1("%s\n",szPath.c_str());
				find(szPath.c_str(),FileList);
			}
		}
		else
		{// file
			string strFileName=FindFileData.cFileName;//文件名
			//TRACE1("%s\n",strFileName.c_str());
			int at = strFileName.find_last_of('.'); 
			if(at<0) continue;// file without extention
			string ext=strFileName.substr(at);
			//TRACE1("%s\n",ext.c_str());
//
			at=0;// reset
			while(((int)at=suffixStr.find(ext,at))>=0)// find type
		//	if(stricmp(suffixStr.c_str(),_T(".txt"))==0)
			{// not suffixStr.c_str()==_T(".txt") ; never == !
				//afxDump << at << "\n";
				at+=ext.size();// move to seperetor '.'
				if(suffixStr[at]!='.') continue;// not wanted !
// 
				FILETIME ft=FindFileData.ftCreationTime;
				SYSTEMTIME st={0};
				TCHAR buf[64]={0};
				FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);
				FileTimeToSystemTime(&ft,&st); 
				sprintf(buf,_T("%4d年%02d月%02d日%02d:%02d:%02d"),
					st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
				string strFilePath=lpPath;
				FileInfo fi;
				fi.szFileName=strFileName;
				fi.szFilePath=strFilePath;
				fi.szCreateTime=buf;
				//TRACE1("%s\n",strFileName.c_str());
				FileList.push_back(fi);
			}
		}
	} while (::FindNextFile (hFind, &FindFileData));
}

#define BIF_NEWDIALOGSTYLE 0x0040
void CShowdirDlg::OnButton1() 
{
//	static LPITEMIDLIST s_pidl=0;
// new file types
	if(!GetTypes(suffixStr))
	{
		AfxMessageBox("No file extention selected!");
		return;
	}
//	afxDump << suffixStr.c_str() << "\n";
// get directory
	BROWSEINFO bi;
    ZeroMemory(&bi,sizeof(BROWSEINFO));
//	bi.ulFlags=BIF_RETURNFSANCESTORS;
//	bi.ulFlags=BIF_BROWSEINCLUDEFILES;
	bi.ulFlags |= BIF_NEWDIALOGSTYLE;//窗口可以调整大小,有新建文件夹按钮
    bi.lpszTitle="指定要处理的文件夹";
//    if(s_pidl) 	bi.pidlRoot= s_pidl;
// Displays a dialog box enabling the user to select a Shell folder.
	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
//
	TCHAR * path = new TCHAR[MAX_PATH];
    if(pidl != NULL)
    {// Converts an item identifier list to a file system path
        SHGetPathFromIDList(pidl,path); 
    }
	else
	{
		return;
	}
//	if(pidl) s_pidl=pidl;
// window ruined by SHBrowseForFolder
	m_list.DeleteAllItems();
	RedrawWindow();
// get files info
	CWaitCursor wait;
    vector<FileInfo>fileList;
    find(path,fileList);
// fill list
    UINT nCount=fileList.size();
    UINT i;
    CString empty;
    CString name;
    CString time;
    CString mypath;
	m_list.LockWindowUpdate();
	for(i=0;i<nCount;i++)
	{
		empty.Format("%d",i);
		m_list.InsertItem(i,empty);
		name.Format("%s",fileList[i].szFileName.c_str());
		m_list.SetItemText(i,1,name);
		time.Format("%s",fileList[i].szCreateTime.c_str());
		m_list.SetItemText(i,2,time);
		mypath.Format("%s",fileList[i].szFilePath.c_str());
		m_list.SetItemText(i,3,mypath);
	}
	m_list.UnlockWindowUpdate();
}
schlafenhamster 2017-07-21
  • 打赏
  • 举报
回复
1 给你说 不要 OnBnClickedCheck1() 。。。 2 多加一个 即 “doc” “docx” 是 2个按钮
xixia07m 2017-07-21
  • 打赏
  • 举报
回复
我的复选框单击响应消息函数如下:我现在想让复选框选中后,让suffixStr对应的后缀名能涵盖doc和docx,所以按如下方法写了即用"?",但是实际生成程序时证明这样写不行,请问有没有类似的可以成功实现涵盖功能的类似?这样的字符呢?多谢!

void CremarksecretDlg::OnBnClickedCheck1()
{
    // TODO: 在此添加控件通知处理程序代码
    //extern std::wstring suffixStr;
    int nstatus=(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck());
    if(nstatus=1)
    {
       suffixStr==_T("doc?")      //||suffixStr==_T("docx");   
    }
    else
    {
       suffixStr==_T(" ");
    }
}
schlafenhamster 2017-07-20
  • 打赏
  • 举报
回复
头文件

// showdirDlg.h : header file
//

#if !defined(AFX_SHOWDIRDLG_H__F25B36DD_2D3F_4037_A387_39BD82DE3D8F__INCLUDED_)
#define AFX_SHOWDIRDLG_H__F25B36DD_2D3F_4037_A387_39BD82DE3D8F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CShowdirDlg dialog

class CShowdirDlg : public CDialog
{
// Construction
public:
	CShowdirDlg(CWnd* pParent = NULL);	// standard constructor
	BOOL GetTypes(string &str);
// Dialog Data
	//{{AFX_DATA(CShowdirDlg)
	enum { IDD = IDD_SHOWDIR_DIALOG };
	CListCtrl	m_list;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CShowdirDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CShowdirDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnButton1();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SHOWDIRDLG_H__F25B36DD_2D3F_4037_A387_39BD82DE3D8F__INCLUDED_)
schlafenhamster 2017-07-20
  • 打赏
  • 举报
回复

// showdirDlg.cpp : implementation file
//

#include "stdafx.h"

#include "showdir.h"
#include "showdirDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
typedef struct FileInfo
{
    string szFileName;
    string szFilePath;
    string szCreateTime;
}FileInfo;

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();
	
	// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA
	
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL
	
	// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShowdirDlg dialog

CShowdirDlg::CShowdirDlg(CWnd* pParent /*=NULL*/)
: CDialog(CShowdirDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CShowdirDlg)
	// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CShowdirDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CShowdirDlg)
	DDX_Control(pDX, IDC_LIST1, m_list);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CShowdirDlg, CDialog)
//{{AFX_MSG_MAP(CShowdirDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShowdirDlg message handlers

BOOL CShowdirDlg::OnInitDialog()
{
    // IDM_ABOUTBOX 必须在系统命令范围内。
	CDialog::OnInitDialog();
	
	// Add "About..." menu item to system menu.
	
	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
	
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	char a[]="";//elloworld"; =00 CC CC CC ;
int n=sizeof("helloworld");//10+'0'
	n=sizeof("");//1
	n=sizeof("0");//2
	n=sizeof("01");//3
	n=sizeof("012");//4

	//    ShowWindow(SW_MINIMIZE);
	
    m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); 
    m_list.InsertColumn(0,_T(""),LVCFMT_LEFT,40);
    m_list.InsertColumn(1,_T("文件名"),LVCFMT_LEFT,150);
    m_list.InsertColumn(2,_T("创建时间"),LVCFMT_LEFT,200);
    m_list.InsertColumn(3,_T("路径"),LVCFMT_LEFT,350);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CShowdirDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CShowdirDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting
		
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		
		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		
		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CShowdirDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
/////////////////////////////////////////////////////////////////////////////////////
string suffixStr;// UNICODE wstring

BOOL CShowdirDlg::GetTypes(string &str)
{
	str="";// 1002 -> 1006
	char tmp[10];
	for (UINT n=IDC_CHECK1;n<=IDC_CHECK5; n++) 
	{
		if(((CButton*)GetDlgItem(n))->GetCheck() == 1)
		{
			tmp[0]=0;
			GetDlgItem(n)->GetWindowText(tmp,9);
			str += tmp;
		}
	}
	if(str.c_str()=="") return FALSE;
	str += '.';// seperater
	return TRUE;
}

void find(LPCTSTR lpPath,vector<FileInfo>& FileList)
{
	string szFind(lpPath);
	WIN32_FIND_DATA FindFileData;
	szFind+=_T("\\*.*");
	HANDLE hFind=::FindFirstFile(szFind.c_str(),&FindFileData);
	if(INVALID_HANDLE_VALUE==hFind) return;
	do
	{
		if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{// dir 目录 在 列表中 可以 双击 打开 ,不要 递归 !
			if(FindFileData.cFileName[0] != '.') 
			{
				string szPath(lpPath);
				szPath+=_T("\\");
				szPath+=FindFileData.cFileName;
				//TRACE1("%s\n",szPath.c_str());
				find(szPath.c_str(),FileList);
			}
		}
		else
		{// file
			string strFileName=FindFileData.cFileName;//文件名
			//TRACE1("%s\n",strFileName.c_str());
			int at = strFileName.find_last_of('.'); 
			if(at<0) continue;// file without extention
			string ext=strFileName.substr(at);
			TRACE1("%s\n",ext.c_str());
//
			at=0;// reset
			while(((int)at=suffixStr.find(ext,at))>=0)// find type
		//	if(stricmp(suffixStr.c_str(),_T(".txt"))==0)
			{// not suffixStr.c_str()==_T(".txt") ; never == !
				//afxDump << at << "\n";
				at+=ext.size();// move to seperetor '.'
				if(suffixStr[at]!='.') continue;// not wanted !
// 
				FILETIME ft=FindFileData.ftCreationTime;   //取得创建时间
				SYSTEMTIME st={0};
				TCHAR buf[64]={0};
				FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);    //转换成本地时间
				FileTimeToSystemTime(&ft,&st);     //在这句之前加上上一句,就不用再小时那里+8了。
				sprintf(buf,_T("%4d年%02d月%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
				string strFilePath=lpPath;
				//strFilePath+=_T("\\");
				//strFilePath+=FindFileData.cFileName;   //文件全路径名
				FileInfo fi;
				fi.szFileName=strFileName;
				fi.szFilePath=strFilePath;
				fi.szCreateTime=buf;
				//TRACE1("%s\n",strFileName.c_str());
				FileList.push_back(fi);
			}
		}
	} while (::FindNextFile (hFind, &FindFileData));
}

#define BIF_NEWDIALOGSTYLE 0x0040
void CShowdirDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CWaitCursor wait;
//
	BROWSEINFO bi;                       //BROWSEINFO结构有很多成员参数可以自己设置
    ZeroMemory(&bi,sizeof(BROWSEINFO));  //将以&bi为起始地址,大小为sizeof(BROWSEINFO)的内存区域用0填充
    bi.ulFlags=BIF_BROWSEINCLUDEFILES;   //设置弹出的对话框属性。此处意思为包含文件。如果不设这个值,默认的是只有文件夹。ulFlags还可以定义很多别的属性
    bi.ulFlags=BIF_NEWDIALOGSTYLE;       //窗口可以调整大小,有新建文件夹按钮
    bi.lpszTitle="指定要处理的文件夹";   //在窗口内显示提示用户的语句
    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);   //Displays a dialog box enabling the user to select a Shell folder.
//
    TCHAR * path = new TCHAR[MAX_PATH];
    if(pidl != NULL)
    {
        SHGetPathFromIDList(pidl,path); //Converts an item identifier list to a file system path
    }
// window ruined by SHBrowseForFolder
	m_list.DeleteAllItems();
	RedrawWindow();
// new file types
	GetTypes(suffixStr);
//	afxDump << suffixStr.c_str() << "\n";
    vector<FileInfo>fileList;
    find(path,fileList);           //取得文件信息,可自行插入列表框
    UINT nCount=fileList.size();   //得到控件的行数
    UINT i;
    CString empty;
    CString name;
    CString time;
    CString mypath;
	m_list.LockWindowUpdate();
	for(i=0;i<nCount;i++)
	{
		empty.Format("%d",i);
		m_list.InsertItem(i,empty);
		name.Format("%s",fileList[i].szFileName.c_str());
		m_list.SetItemText(i,1,name);
		time.Format("%s",fileList[i].szCreateTime.c_str());
		m_list.SetItemText(i,2,time);
		mypath.Format("%s",fileList[i].szFilePath.c_str());
		m_list.SetItemText(i,3,mypath);
	}
	m_list.UnlockWindowUpdate();
}
稍有改动, 因为 原来的 suffixStr.find 只 部分匹配,如 选 ‘.cpp’ 那么 "*.c" 也会 被选中。
xixia07m 2017-07-20
  • 打赏
  • 举报
回复
你能把你.cpp文件的代码都贴过来我看看吗,我现在搞不清楚有些细节。
schlafenhamster 2017-07-20
  • 打赏
  • 举报
回复
BOOL CShowdirDlg::GetTypes(string &str){} // 无‘;‘ 是定义 BOOL CShowdirDlg::GetTypes(string &str); // 是声明 不是有个 全局变量 string suffixStr;// 把它作为 实参 传递
schlafenhamster 2017-07-19
  • 打赏
  • 举报
回复

#define BIF_NEWDIALOGSTYLE 0x0040
void CShowdirDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CWaitCursor wait;

	BROWSEINFO bi;                       //BROWSEINFO结构有很多成员参数可以自己设置
    ZeroMemory(&bi,sizeof(BROWSEINFO));  //将以&bi为起始地址,大小为sizeof(BROWSEINFO)的内存区域用0填充
    bi.ulFlags=BIF_BROWSEINCLUDEFILES;   //设置弹出的对话框属性。此处意思为包含文件。如果不设这个值,默认的是只有文件夹。ulFlags还可以定义很多别的属性
    bi.ulFlags=BIF_NEWDIALOGSTYLE;       //窗口可以调整大小,有新建文件夹按钮
    bi.lpszTitle="指定要处理的文件夹";   //在窗口内显示提示用户的语句
    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);   //Displays a dialog box enabling the user to select a Shell folder.
//
    TCHAR * path = new TCHAR[MAX_PATH];
    if(pidl != NULL)
    {
        SHGetPathFromIDList(pidl,path); //Converts an item identifier list to a file system path
    }
//
	GetTypes(suffixStr);
//
    vector<FileInfo>fileList;
    find(path,fileList);           //取得文件信息,可自行插入列表框
    UINT nCount=fileList.size();   //得到控件的行数
    UINT i;
    CString empty;
    CString name;
    CString time;
    CString mypath;
	m_list.LockWindowUpdate();
	for(i=0;i<nCount;i++)
	{
		empty.Format("%d",i);
		m_list.InsertItem(i,empty);
		name.Format("%s",fileList[i].szFileName.c_str());
		m_list.SetItemText(i,1,name);
		time.Format("%s",fileList[i].szCreateTime.c_str());
		m_list.SetItemText(i,2,time);
		mypath.Format("%s",fileList[i].szFilePath.c_str());
		m_list.SetItemText(i,3,mypath);
	}
	m_list.UnlockWindowUpdate();
}
给过你了 吧。
schlafenhamster 2017-07-19
  • 打赏
  • 举报
回复
重要部分的代码 都给你了 find 直接用 GetTypes(string &str) 改个 对话框名
xixia07m 2017-07-19
  • 打赏
  • 举报
回复
请问schlafenhamster,您贴出来的那张成功程序的截图重要部分的代码能给我看看吗?
Eleven 2017-07-19
  • 打赏
  • 举报
回复
引用 43 楼 xixia07m 的回复:
现在编译通过了,但是生成的程序,功能不对,我只选了pdf类型的文件,而结果是所选目录下的pdf、doc、docx文件都出来了,这怎么办呢?是不是我的复选框单击消息响应程序有问题啊?
你枚举出所有文件以后,自己过滤一下即可~
schlafenhamster 2017-07-19
  • 打赏
  • 举报
回复
程序中 不是有 TRACE 吗 ? 打开看看 ! 另外 if((int)suffixStr.find(ext)>=0) 中 (int) 转换 很 重要 因为 .find(ext) 返回 UINT 没知道时 返回 -1(0xFFFFFFFF)
xixia07m 2017-07-19
  • 打赏
  • 举报
回复
你在这里仅仅是个声明而已啊!
xixia07m 2017-07-19
  • 打赏
  • 举报
回复
引用 54 楼 schlafenhamster 的回复:
///////////////////////////////////////////////////////////////////////////////////// string suffixStr;// UNICODE wstring // GetTypes(suffixStr);// 实参 是 suffixStr , BOOL CShowdirDlg::GetTypes(string &str)// 形参是 &str
那实参的真实值是怎么来的,怎么形成的?
xixia07m 2017-07-19
  • 打赏
  • 举报
回复
现在编译通过了,但是生成的程序,功能不对,我只选了pdf类型的文件,而结果是所选目录下的pdf、doc、docx文件都出来了,这怎么办呢?是不是我的复选框单击消息响应程序有问题啊?
schlafenhamster 2017-07-19
  • 打赏
  • 举报
回复
///////////////////////////////////////////////////////////////////////////////////// string suffixStr;// UNICODE wstring // GetTypes(suffixStr);// 实参 是 suffixStr , BOOL CShowdirDlg::GetTypes(string &str)// 形参是 &str
schlafenhamster 2017-07-19
  • 打赏
  • 举报
回复
5个复选框 在资源中给值 必须是 “.xxx” 不要按钮响应。 即 删除 OnBnClickedCheck1(),.........OnBnClickedCheck5()。 经过 GetTypes(string &str) 后 扩展名 被 连接到一起,必须是: .doc.pdf.ppt.xls.xlsx,txt,
xixia07m 2017-07-19
  • 打赏
  • 举报
回复
那你 GetTypes(suffixStr);这句的实参是从哪里得到的?最好能有代码提示。 find函数中 if((int)suffixStr.find(extention)>=0)这句的形参该怎么理解?
schlafenhamster 2017-07-19
  • 打赏
  • 举报
回复
5个复选框 的 text 不是 doc/docx,pdf,ppt/pptx,xls/xlsx,txt 应该是 .doc .docx .pdf .pptx .xls .xlsx .txt 这些text 在资源中已经 给定,不需要 点击命令,也不需要改变。 经过 GetTypes(string &str) (只需要 IDC_CHECK1 。。。) 后 为 “.doc.docx.pdf.ppt.pptx.xls.xlsx.txt " 没有 “,” 也没有 “/”.
加载更多回复(44)
第1章Range(单元格)对象8 技巧1单元格的引用方法8 1-1使用Range属性8 1-2使用Cells属性9 1-3使用快捷记号9 1-4使用Offset属性10 1-5使用Resize属性11 1-6使用Union方法12 1-7使用UsedRange属性12 1-8使用CurrentRegion属性13 技巧2选定单元格区域的方法13 2-1使用Select方法13 2-2使用Activate方法14 2-3使用Goto方法15 技巧3获得指定行、列最后一个非空单元格15 技巧4定位单元格18 技巧5查找单元格19 5-1使用Find方法19 5-2使用Like运算符23 技巧6替换单元格内字符串24 技巧7复制单元格区域25 技巧8仅复制数值到另一区域28 8-1使用选择性粘贴28 8-2直接赋值的方法29 技巧9单元格自动进入编辑状态30 技巧10禁用单元格拖放功能30 技巧11单元格格式操作31 11-1单元格字体格式设置31 11-2设置单元格内部格式33 11-3为单元格区域添加边框34 11-4灵活设置单元格的行高列宽36 技巧12单元格的数据有效性37 12-1在单元格建立数据有效性37 12-2判断单元格是否存在数据有效性39 12-3动态的数据有效性39 12-4自动展开数据有效性下拉列表41 技巧13单元格的公式42 13-1在单元格写入公式42 13-2检查单元格是否含有公式43 13-3判断单元格公式是否存在错误44 13-4取得单元格公式的引用单元格45 13-5将单元格的公式转换为数值46 技巧14单元格的批注47 14-1判断单元格是否存在批注47 14-2为单元格添加批注48 14-3删除单元格的批注49 技巧15合并单元格操作50 15-1判断单元格区域是否存在合并单元格50 15-2合并单元格时连接每个单元格的文本51 15-3合并内容相同的连续单元格52 15-4取消合并单元格时在每个单元格保留内容54 技巧16高亮显示单元格区域55 技巧17双击被保护单元格时不显示提示消息框56 技巧18重新计算工作表指定区域58 技巧19录入数据后单元格自动保护58 技巧20工作表事件Target参数的使用方法60 20-1使用单元格的Address 属性60 20-2使用Column属性和Row属性61 20-3使用Intersect方法61 第2章Worksheet(工作表)对象63 技巧21引用工作表的方式63 21-1使用工作表的名称63 21-2使用工作表的索引号63 21-3使用工作表的代码名称64 21-4使用ActiveSheet属性引用活动工作表64 技巧22选择工作表的方法65 技巧23遍历工作表的方法66 23-1使用For...Next 语句66 23-2使用For Each...Next 语句68 技巧24在工作表上下翻页69 技巧25工作表的添加与删除70 技巧26禁止删除指定工作表74 技巧27自动建立工作表目录76 技巧28工作表的深度隐藏78 技巧29防止更改工作表的名称80 技巧30工作表一次插入多行81 技巧31删除工作表的空行82 技巧32删除工作表的重复行84 技巧33定位删除特定内容所在的行86 技巧34判断是否选整行87 技巧35限制工作表的滚动区域88 技巧36复制自动筛选后的数据区域89 技巧37使用高级筛选获得不重复记录91 技巧38工作表的保护与解除保护92 技巧39奇偶页打印95 第3章Wordbook(工作簿)对象97 技巧40工作簿的引用方法97 40-1使用工作簿的名称97 40-2使用工作簿的索引号97 40-3使用ThisWorkbook98 40-4使用ActiveWorkbook99 技巧41新建工作簿文件99 技巧42打开指定的工作簿101 技巧43判断指定工作簿是否打开104 43-1遍历Workbooks集合方法104 43-2错误处理方法104 技巧44禁用宏则关闭工作簿105 技巧45关闭工作簿不显示保存对话框109 45-1使用Close方法关闭工作簿109 45-2单击工作簿关闭按钮关闭工作簿111 技巧46禁用工作簿的关闭按钮111 技巧47保存工作簿的方法113 47-1使用Save方法113 47-2直接保存为另一文件名113 47-3保存工作簿副本113 技巧48保存指定工作表为工作簿文件114 技巧49打印预览时不触发事件116 技巧50设置工作簿文档属性信息118 技巧51不打开工作簿取得其他工作簿数据119 51-1使用公式119 51-2使用GetObject函数120 51-3隐藏Application对象121 51-4使用ExecuteExcel4Macro
第1章 页面特效 1.1 HTML页面反向显示 1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放入框架 1.7 保护自己的网页不被放入框架 1.8 打印页面的出错原因 1.9 当前网页调用其他网页 1.10 倒计时载入页面 1.11 定义网页的关键字 1.12 进入页面同时弹出欢迎对话框 1.13 禁止网页另存 1.14 禁止页面加入缓存 1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 1.20 在网页动态添加Script脚本 1.21 用JavaScript随机修改页面的标题 1.22 判断网页加载完毕 1.23 嵌入网页的播放器 1.24 设置指定网页为主页 1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用登录按钮 2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 取得控件的绝对位置 2.8 删除时的确认提示 2.9 按钮只能单击一次 2.10 防止按钮连击 2.11 图片式按钮 2.12 文字显示在按钮底部 2.13 选择不同的列表项就显示不同的按钮 2.14 使用按钮控制文本渐变 2.15 翻页效果的公告栏 2.16 动态设置控件的事件 第3章 字符串文本和输入框特效 3.1 只带下划线的输入框 3.2 限定文本框可输入字符数 3.3 文字过长的省略号 3.4 输出26个英文字母 3.5 首字母变为大写 3.6 textarea自适应文字行数 3.7 禁止文本框的拷贝和粘贴 3.8 控制两个文本框只输其一 3.9 判断编辑器是否包含特殊字符 3.10 判断文本回车的数量 3.11 判断字符串有多少汉字 3.12 去除字符串的前后空格 3.13 刷新时清空所有文本框 3.14 随意改变大小的文本框 3.15 文本框的自动全选 3.16 文本框滚动导航 3.17 按钮获取焦点 3.18 文本框获取焦点弹出下拉框 3.19 文本框简单的单击效果 3.20 文字的打字效果 3.21 文字滚动 3.22 文字滑动 3.23 文字跳动特效 3.24 荧光效果的文本 3.25 文字逐个闪亮-霓虹灯效果 3.26 旋转式的变色文字特效 3.27 黑客帝国的字符下落效果 3.28 获取表单文本框的个数 3.29 光标停在文字最后 3.30 分行取textarea的值 3.31 自动插入文本 3.32 选取textarea的指定行 3.33 文本放大镜 3.34 文本框的默认输入法 3.35 文本框显示网页的内容 3.36 文字的垂直滚动 3.37 文字幻灯片 3.38 随机动态文字效果 3.39 实现textarea的自动滚动 3.40 使用marquee实现文字上下滚动 3.41 类似安装效果的textarea滚动 3.42 始终显示在最顶端的文本 3.43 JavaScript过滤SQL注入字符 3.44 textarea内实现行的翻页效果 3.45 textarea的文本插入 3.46 查找两段文本相同的词句 3.47 自动保存网页输出的文本 3.48 文本编辑器 第4章 鼠标特效 4.1 禁用鼠标右键 4.2 使鼠标滚轮失效 4.3 状态栏显示鼠标位置 4.4 点击鼠标右键到指定页 4.5 鼠标放到图片上会显示另外一张图片 4.6 鼠标形状定义大全 4.7 鼠标移入移出时颜色变化 4.8 跟随鼠标的文字 4.9 跟随鼠标的彩色文字 4.10 跟随鼠标的魔法文字 4.11 跟随鼠标的星星 4.12 跟随鼠标的旋转背景 4.13 图片跟随鼠标 4.14 围绕鼠标的文本 4.15 鼠标旁边的提示信息 4.16 鼠标移到下拉框时自动全部打开 4.17 checkbox鼠标移入移出的特效 第5章 层和框架的特效 5.1 div层提示效果 5.2 层自动滚动到最底端 5.3 div的自动滚动 5.4 div的折迭效果 5.5 圆角div 5.6 动态添加iframe框架 5.7 用层实现长文章分页 5.8 iframe自适应高度 5.9 类似MSN的消息提示 5.10 只打印iframe的内容 第6章 下拉列表特效 6.1 下拉框实现多选 6.2 实现两个select的同步 6.3 被选列表项下次不能再选 6.4 不带滚动条的select 6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 下拉框式网站导航 6.14 综合的搜索引擎 6.15 经典的ListView列表框 第7章 键盘操作和状态栏特效 7.1 按功能键返回首页 7.2 回车实现Tab键功能 7.3 Ctrl+Enter提交数据 7.4 IE屏蔽退格建(Back Space) 7.5 屏蔽键盘所有键 7.6 JavaScript捕获方向键 7.7 状态栏变化信息 7.8 状态栏的跑马灯效果 7.9 状态栏缩放文字 7.10 状态栏文字来回出现 7.11 交替闪烁的状态栏 7.12 状态栏的分解显示文本特效 7.13 状态栏文字从右弹出 7.14 状态栏文字从间分开显示 7.15 屏蔽掉IE自带的功能键 第8章 链接特效 8.1 关闭窗口的链接 8.2 不用CSS实现链接样式的变化 8.3 让链接没有下划线 8.4 去掉超链接点击时的框 8.5 显示页面所有链接 8.6 一个链接打开两个地址 8.7 为链接提供下拉菜单 8.8 按钮链接 8.9 弹出鼠标所指的链接地址 8.10 链接的注释 8.11 为超链接同时绑定单击和双击事件 8.12 带链接的滚动字幕 8.13 会跳舞的链接 8.14 检测站点的连接速度 8.15 文本链接的渐变效果 第9章 表格特效 9.1 用table做的镜框 9.2 全自动单元格 9.2 突出的表格 9.3 让表格有提示信息 9.4 闪亮的表格边框 9.5 表格的宽度固定后内容自动换行 9.6 表格的排序 9.7 表格的斜线 9.8 table的文字滚动 9.9 JavaScript遍历table的行和列 9.10 表格按回车自动生成新行 9.11 单击单元格背景变色 9.12 单击表格某行后其他行隐藏 9.13 单击表头实现表格排序 9.14 单击单元格显示行的详细信息 9.15 表格设置为“100%”时获取表格的宽度 9.16 表格选后变色 9.17 表格隐藏下级表格 9.18 表格自动下移 9.19 动态创建固定列数的表格 9.20 动态改变表格列宽 9.21 动态改变表格的行顺序 9.22 动态生成包含合并单元格的表格 9.23 用键盘上下键实现表格行的上下选择 9.24 用JavaScript隐藏或显示表格列 9.25 滚动的表格 9.26 交换表的行 9.27 动态拖放表格的宽度 9.28 可输入内容的表格 9.29 可以分级的表格隐藏 9.30 动态创建表格并实现分页 9.31 删除表格指定行 9.32 设置表格的交替行颜色 9.33 双击单元格变为可编辑 9.34 鼠标经过表格时列变色 9.35 鼠标选择表格的多行 9.36 使用JavaScript向表格写入数据 9.37 类C# GridView的编辑效果(一) 9.38 类C# GridView的编辑效果(二) 第10章 单选框和复选框 10.1 选择了哪一个单选框 10.2 单击文字实现单选框的选定 10.3 被选复选框求和 10.4 复选框组选 10.5 复选框分组全选 10.6 复选框和文本框的联动效果 10.7 单击任意单元格都能自动选复选框 10.8 调用复选框后面的文字 10.9 两个checkbox互斥问题 10.10 使用checkbox控制文本框 10.11 选表格行前的复选框则行变色 10.12 用JavaScript生成面包屑导航 10.13 复选框的反选 10.14 选所有复选框 10.15 复选框全选(二) 10.16 改变slsect选项的颜色特效 第11章 颜色处理和菜单特效 11.1 背景颜色测试 11.2 RGB颜色在线转换 11.3 颜色切换板 11.4 下拉菜单 11.5 左键弹出式菜单 11.6 目录样式的下拉菜单 11.7 网页的选项卡 11.8 静态导航菜单 11.9 烟花效果的下拉菜单 11.10 网络导航条 11.11 隐藏式菜单 11.12 仿flash菜单 11.13 滚动导航菜单 11.14 幻灯片式的导航菜单 11.15 类似QQ的菜单 11.16 三级联动菜单 11.17 三级联动菜单 11.18 树型目录菜单 第12章 窗口特效与弹出式警告 12.1 无关闭按钮的窗口 12.2 鼠标控制窗口开关 12.3 使窗口只第一次访问时弹出 12.4 禁止弹出警告框 12.5 关闭窗口不提示的方法 12.6 关闭窗口时的提示 12.7 定时弹出窗口 12.8 调整窗口的大小 12.9 打开的窗口居 12.10 打开窗口的等待提示 12.11 在打开的窗口返回数据 12.12 创建弹出窗口 12.13 不允许窗口出现滚动条 12.14 页面打开的同时打开另外两个窗口 12.15 慢慢变大的窗口 12.16 设置新打开的窗口为活动窗口 12.17 页面随窗口的改变而改变 12.18 幻灯片式弹出窗口 12.19 弹出窗口生成器 12.20 关不掉的警告框 12.21 循环的警告框 12.22 屏蔽状态栏的错误提示 12.23 获取模式窗口的值 第13章 日期和时间特效 13.1 指定时间关闭页面 13.2 最简单的时间日期特效 13.3 最简单的获取时间的方法 13.4 随日期变换的文本 13.5 输入框的默认值为今天 13.6 时间相加 13.7 5秒后消失的广告 13.8 12小时制和24小时制的转换 13.9 标题栏显示时间 13.10 超过时间页面自动跳转 13.11 分时段问候用户 13.12 获取服务器时间 13.13 倒计时显示 13.14 背景时钟 13.15 计算某天星期几 13.16 计算时间差 13.17 计算网页停留时间 13.18 记录页面的修改时间 13.19 将日期转换为字符串的方法 13.20 检测是否是闰年 13.21 年份加减函数 13.22 精确到千分之一秒 13.23 离开某天的时间 13.24 判断两个字符串日期的大小 13.25 显示登录时间 13.26 文日期样式(一) 13.27 文日期样式(二) 13.28 状态栏动态显示时间 13.29 页面访问时间限制 13.30 显示英文上、下午的时间 13.31 用JavaScript制作的特色时钟 13.32 自定义的日历 13.33 生日提醒器 13.34 时间的倒影 13.35 使用正则表达式验证日期 13.36 全面的日期选择功能 13.37 全球的时间查看表 13.38 无刷新定时取数据 13.39 取当月的最后一天 第 14章 数字、数组和统计函数特效 14.1 边打字边显示字数 14.2 创建随机数 14.3 JavaScript创建二维数组 14.4 截断小数点位数 14.5 删除数组指定元素 14.6 数字选后放大 14.7 统计字符数的方法 14.8 JavaScript遍历数组 14.9 获取字符串型数组下标的数组长度 14.10 用JavaScript实现数组排序 14.11 数字千分位函数 14.12 读写Cookie的函数 14.13 获取JavaScript函数的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮常用的计算总价效果 14.17 同一用户的来访统计 14.18 十六进制转换为十进制 14.19 将URL转化为16进制 14.20 小写金额转换为大写 14.21 通过两点坐标计算直线距离 14.22 随机抽取彩票 14.23 实时计算折扣 14.24 实用计算器 14.25 前面补0的方法 第15章 图形、图像的特效 15.1 图片变形效果 15.2 图像的翻转效果 15.3 图像的模糊效果 15.4 图像的水印效果 15.5 图形淡出淡隐 15.6 图像的渐隐播放效果 15.7 文字环绕图片 15.8 切换图片的特殊效果 15.9 晃动的图片 15.10 定时消失的图片 15.11 QQ图像一闪一闪的效果 15.12 设置textarea的图片不处于编辑状态 15.13 禁止图像的拷贝 15.14 LOGO像雪花一样落下 15.15 多幅图片分页滚动显示 15.16 循环滚动显示图片 15.17 图片的选择展示 15.18 163图片新闻切换效果 15.19 判断上传图片的大小 15.20 上传图片时预览 15.21 对联广告 15.22 带关闭的对联广告 15.23 到边界反弹的漂浮图片 15.24 用键盘控制图片移动 15.25 预装载图片提高站点速度 15.26 始终在屏幕右下角的图片 15.27 可拖动的图片 15.28 等比例缩略图 15.29 用JavaScript导出图像到Excel 15.30 使用VML打造可改变大小的圆框 15.31 JavaScript实现文档结构图 15.32 判断一副图片是否加载完毕 第16章 页面数据的验证 16.1 验证字符串是否全由数字组成 16.2 验证表单项必须填写 16.3 判断用户输入是否为文 16.4 验证列表的值是否重复 16.5 检测输入框的统一方法 16.6 Email的验证 16.7 不使用正则验证IP地址 16.8 IP地址输入框 16.9 判断变量是否已经定义 16.10 判断方法是否已经定义 16.11 表单验证样式(一) 16.12 判断表单是否已修改 16.13 判断控件类型 16.14 密码强度检查 16.15 身份证的验证 16.16 JavaScript生成验证码 16.17 JavaScript生成验证码(二) 第17章 进度条、滚动条特效处理 17.1 使用符号制作的进度条 17.2 用table制作的进度条 17.3 CSS+JS制作的进度条(一) 17.4 CSS+JS制作的进度条(二) 17.5 进度条形式的下载效果 17.6 滑动条(一) 17.7 滑动条(二) 17.8 窗体滚动条随文字增加自动滚动 17.9 为textarea加横向滚动条 17.10 记录滚动条位置 17.11 彩色滚动条 17.12 Windows XP的滚动条 第18章 在线考题案例 18.1 在线考试代码 18.2 在线考试代码(二) 18.3 在线测试代码(三) 18.4 多选考试题 18.5 在线心理测试脚本 18.6 电脑检测健康情况 第19章 文件处理和打印的技巧 19.1 判断上传文件类型 19.2 改变上传文件控件的样式 19.3 上传文件一次完成 19.4 使用正则判断文件扩展名 19.5 多附件上传效果 19.6 上传控件内容清空 19.7 textarea显示记事本文件的内容 19.8 使用FSO读写文本文件 19.9 自动启动文件下载 19.10 创建Excel文件 19.11 JavaScript导出数据到Excel 19.12 JavaScript读取自身文件内的XML 19.13 将XML文件绑定到table 19.14 使用JavaScript加载XML文件 19.15 动态加载JavaScript文件 19.16 防止JavaScript文件被其他站直接引用 19.17 检查机器是否安装Word 19.18 打印当前页 19.19 打印预览 19.20 隐藏不想打印的页面内容 19.21 使用ExecWB直接打印 19.22 动态绑定XML文件 19.23 Kill Excel的进程 第20章 调用操作系统的应用 20.1 Javascript操作剪贴板 20.2 打开硬盘驱动器 20.3 单击加入收藏夹 20.4 复制标题和网址 20.5 关闭输入法 20.6 检测屏幕分辨率 20.7 检测系统信息 20.8 显示本地计算机信息 20.9 检测浏览器浏览过的站点数 20.10 IE文件菜单的打开命令 20.11 打开Internet选项对话框 20.12 打开Windows系统的画板 20.13 弹出保存对话框 20.14 进入页面弹出收藏夹 20.15 执行客户端的可执行程序 20.16 自动调用OutLook发送邮件 20.17 弹出窗口选择颜色 20.18 弹出框式邮件发送 20.19 把网站作为用户的Active桌面 20.20 判断是否安装了flash插件 第21章 流行技术:DOM和userData的应用技巧 21.1 使用userData保存文本内容 21.2 使用userData保存select标记 21.3 使用userData保存checkbox标记 21.4 使用DOM实现控件的替换 21.5 使用DOM实现控件的复制 21.6 使用DOM判断页面控件是否嵌套 21.7 使用DOM获取页面控件的属性 21.8 将某行排在表格的最后 21.9 动态删除页面的元素 21.10 克隆表格 21.11 拖动表格行改变顺序 21.12 表格操作常用方法 第22章 流行应用:AJAX和Property的应用技巧 22.1 实现关机效果的界面 22.2 关机特效(二) 22.3 评星效果 22.4 输入框自动完成功能 22.5 Ajax效果的字符串过滤 22.6 Gmail右上角的Loading效果 22.7 使用XMLHTTP获取天气预报 22.8 拖拽任意对象 22.9 避免打开无效页面 22.10 用JavaScript调用Google AdSense 22.11 Ajax效果:可拖拽的表格 22.12 JavaScript调用Web Service 22.13 用JavaScript实现编码解码 22.14 创建带属性的对象 22.15 用prototype实现JavaScript的继承 22.16 JavaScript制作哈希表 第23章 其他技巧及特效 23.1 最简单的漂移特效 23.2 JavaScript遍历对象的所有属性 23.3 QQ在线客服 23.4 查看网站的排名 23.5 定义全局变量 23.6 动态生成金字塔效果 23.7 动态修改CSS的样式 23.8 根据浏览器不同设置CSS 23.9 汉字按拼音排序 23.10 划词搜索 23.11 加载大量input控件的快速方法 23.12 简繁体转换 23.13 将HTML转换为JavaScript脚本 23.14 脚本永不出错 23.15 进入网站的签名程序 23.16 浏览器毁灭者 23.17 罗列对象的属性和值 23.18 密码保护页 23.19 全角转半角 23.20 全屏广告 23.21 输入的英文自动全大写 23.23 特殊扩散效果 23.24 提交信息等待界面 23.25 同时调用两个方法 23.26 自定义错误处理样式 23.27 FTP网站登录
第1章 页面特效 1.1 HTML页面反向显示 1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放入框架 1.7 保护自己的网页不被放入框架 1.8 打印页面的出错原因 1.9 当前网页调用其他网页 1.10 倒计时载入页面 1.11 定义网页的关键字 1.12 进入页面同时弹出欢迎对话框 1.13 禁止网页另存 1.14 禁止页面加入缓存 1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 1.20 在网页动态添加Script脚本 1.21 用JavaScript随机修改页面的标题 1.22 判断网页加载完毕 1.23 嵌入网页的播放器 1.24 设置指定网页为主页 1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用登录按钮 2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 取得控件的绝对位置 2.8 删除时的确认提 示 2.9 按钮只能单击一次 2.10 防止按钮连击 2.11 图片式按钮 2.12 文字显示在按钮底部 2.13 选择不同的列表项就显示不同的按钮 2.14 使用按钮控制文本渐变 2.15 翻页效果的公告栏 2.16 动态设置控件的事件 第3章 字符串文本和输入框特效 3.1 只带下划线的输入框 3.2 限定文本框可输入字符数 3.3 文字过长的省略号 3.4 输出26个英文字母 3.5 首字母变为大写 3.6 textarea自适应文字行数 3.7 禁止文本框的拷贝和粘贴 3.8 控制两个文本框只输其一 3.9 判断编辑器是否包含特殊字符 3.10 判断文本回车的数量 3.11 判断字符串有多少汉字 3.12 去除字符串的前后空格 3.13 刷新时清空所有文本框 3.14 随意改变大小的文本框 3.15 文本框的自动全选 3.16 文本框滚动导航 3.17 按钮获取焦点 3.18 文本框获取焦点弹出下拉框 3.19 文本框简单的单击效果 3.20 文字的打字效果 3.21 文字滚动 3.22 文字滑动 3.23 文字跳动特效 3.24 荧光效果的文本 3.25 文字逐个闪亮-霓虹灯效果 3.26 旋转式的变色文字特效 3.27 黑客帝国的字符下落效果 3.28 获取表单文本框的个数 3.29 光标停在文字最后 3.30 分行取textarea的值 3.31 自动插入文本 3.32 选取textarea的指定行 3.33 文本放大镜 3.34 文本框的默认输入法 3.35 文本框显示网页的内容 3.36 文字的垂直滚动 3.37 文字幻灯片 3.38 随机动态文字效果 3.39 实现textarea的自动滚动 3.40 使用marquee实现文字上下滚动 3.41 类似安装效果的textarea滚动 3.42 始终显示在最顶端的文本 3.43 JavaScript过滤SQL注入字符 3.44 textarea内实现行的翻页效果 3.45 textarea的文本插入 3.46 查找两段文本相同的词句 3.47 自动保存网页输出的文本 3.48 文本编辑器 第4章 鼠标特效 4.1 禁用鼠标右键 4.2 使鼠标滚轮失效 4.3 状态栏显示鼠标位置 4.4 点击鼠标右键到指定页 4.5 鼠标放到图片上会显示另外一张图片 4.6 鼠标形状定义大全 4.7 鼠标移入移出时颜色变化 4.8 跟随鼠标的文字 4.9 跟随鼠标的彩色文字 4.10 跟随鼠标的魔法文字 4.11 跟随鼠标的星星 4.12 跟随鼠标的旋转背景 4.13 图片跟随鼠标 4.14 围绕鼠标的文本 4.15 鼠标旁边的提示信息 4.16 鼠标移到下拉框时自动全部打开 4.17 checkbox鼠标移入移出的特效 第5章 层和框架的特效 5.1 div层提示效果 5.2 层自动滚动到最底端 5.3 div的自动滚动 5.4 div的折迭效果 5.5 圆角div 5.6 动态添加iframe框架 5.7 用层实现长文章分页 5.8 iframe自适应高度 5.9 类似MSN的消息提示 5.10 只打印iframe的内容 第6章 下拉列表特效 6.1 下拉框实现多选 6.2 实现两个select的同步 6.3 被选列表项下次不能再选 6.4 不带滚动条的select 6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序
部分目录: VBA常用技巧 目录 VBA常用技巧 1 第1章 Range(单元格)对象 10 技巧1 单元格的引用方法 10 1-1 使用Range属性 10 1-2 使用Cells属性 11 1-3 使用快捷记号 11 1-4 使用Offset属性 12 1-5 使用Resize属性 13 1-6 使用Union方法 14 1-7 使用UsedRange属性 14 1-8 使用CurrentRegion属性 15 技巧2 选定单元格区域的方法 15 2-1 使用Select方法 15 2-2 使用Activate方法 16 2-3 使用Goto方法 17 技巧3 获得指定行、列最后一个非空单元格 17 技巧4 定位单元格 20 技巧5 查找单元格 21 5-1 使用Find方法 21 5-2 使用Like运算符 25 技巧6 替换单元格内字符串 26 技巧7 复制单元格区域 27 技巧8 仅复制数值到另一区域 30 8-1 使用选择性粘贴 30 8-2 直接赋值的方法 31 技巧9 单元格自动进入编辑状态 32 技巧10 禁用单元格拖放功能 32 技巧11 单元格格式操作 33 11-1 单元格字体格式设置 33 11-2 设置单元格内部格式 35 11-3 为单元格区域添加边框 36 11-4 灵活设置单元格的行高列宽 38 技巧12 单元格的数据有效性 39 12-1 在单元格建立数据有效性 39 12-2 判断单元格是否存在数据有效性 41 12-3 动态的数据有效性 41 12-4 自动展开数据有效性下拉列表 43 技巧13 单元格的公式 44 13-1 在单元格写入公式 44 13-2 检查单元格是否含有公式 45 13-3 判断单元格公式是否存在错误 46 13-4 取得单元格公式的引用单元格 47 13-5 将单元格的公式转换为数值 48 技巧14 单元格的批注 49 14-1 判断单元格是否存在批注 49 14-2 为单元格添加批注 50 14-3 删除单元格的批注 51 技巧15 合并单元格操作 52 15-1 判断单元格区域是否存在合并单元格 52 15-2 合并单元格时连接每个单元格的文本 53 15-3 合并内容相同的连续单元格 54 15-4 取消合并单元格时在每个单元格保留内容 56 技巧16 高亮显示单元格区域 57 技巧17 双击被保护单元格时不显示提示消息框 58 技巧18 重新计算工作表指定区域 60 技巧19 录入数据后单元格自动保护 60 技巧20 工作表事件Target参数的使用方法 62 20-1 使用单元格的Address 属性 62 20-2 使用Column属性和Row属性 63 20-3 使用Intersect方法 63 第2章 Worksheet(工作表)对象 65 技巧21 引用工作表的方式 65 21-1 使用工作表的名称 65 21-2 使用工作表的索引号 65 21-3 使用工作表的代码名称 66 21-4 使用ActiveSheet属性引用活动工作表 66 技巧22 选择工作表的方法 67 技巧23 遍历工作表的方法 68 23-1 使用For...Next 语句 68 23-2 使用For Each...Next 语句 70 技巧24 在工作表上下翻页 71 技巧25 工作表的添加与删除 72 技巧26 禁止删除指定工作表 76 技巧27 自动建立工作表目录 78 技巧28 工作表的深度隐藏 80 技巧29 防止更改工作表的名称 82 技巧30 工作表一次插入多行 83 技巧31 删除工作表的空行 84 技巧32 删除工作表的重复行 86 技巧33 定位删除特定内容所在的行 88 技巧34 判断是否选整行 89 技巧35 限制工作表的滚动区域 90 技巧36 复制自动筛选后的数据区域 91 技巧37 使用高级筛选获得不重复记录 93 技巧38 工作表的保护与解除保护 94 技巧39 奇偶页打印 97 第3章 Wordbook(工作簿)对象 99 技巧40 工作簿的引用方法 99 40-1 使用工作簿的名称 99 40-2 使用工作簿的索引号 99 40-3 使用ThisWorkbook 100 40-4 使用ActiveWorkbook 101 技巧41 新建工作簿文件 101 技巧42 打开指定的工作簿 103 技巧43 判断指定工作簿是否打开 106 43-1 遍历Workbooks集合方法 106 43-2 错误处理方法 106 技巧44 禁用宏则关闭工作簿 107 技巧45 关闭工作簿不显示保存对话框 111 45-1 使用Close方法关闭工作簿 111 45-2 单击工作簿关闭按钮关闭工作簿 113 技巧46 禁用工作簿的关闭按钮 113 技巧47 保存工作簿的方法 115 47-1 使用Save方法 115 47-2 直接保存为另一文件名 115 47-3 保存工作簿副本 115 技巧48 保存指定工作表为工作簿文件 116 技巧49 打印预览时不触发事件 118 技巧50 设置工作簿文档属性信息 120 技巧51 不打开工作簿取得其他工作簿数据 121 51-1 使用公式 121 51-2 使用GetObject函数 122 51-3 隐藏Application对象 123 51-4 使用ExecuteExcel4Macro方法 124 51-5 使用SQL连接 125 技巧52 返回窗口的可视区域地址 126 第4章 Shape(图形)、Chart(图表)对象 128 技巧53 在工作表添加图形 128 技巧54 导出工作表的图片 133 技巧55 在工作表添加艺术字 135 技巧56 遍历工作表的图形 137 技巧57 移动、旋转图片 139 技巧58 工作表自动插入图片 140 技巧59 固定工作表图形的位置 143 技巧60 使用VBA自动生成图表 145 技巧61 使用独立窗口显示图表 149 技巧62 导出工作表的图表 150 技巧63 多图表制作 151 第5章 Application对象 155 技巧64 取得Excel版本信息 155 技巧65 取得当前用户名称 156 技巧66 Excel的“定时器” 156 技巧67 设置活动打印机的名称 158 技巧68 屏蔽、改变组合键的功能 159 技巧69 设置Excel窗口标题栏 160 技巧70 自定义Excel状态栏 161 技巧71 灵活退出Excel 162 技巧72 隐藏Excel主窗口 163 72-1 设置Application对象的Visible属性 163 72-2 将窗口移出屏幕 164 72-3 设置工作簿作为加载宏运行 165 第6章 使用对话框 167 技巧73 使用Msgbox函数 167 73-1 显示简单的提示信息 167 73-2 定制个性化的消息框 168 73-3 获得消息框的返回值 169 73-4 在消息框排版 171 73-5 对齐消息框显示的信息 172 技巧74 自动关闭的消息框 174 74-1 使用WshShell.Popup方法显示消息框 174 74-2 使用API函数显示消息框 175 技巧75 使用InputBox函数 176 75-1 简单的数据输入 176 75-2 使用对话框输入密码 178 技巧76 使用InputBox方法 180 76-1 输入指定类型的数据 180 76-2 获得单元格区域地址 182 技巧77 内置对话框 183 77-1 调用内置的对话框 183 77-2 获取选定文件文件名 186 77-3 使用“另存为”对话框 188 技巧78 调用操作系统“关于”对话框 190 第7章 菜单和工具栏 192 技巧79 在菜单添加菜单项 192 技巧80 在菜单栏指定位置添加菜单 195 技巧81 屏蔽和删除工作表菜单 197 技巧82 改变系统菜单的操作 198 技巧83 定制自己的系统菜单 199 技巧84 改变菜单按钮图标 205 技巧85 右键快捷菜单增加菜单项 206 技巧86 自定义右键快捷菜单 207 技巧87 使用右键菜单制作数据有效性 210 技巧88 禁用工作表右键菜单 212 技巧89 创建自定义工具栏 213 技巧90 自定义工具栏按钮图标 216 技巧91 自定义工作簿图标 217 技巧92 移除工作表的最小最大化和关闭按钮 218 技巧93 在工具栏上添加下拉列表框 219 技巧94 屏蔽工作表的复制功能 221 技巧95 禁用工具栏的自定义 222 技巧96 屏蔽所有的命令栏 225 技巧97 恢复Excel的命令栏 226 第8章 控件与用户窗体 228 技巧98 限制文本框的输入 228 技巧99 文本框添加右键快捷菜单 230 技巧100 文本框回车自动输入 234 技巧101 自动选择文本框内容 235 技巧102 设置文本框数据格式 236 技巧103 限制文本框的输入长度 238 技巧104 将光标返回文本框 239 技巧105 文本框的自动换行 241 技巧106 多个文本框数据相加 243 技巧107 控件跟随活动单元格 244 技巧108 高亮显示按钮 245 技巧109 组合框和列表框添加列表项的方法 247 109-1 使用RowSource属性添加列表项 247 109-2 使用List属性添加列表项 248 109-3 使用AddItem方法添加列表项 249 技巧110 去除列表框数据源的重复值和空格 251 技巧111 移动列表框条目 253 技巧112 允许多项选择列表框 256 技巧113 多列组合框和列表框的设置 259 113-1 多列组合框和列表框添加列表项 259 113-2 多列列表框写入工作表 261 技巧114 输入时逐步提示信息 263 技巧115 二级组合框 270 技巧116 使用DTP控件输入日期 272 技巧117 使用RefEdit控件选择区域 275 技巧118 如何注册控件 276 技巧119 遍历控件的方法 279 119-1 使用名称的变量遍历控件 279 119-2 使用对象类型遍历控件 281 119-3 使用程序标识符遍历控件 282 119-4 使用名称的变量遍历图形 283 119-5 使用FormControlType属性遍历图形 284 技巧120 使微调框最小变动量小于1 285 技巧121 不打印工作表控件 287 121-1 设置控件格式 287 121-2 设置控件的printobjcet属性 289 技巧122 在框架使用滚动条 289 技巧123 使用多页控件 291 技巧124 标签文字垂直居对齐 293 技巧125 使用TabStrip控件 295 技巧126 显示GIF动画图片 297 技巧127 播放Flash文件 300 技巧128 在工作表添加窗体控件 302 128-1 使用AddFormControl方法 303 128-2 使用Add方法 305 技巧129 在工作表添加ActiveX控件 307 129-1 使用Add方法 308 129-2 使用AddOLEObject方法 310 技巧130 使用spreadsheet控件 311 技巧131 使用Listview控件 314 131-1 使用Listview控件显示数据列表 314 131-2 在Listview控件使用复选框 317 131-3 调整Listview控件的行距 319 131-4 在Listview控件排序 322 131-5 Listview控件的图标设置 323 技巧132 调用非模式窗体 326 技巧133 进度条的制作 328 133-1 使用进度条控件 328 133-2 使用标签控件 330 技巧134 使用TreeView控件显示层次 333 技巧135 用户窗体添加图标 337 技巧136 用户窗体添加最大最小化按纽 339 技巧137 禁用窗体标题栏的关闭按钮 340 技巧138 屏蔽窗体标题栏的关闭按钮 341 技巧139 无标题栏和边框的窗体 343 技巧140 制作年月选择窗体 344 技巧141 自定义窗体的鼠标指针类型 347 技巧142 调整窗体的显示位置 348 技巧143 由鼠标确定窗体显示位置 350 技巧144 用户窗体的打印 351 技巧145 使用自定义颜色设置窗体颜色 353 技巧146 在窗体显示图表 354 146-1 使用Export方法 354 146-2 使用API函数 356 技巧147 窗体运行时调整控件大小 357 技巧148 在用户窗体上添加菜单 360 技巧149 在用户窗体上添加工具栏 364 技巧150 使用代码添加窗体及控件 369 技巧151 用户窗体的全屏显示 375 151-1 设置用户窗体为应用程序的大小 375 151-2 根据屏幕分辨率进行设置 376 技巧152 在用户窗体上添加状态栏 377 第9章 函数的使用 381 技巧153 调用工作表函数求和 381 技巧154 查找最大、最小值 381 技巧155 不重复值的录入 383 技巧156 获得当月的最后一天 385 技巧157 四舍五入运算 386 157-1 极小值修正法 386 157-2 调用工作表函数法 387 技巧158 使用字符串函数 387 技巧159 使用日期函数 389 技巧160 判断是否为数值 393 技巧161 格式化数值、日期和时间 394 技巧162 个人所得税自定义函数 396 技巧163 人民币大写函数 398 技巧164 列号转换为列标 400 技巧165 判断工作表是否为空表 401 技巧166 查找指定工作表 402 技巧167 查找指定工作簿是否打开 404 技巧168 取得应用程序的安装路径 404 技巧169 数组的使用 406 169-1 代码运行时创建数组 406 169-2 文本转换为数组 407 169-3 使用动态数组去除重复值 409 第10章 文件操作 412 技巧170 导入文本文件 412 170-1 使用查询表导入 412 170-2 使用Open 语句导入 413 170-3 使用OpenText方法 415 技巧171 将数据写入文本文件 416 171-1 使用Print # 语句 416 171-2 另存为文本文件 418 技巧172 文件修改的日期和时间 419 技巧173 查找文件文件夹 420 技巧174 获得当前文件夹的名称 422 技巧175 创建和删除文件夹 422 技巧176 重命名文件文件夹 423 技巧177 复制指定的文件 424 技巧178 删除指定的文件 425 技巧179 搜索特定的文件 426 技巧180 使用WSH处理文件 428 180-1 获取文件信息 428 180-2 查找文件 430 180-3 移动文件 431 180-4 复制文件 431 180-5 删除文件 432 180-6 创建文件夹 433 180-7 复制文件夹 434 180-8 移动文件夹 435 180-9 删除文件夹 435 180-10 导入文本文件 436 180-11 创建文本文件 438 第11章 其他应用 441 技巧181 取得电脑名称 441 技巧182 取得逻辑盘序列号 442 技巧183 使用API取得硬盘信息 443 技巧184 使用数字签名 444 技巧185 暂停代码的运行 449 技巧186 定时关机 450 技巧187 打开指定的网页 451 技巧188 VBE的操作 452 188-1 添加模块和过程 452 188-2 建立事件过程 454 188-3 模块的导入与导出 456 188-4 删除宏代码 457 技巧189 保护VBA代码 459 189-1 设置工程密码 459 189-2 设置“工程不可查看” 460 技巧190 优化代码 462 190-1 关闭屏幕刷新 462 190-2 使用工作表函数 464 190-3 使用更快的单元格操作方法 465 190-4 使用With语句引用对象 466 190-5 少用激活或选择语句 468 技巧191 取得文件的基本名称 469 技巧192 防止用户断代码运行 470 技巧193 加班费计算表 472 技巧194 制作发放条 498 技巧195 费用统计表 501 技巧196 职工花名册 516 技巧197 收据系统 529 技巧198 职工考勤系统 567
自制书签。因上传大小限制,分三卷压缩,分别是:《C#经典编程220例》.(明日科技).【带书签】.zip、《C#经典编程220例》.(明日科技).【带书签】.z01、《C#经典编程220例》.(明日科技).【带书签】.z02 第1章 c#语言及其开发环境 1 实例001 根据需要创建所需解决方案 2 实例002 统一窗体控件的字体设置 3 实例003 设置程序代码行号 5 实例004 通过“格式”菜单布局窗体 6 实例005 为项目添加dll文件引用 7 实例006 为项目添加已有类 8 实例007 为项目添加第三方控件 9 实例008 为项目添加已有窗体 11 第2章 c#语言基础 12 实例009 利用for循环输出多行语句 13 实例010 输入并输出姓名 14 实例011 使用值类型和引用类型输出不同的字段 15 实例012 判断当前系统日期是星期几 17 实例013 定义局部变量输出不同的字段 19 实例014 定义循环内部变量并输出变量的值 20 实例015 定义常量计算圆的周长 21 实例016 使用“+”编写双重意义的表达式 22 实例017 使用小括号括起来的表达式 23 .实例018 使用算术运算符开发简单计算器 23 实例019 使用条件运算符判断指定年份是不是闰年 26 实例020 使用typeof关键字获取类的内部结构 28 实例021 巧用位移运算符获取汉字编码值 30 实例022 使用异或运算符对数字进行加密 31 第3章 流程控制语句 33 实例023 利用if…else语句判断分数是否及格 34 实例024 利用switch语句判断时间 35 实例025 利用while语句判断大小 36 实例026 打印九九乘法表 38 实例027 使用break语句提前退出循环语句 39 实例028 使用continue语句转移至循环开始处 40 实例029 使用流程控制语句报销业务花销 41 实例030 输出当前系统时间 42 实例031 利用for循环实现完数计算 44 实例032 开发一个猜数字游戏 45 第4章 字符与字符串 47 实例033 字母与ascii码的转换 48 实例034 获取字符串汉字的个数 50 实例035 从字符串分离文件路径、文件名及扩展名 51 实例036 对字符串进行加密与解密 53 实例037 开发一个进制转换器 56 实例038 将字符串的每个字符进行颠倒输出 60 实例039 根据标点符号对字符串进行分行 61 实例040 将汉字转换为拼音 63 实例041 商品金额的大小写转换 64 实例042 根据年份判断十二生肖 65 实例043 将字母全部转换为大写或小写 67 实例044 汉字与区位码的转换 69 第5章 数组和集合 71 实例045 在数组添加一个元素 72 实例046 在数组添加一个数组 73 实例047 计算两个矩形矩阵的乘积 75 实例048 获取多维数组的行数与列数 78 实例049 使用快速排序法对一维数组进行排序 79 实例050 使用sort方法对数组进行快速排序 81 实例051 按指定条件在数组检索元素 82 实例052 反转数组元素的顺序 84 实例053 使用希尔排序法对一维数组进行排序 85 实例054 向班级集合添加学生信息 87 实例055 不改变长度删除数组的元素 89 实例056 删除数组元素后改变其长度 90 第6章 c#面向对象程序设计 92 实例057 创建类的对象 93 实例058 使用构造函数 94 实例059 通过定义方法求一个数的平方 95 实例060 使用重载方法实现不同类型数据的计算 97 实例061 使用属性存储用户编号和姓名 99 实例062 使用索引器 101 实例063 通过类继承计算梯形面积 103 实例064 封装类实现一个简单的计算器 106 实例065 通过结构计算矩形的面积 107 实例066 通过结构计算圆形的面积 109 实例067 使用面向对象思想查找字符串的所有数字 110 实例068 通过类的多态性确定人类的说话行为 112 第7章 异常处理和程序调试 114 实例069 使用try…catch语句捕获异常 115 实例070 根据实际年龄判断虚岁,使用try…catch捕获异常 116 实例071 调试程序执行时出现的结果 117 实例072 使用异常处理语句捕获异常 118 实例073 捕获连接数据库异常 120 第8章 windows窗体 122 实例074 简单的登录窗体 123 实例075 关闭窗体提示 124 实例076 创建简单的mdi应用程序 125 实例077 实现重复高效地利用基窗体 127 实例078 尝试制作一个半透明渐显窗体 128 实例079 使窗体标题栏文字右对齐 129 实例080 窗口间移动按钮 130 实例081 窗体滚动的字幕 131 实例082 使用任意组件拖动窗体 133 实例083 窗体换肤程序 134 第9章 windows应用程序常用控件 137 实例084 在c#设计出色彩斑斓的按钮 138 实例085 自动删除textbox控件的非法字符 139 实例086 在richtextbox控件替换文本文字 141 实例087 利用richtextbox控件实现文字定位与标示 142 实例088 将数据表的字段添加到combobox控件 143 实例089 对listbox控件的数据进行排序 145 实例090 listbox控件拒绝添加重复信息 146 实例091 限制用户名称长度及设置密码文本 148 实例092 带查询功能的combobox控件 149 实例093 利用选择控件实现权限设置 150 实例094 利用richtextbox控件显示图文数据 153 实例095 在listbox控件间交换数据 155 第10章 windows应用程序高级控件 157 实例096 使用imagelist组件制作动画图片 158 实例097 在combobox下拉列表显示图片 159 实例098 在listview控件实现修改功能 161 实例099 将数据库数据添加到listview控件 162 实例100 在listview控件绘制底纹 164 实例101 在treeview控件节点显示图片 165 实例102 使用树型列表动态显示菜单 167 实例103 使用treeview控件遍历磁盘目录 169 实例104 使用errorprovider组件验证文本框输入 170 实例105 使用helpprovider组件调用帮助文件 172 实例106 使listview控件选择项高亮显示 173 实例107 在列表视图拖动视图项 175 实例108 实现带复选框的treeview控件 177 实例109 将xml文件节点绑定到treeview控件 178 实例110 修改treeview控件的节点文本 179 第11章 c#面向对象高级技术 181 实例111 利用接口实现选择不同的语言 182 实例112 使用接口作为方法参数进行编程 184 实例113 自定义抽象类计算圆形的面积 186 实例114 重写抽象方法实现多态性 188 实例115 使用密封类密封登录用户信息 191 实例116 使用密封类封装个人身份证信息 193 实例117 使用迭代器显示公交车站点 195 实例118 通过迭代器实现文字的动态效果 196 实例119 使用分部类制作一个计算器 199 实例120 使用分部类显示员工信息 201 实例121 使用泛型存储不同类型的数据列表 202 实例122 使用泛型去掉数组的重复数字 204 实例123 通过重写虚方法实现加法运算 205 实例124 使用迭代器实现倒序遍历 207 实例125 通过泛型查找数组的元素 209 第12章 ado.net数据访问技术 212 实例126 连接加密的access数据库 213 实例127 使用odbc dsn连接sql server数据库 214 实例128 使用ado.net对象录入数据 217 实例129 利用存储过程录入数据 219 实例130 使用oledbdatareader读取文本文件的内容 222 实例131 使用sqldatareader读取用户登录信息 223 实例132 使用断开式连接的方式录入数据 226 实例133 使用断开式连接批量更新数据库的数据 227 实例134 使datagridview控件选定单元格的所在行变色 229 实例135 在datagridview控件隔行换色 231 实例136 连接excel文件 232 实例137 读取和保存用户头像 233 实例138 判断是否重复输入数据 235 实例139 删除datagridview控件的指定行 237 实例140 将access数据库导入excel文件 238 第13章 水晶报表与打印 241 实例141 设计带有背景图的水晶报表 242 实例142 设置水晶报表的打印日期与时间 247 实例143 设置水晶报表节的背景图片 249 实例144 打印窗体的数据 250 实例145 打印商品入库单据 252 实例146 使用打印控件实现分页打印 255 实例147 动态绑定水晶报表 258 实例148 在水晶报表使用公式字段 260 实例149 设计分组统计报表 261 实例150 打印一个空学生证 264 实例151 自定义横向或纵向打印 266 实例152 自定义打印页码范围 268 第14章 文件及数据流技术 271 实例153 根据日期动态建立文件 272 实例154 将长文件名转换成短文件名 273 实例155 获取所有逻辑磁盘目录 274 实例156 使用递归法删除文件的所有文件 278 实例157 按行读取文本文件的数据 279 实例158 使用缓冲流复制文件 280 实例159 文件批量更名 283 实例160 复制文件显示复制进度 285 实例161 对指定文件文件进行分类存储 288 实例162 将文本文件转换成网页文件 290 实例163 伪装文件夹 292 实例164 word目录提取工具 296 第15章 gdi+绘图 302 实例165 在图像实现自定义标记 303 实例166 辉光效果的文字 306 实例167 渐变效果的文字 310 实例168 绘制多边形 311 实例169 简单画图程序 313 实例170 仿qq截图功能 318 实例171 模拟石英钟 321 实例172 绘制贝塞尔曲线 323 实例173 绘制图形验证码 324 实例174 以椭圆形显示图像 326 实例175 使用双缓冲技术绘图 327 实例176 批量添加图片水印 330 第16章 线程的使用 336 实例177 使用线程读取数据库的数据 337 实例178 使用线程制作qq农场小游戏 339 实例179 使用线程实现大容量数据的计算 342 实例180 使用多线程制作端口扫描工具 343 实例181 使用线程扫描局域网ip地址 345 实例182 使用线程休眠控制图片以百叶窗效果显示 347 实例183 使用线程控制向窗体拖放图片并显示 349 实例184 使用线程制作动画效果的状态栏 351 实例185 使用线程遍历文件夹 352 实例186 使用线程实现从左向右以拉伸的方式显示图像 353 第17章 网络编程技术 357 实例187 通过ip地址获取主机名称 358 实例188 创建web页面浏览器 359 实例189 获取网络信息及流量 361 实例190 远程关闭与重启计算机 363 实例191 设计点对点聊天程序 366 实例192 电子邮件的发送与接收 368 实例193 获取网络所有工作组名称 371 实例194 列出指定工作组的所有计算机名 373 实例195 监测当前网络连接状态 375 实例196 使用udp协议设计聊天室 376 第18章 注册表技术 379 实例197 禁止运行注册表 380 实例198 使应用程序开机自动运行 381 实例199 获取本机安装的软件清单 384 实例200 禁止使用windows任务管理器 385 实例201 清除ie地址栏的历史网址 387 实例202 将磁盘驱动器隐藏 388 实例203 禁止使用命令提示符 390 实例204 禁止修改ie浏览器主页 391 实例205 设置ie浏览器的默认主页 392 实例206 设置ie浏览器的默认下载路径 394 第19章 c#语言新技术 396 实例207 使用隐式类型局部变量实现字母的大小写转换 397 实例208 使用扩展方法显示员工信息 398 实例209 使用lambda表达式查找指定字符串 400 实例210 检查序列是否包含指定元素 402 实例211 使用linq在一个循环遍历多个数组 403 实例212 过滤文章包含指定单词的句子 404 实例213 使用linq生成随机序列 406 实例214 筛选指定类型的元素 408 实例215 使用linq技术对对象进行筛选操作 409 实例216 使用linq技术对对象进行排序操作 410 实例217 使用linq技术对对象进行聚合操作 413 实例218 使用linq技术对对象进行联接操作 415 第20章 windows应用程序打包部署 417 实例219 打包程序时设置桌面图标 418 实例220 打包.net framework 4.0框架 420

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧