整理MFC中常用的win32API 1

1. GetModuleFileName的用法
参数说明:

DWORD GetModuleFileName(
  HMODULE hModule,    // handle to module    模块的句柄 如果为空则表示当前的exe的句柄
  LPTSTR lpFilename,  // path buffer        返回模块所在的位置地址
  DWORD nSize         // size of buffer        数据长度
);

用例:返回当前软件的路径

    TCHAR szModulePath[MAX_PATH] = {0};
    ZeroMemory(szModulePath, MAX_PATH * sizeof(TCHAR));
    ::GetModuleFileName(NULL, szModulePath, MAX_PATH);


2. CString的字符串的一些操作 ReverseFind, Right, Left用法
用例:取某个exe的名字 并且 取得exe的上级目录

CString strExePath = L"E:\\NewUi\\D_C\\Dolphin.exe";
int nPos = strExePath.ReverseFind(_T('\\'));    //找到最后一个\\所在的位置
CString strAppName = strExePath.Right(m_stAppConfig.strAppPath.GetLength() - nPos - 1); //得到EXE的名字Dolphin.exe 
CString strAppPath = strExePath.Left(nPos + 1);    //到软件的包含的目录结构 E:\\NewUi\\D_C\\


3. SHGetFolderPath 使用这个函数获取 系统定制的一些文件夹路径
用例:获取路径:C:\Users\Administrator\AppData\Local

    TCHAR szLocalPath[MAX_PATH] = {0};
    SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, szLocalPath);

 这样就获取到了路径 指定位置的路径 详细的参数见MSDN 关键字 SHGetFolderPath

4. 创建文件夹的操作
直接使用 CreateDirectory 来创建文件夹 用法比较简单
用法:

    ::CreateDirectory(L"C:\\Test", NULL);    //创建了一个名为Test的文件夹

5. 删除某个文件的操作
直接使用 DeleteFile即可删除指定的文件
用法:

    ::DeleteFile(L"C:\\Test", NULL);

6. 配置文件的相关操作
    关键函数GetPrivateProfileString:根据键获取对应的值 类似于map键值对操作
*读配置文件的操作:

  DWORD GetPrivateProfileString(
  LPCTSTR lpAppName,        // 节点名
  LPCTSTR lpKeyName,        // 键的名字
  LPCTSTR lpDefault,        // 如果键的名字不生效 则用此参数替换键值 进行搜索
  LPTSTR lpReturnedString,  // 返回的内容 (根据键值得到的内容)
  DWORD nSize,              // 路径的一个大小 默认设置为 MAX_PATH
  LPCTSTR lpFileName        // 配置文件的路径
);

例子:
[Login]
ServerAddr=192.168.0.1

CString szValue= L"";    //返回值
::GetPrivateProfileString(_T("Login"), _T("ServerAddr"), _T(""), szValue, MAX_PATH, 配置文件的路径);

得到 szValue = L"192.168.0.1";

*写配置文件的操作

WritePrivateProfileString 
    BOOL WritePrivateProfileString(
    LPCTSTR lpAppName,  // 节点名
    LPCTSTR lpKeyName,  // 键的名字
    LPCTSTR lpString,   // 添加键对应的字符串
    LPCTSTR lpFileName  // 配置文件的路径
    );

 增加配置的键值对
[Login]
ServerAddr=Test  
 

::WritePrivateProfileString(_T("Login"), _T("ServerAddr"), _T("Test"), 配置文件的路径);

7. 字符串比较函数 Compare 和 CompareNoCase 的区别
    明显的区别就是 CompareNoCase 是忽略大小写的比较方式
    
8. 枚举系统字体

std::vector<CString> vctFontName;
    ::EnumFontFamilies(::GetDC(NULL), (LPTSTR) NULL, (FONTENUMPROC)FontNameEnumProc, (LPARAM)(&vctFontName));
    
INT xxxxDialog::FontNameEnumProc(LOGFONT *plf, TEXTMETRIC* ptm, INT nFontType, LPARAM lParam)
{
    std::vector<CString> *pVector = (std::vector<CString>*)lParam;
    pVector->push_back(plf->lfFaceName);
    return TRUE;
}

  9. 注册表的相关操作
    RegOpenKeyEx:打开指定的注册表项;
函数原型:

  LONG RegOpenKeyEx(
  HKEY hKey,         // 打开指定的注册表键
  LPCTSTR lpSubKey,  // 注册表子项
  DWORD ulOptions,   // 保留字段 必须设置为0
  REGSAM samDesired, // 安全访问掩码 可以简单理解为 操作类型
  PHKEY phkResult    // 接收打开键的句柄 使用RegCloseKey关闭
);

例子打开对应的键的目录
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer

    HKEY hKey = NULL;
    LSTATUS ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Internet Explorer"), 0, KEY_READ, &hKey);

RegQueryValueEx 根据得到的目录 拿到指定键对应的值
函数原型:

LONG RegQueryValueEx(
  HKEY hKey,            // 键值的句柄
  LPCTSTR lpValueName,  // 查询值的名称
  LPDWORD lpReserved,   // 预留字段 必须设置为NULL
  LPDWORD lpType,       // 类型代码,如果不需要类型代码 可设置为NULL
  LPBYTE lpData,        // 数据缓冲区 接收数据
  LPDWORD lpcbData      // 数据缓冲区的大小
);

例子:

DWORD dwSize = 64;
TCHAR szVersion[64] = {0};
ret = RegQueryValueEx(hKey, _T("svcVersion"), 0, NULL, (LPBYTE)szVersion, &dwSize);

返回值 存储在 svcVersion中

修改指定目录下的某个键的值
RegSetValueEx:修改某个键的值 或者 增加新的键值对
函数原型:

LONG RegSetValueEx(
  HKEY hKey,           // 指定键的句柄 可以理解为目录的句柄
  LPCTSTR lpValueName, // 修改或者增加的键名称(如果列表中没有相同的则增加此键值)
  DWORD Reserved,      // 保留字段,必须设置为0
  DWORD dwType,        // 设置值的类型
  CONST BYTE *lpData,  // 设定的值的数据缓冲区
  DWORD cbData         // 缓冲区的大小
);

用完之后一定要 RegCloseKey(xxxKey);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值