mfc如何获取系统字体文件路径

mfc如何获取系统字体文件路径,第1张

用EnumFontFamiliesEx函数就可以了,示例如下:

LOGFONT lf;

ZeroMemory(&lf,sizeof(LOGFONT));

lflfCharSet = DEFAULT_CHARSET;

_tcscpy(lflfFaceName,TEXT(""));

EnumFontFamiliesEx(pDC->GetSafeHdc(),&lf,(FONTENUMPROC)EnumFontFamiliesProc,(LPARAM)this,0);BOOL CALLBACK CFontCombo::EnumFontFamiliesProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lParam)

{

if(!(nFontType & RASTER_FONTTYPE))

{

// if (lpelf->elfLogFontlfCharSet == ANSI_CHARSET || lpelf->elfLogFontlfCharSet == GB2312_CHARSET)

{

CFontCombo pCombo = (CFontCombo )lParam;

//过滤以@开头的字体,过滤已经添加的字体。

if(lpelf->elfFullName[0] != TEXT('@') && pCombo->FindStringExact(0,(LPCTSTR)lpelf->elfFullName) == LB_ERR)

{

int index = ((CFontCombo )lParam)->AddString((LPCTSTR)lpelf->elfFullName);

LPLOGFONT lpLF = new LOGFONT;

CopyMemory(lpLF,lpelf,sizeof(LOGFONT));

((CFontCombo )lParam)->SetItemData(index,(DWORD)lpLF);

}

}

}

return TRUE;

}

这个是删除文件的用法,找到文件和删除文件都差不多。用CFileFinder可以遍历。 void DelFiles(CString& strDirPath, CString strFileName, BOOL bDelAll) { CFileFind FileFinder; strDirPath = strDirPath + _T("\\"); CString strFilePath

TCHAR exeFullPath[MAX_PATH]; // MAX_PATH

GetModuleFileName(NULL,exeFullPath,MAX_PATH);//得到程序模块名称,全路径

也就是当前运行程序的全路径

GetModuleFileName函数原型

DWORD GetModuleFileName(

HMODULE hModule, // handle to module。将要得到的模块的句柄。如果是当前模块,NULL

LPTSTR lpFilename, // path buffer 得到的文件名。

DWORD nSize // size of buffer 一般MAX_PATH就可以了

);

已经获取了CString类型的文件路径,一般推荐使用CFile或者CStdioFile进行文件 *** 作。

fread也是可以的,打开的文件名参数使用cstringGetBuffer(0)就可以了,不过注意工程最好不要是UNICODE模式,这种模式下fread会有一些麻烦。

int __stdcall CDirDialog::BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)

{

     //bInfolParam = (LPARAM)this;这行代码将CDirDialog对象通过lpData传入到回调函数BrowseCtrlCallback

     CDirDialog pDirDialogObj = (CDirDialog)lpData;

     //浏览目录的对话框已初始化完成后会回调BrowseCtrlCallback,uMsg等于BFFM_INITIALIZED

     if (uMsg == BFFM_INITIALIZED )

     {

         //如果指定了默认目录,给hwnd(浏览目录对话框)发送BFFM_SETSELECTION消息,用于自动选中该默认目录

         if( ! pDirDialogObj->m_strSelDirIsEmpty() )

             ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)(pDirDialogObj->m_strSelDir));

         //如果CDirDialog的m_strWindowTitle不是空字符串,那么将浏览目录对话框的窗口标题设置为m_strWindowTitle

         if( ! pDirDialogObj->m_strWindowTitleIsEmpty() )

             ::SetWindowText(hwnd, (LPCTSTR) pDirDialogObj->m_strWindowTitle);

     }

     //浏览目录的对话框内用户选择的目录变化时,回调BrowseCtrlCallback,uMsg等于BFFM_SELCHANGED

     else if( uMsg == BFFM_SELCHANGED )

     {

         //BFFM_SELCHANGED消息中,lpData 指向新选择的目录的PIDL

         LPITEMIDLIST pidl = (LPITEMIDLIST) lParam;

         char selection[MAX_PATH];

         //调用SHGetPathFromIDList从PIDL转换为文件系统路径字符串

         if( ! ::SHGetPathFromIDList(pidl, selection) )

             selection[0] = '\0';

         CString csStatusText;

         //调用SelChanged函数,由CDirDialog或其派生类重载的SelChanged函数来决定是否允许选择该目录

         BOOL bOk = pDirDialogObj->SelChanged(selection, csStatusText);

         if( pDirDialogObj->m_bStatus )

            //修改浏览目录的对话框的状态栏内容为新选择的目录路径

             ::SendMessage(hwnd, BFFM_SETSTATUSTEXT , 0, (LPARAM)(LPCSTR)csStatusText);

         //如果SelChanged返回TRUE,表示允许选择该目录,于是启用"确定"按钮,否则禁用。

         ::SendMessage(hwnd, BFFM_ENABLEOK, 0, bOk);

     }

   return 0;

}

