1 可以将一个类仅仅提供给另一个类使用的方法
将类的构造函数定义成保护成员
在类中定义一个公共的友元类
class CEnvManageImpl
{
friend class CProjectMgr;
protected:
CEnvManageImpl();
public:
~CEnvManageImpl();
...
}
2一般路径名中可以有/和\,在进一步处理前最好先统一一下
strPath.Repalce('/', '\\');
...
3 获取模块的安装目录
在继承于CWinApp的派生类(应用程序类)的初始化函数中可以获得相应的模块句柄
BOOL CMangeApp::Instance()
{
char szPath[MAX_PATH] = "";
GetModuleFileName(this->m_hInstance, szPath, MAX_PATH);
}
4 写注册表
4.1 打开注册表
4.2 写注册表
4.3 关闭注册表
HKEY hKey;
DWORD dwDis = REG_CREATED_NEW_KEY;
CString strVal("huan");
if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_CLASSES_ROOT, //当前打开的句柄或者预定义好的句柄
TEXT(".aspj\\DefaultIcon"), //指定打开或创建子键的路径
0, //保留字
NULL, //指定键的类型
REG_OPTION_NON_VOLATILE, //注册键选项,默认或者动态
KEY_ALL_ACCESS | KEY_WRITE, //键的操作方式
NULL, //安全属性,NULL默认
&hKey, //返回键句柄
&dwDis)) //指定是创建方式还是打开方式
{
RegSetValueEx(hKey,//键句柄(包括创建的和预定义好的)
"",//句柄名称
0, //保留
REG_SZ,//键类型
(const BYTE *)(LPCSTR)strVal,//键值
}
5 在构造函数中将数据成员进行初始化
6 在头文件中一般会有一个保证头文件出现一次的预定义伪指令
#if !defined(AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_)
#define AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_
...
#endif
或
#ifndef AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_
#define AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_
...
#endif;
7 数组个数计算
静态数组个数
_countof(arr);
动态数组个数
int nLen = sizeof(arr) / sizeof(arr[0]);
8 将文件夹有子目录移动到上级目录
CString strCurrentDir("C:\\qiao");
CString strSubDir("C:\\qiao\\huan");
CString strFileToFind("");
bool bIsFind = true;
CFileFind oFind;//CFileFind继承自CObject类
strFileToFind.Format("%s\\", );
bIsFind = oFind.FindFile(strFileToFind);
while(bIsFind)
{
bIsFind = oFind.FindNextFile();
if(oFind.IsDots() != 0)
{
coutinue;
}
CString strFile;
strFile = oFind.GetFileName();
CString strSourceDir;
CString strDestDir;
strSourceDir.Format("%s\\%s", strSubDir, strFile);
strDestDir.Format("%s\\%s", strCurrentDir, strFile);
MoveFileEx(strSourceDir, strDestDir, MOVEFILE_WRITE_THROUGH | MOVEFILE_REPLACE_EXISTING);
oFind.Close();
}
9 一般在操作一个文件(夹)之前需要判断一个文件是否存在
if(GetFileAttributes(strDir) == -1)
{
...
}
将类的构造函数定义成保护成员
在类中定义一个公共的友元类
class CEnvManageImpl
{
friend class CProjectMgr;
protected:
CEnvManageImpl();
public:
~CEnvManageImpl();
...
}
2一般路径名中可以有/和\,在进一步处理前最好先统一一下
strPath.Repalce('/', '\\');
...
3 获取模块的安装目录
在继承于CWinApp的派生类(应用程序类)的初始化函数中可以获得相应的模块句柄
BOOL CMangeApp::Instance()
{
char szPath[MAX_PATH] = "";
GetModuleFileName(this->m_hInstance, szPath, MAX_PATH);
}
4 写注册表
4.1 打开注册表
4.2 写注册表
4.3 关闭注册表
HKEY hKey;
DWORD dwDis = REG_CREATED_NEW_KEY;
CString strVal("huan");
if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_CLASSES_ROOT, //当前打开的句柄或者预定义好的句柄
TEXT(".aspj\\DefaultIcon"), //指定打开或创建子键的路径
0, //保留字
NULL, //指定键的类型
REG_OPTION_NON_VOLATILE, //注册键选项,默认或者动态
KEY_ALL_ACCESS | KEY_WRITE, //键的操作方式
NULL, //安全属性,NULL默认
&hKey, //返回键句柄
&dwDis)) //指定是创建方式还是打开方式
{
RegSetValueEx(hKey,//键句柄(包括创建的和预定义好的)
"",//句柄名称
0, //保留
REG_SZ,//键类型
(const BYTE *)(LPCSTR)strVal,//键值
strVal.GetLength()+1 );//键的长度
}
5 在构造函数中将数据成员进行初始化
6 在头文件中一般会有一个保证头文件出现一次的预定义伪指令
#if !defined(AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_)
#define AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_
...
#endif
或
#ifndef AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_
#define AFX_ENVMANAGE_H__EDD2EF62_25DB_4F81_B504_1265E4E1ABDB__INCLUDED_
...
#endif;
7 数组个数计算
静态数组个数
_countof(arr);
动态数组个数
int nLen = sizeof(arr) / sizeof(arr[0]);
8 将文件夹有子目录移动到上级目录
CString strCurrentDir("C:\\qiao");
CString strSubDir("C:\\qiao\\huan");
CString strFileToFind("");
bool bIsFind = true;
CFileFind oFind;//CFileFind继承自CObject类
strFileToFind.Format("%s\\", );
bIsFind = oFind.FindFile(strFileToFind);
while(bIsFind)
{
bIsFind = oFind.FindNextFile();
if(oFind.IsDots() != 0)
{
coutinue;
}
CString strFile;
strFile = oFind.GetFileName();
CString strSourceDir;
CString strDestDir;
strSourceDir.Format("%s\\%s", strSubDir, strFile);
strDestDir.Format("%s\\%s", strCurrentDir, strFile);
MoveFileEx(strSourceDir, strDestDir, MOVEFILE_WRITE_THROUGH | MOVEFILE_REPLACE_EXISTING);
oFind.Close();
}
9 一般在操作一个文件(夹)之前需要判断一个文件是否存在
if(GetFileAttributes(strDir) == -1)
{
...
}