CFileFind finder;

if(finderIsDirectory() && !finderIsDots())

{

// 是子文件夹,递归调用本函数

}

else

{

finderGetFilePath(); // 获取文件的完整路径

finderGetFileName(); // 获取文件名,包括扩展名

}

/

函数 名:GetFileNameByPath(CString filePath)

功能描述:获取文件名

入 参:filePath:指定文件路径 ,

isWithFileSuffix:FALSE默认不带后缀名,TRUE带后缀名

出 参:无

返 回 值:文件名

/

CString GetFileName(CString filePath, BOOL isWithFileSuffix)

{

int pos = filePathReverseFind('\\');

CString fileName = filePathRight(filePathGetLength() - pos - 1);

if (FALSE == isWithFileSuffix)

{

pos = fileNameFind('');

fileName = fileNameLeft(pos);

}

return fileName;

}

最近刚刚接触到RobotFramework,发现这个工具倒是可以满足我的要求,而且可以结合seleniumLibrary,用来做web的自动化测试相当不错。之前我也接触过selenium,不过感觉那个工具更贴近开发人员使用,有了robotFramework之后,感觉这个工具相当强大,而且是贴近测试人员的。之所以说强大,主要是这些测试脚本都可以用文本格式保存(如txt/html等)

==安装篇==

如果有想学的朋友可以自己下载以下文件安装(Google-code里可以找到大部分的安装文件):

这篇文章的内容比较旧了,最新的安装指南请查看 更新篇

python-271msi(首先要有python,请选择将Python加入Path)

wxPython28-win32-unicode-28110-py27exe(wxPython,必须要的)

robotframework-260win32exe(然后装robot的Framework)

robotframework-ride-0381win32exe(robotFramework的IDE,很不错)

robotframework-seleniumlibrary-28win32exe(seleniumLibrary)

安装成功后

执行[PythonDir]\Scripts\ridepy

看到界面就是安装成功了。

如果需要AutoIt支持就下载下面2个东东。

AutoItLibrary-11

pywin32-216win32-py27exe

==入门篇==

安装完成了,这个框架可以说是基于keyword的 *** 作,按F5可以看到所有加载的keyword。

首先新增一个project

然后新增suite

然后新增test case,接着在suite层级add library,把selenium library加进来,添加后按F5检验是否添加成功,如图

OK,继续在suite的setting里设置suite启动和结束的keyword,即Start Selenium Server和Stop Selenium Server,他会在运行时帮助我们自动启动seleniumserver。

接下来在test case里添加一个步骤,open browser(一般用selenium做web测试都要用这个方法来打开浏览器),添加后关键字变成蓝色表示找到关键字了,否则可能是拼写错误或者没有加载相应的library。红色表示有一个必选参数要给定输入值,具体参数可以看F5里的keyword说明。

输入参数,第二个参数默认是firefox,不过我没装,就用ie吧。

以上只是一个简单的例子,没有详细说明每个步骤的 *** 作,只是初步介绍。后续再详细介绍

以上就是关于mfc如何获取系统字体文件路径全部的内容,包括:mfc如何获取系统字体文件路径、怎样用mfc找到文件夹路径,并读取文件夹内所有、MFC中如何获取当前exe(双反斜线)的绝对路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9384530.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存