MFC记录

目录

 

MFC Cstring转string

MFC获取系统时间

MFC创建文件夹

MFC创建子对话框

总结

MFC utf-8转ANSI

MFC选择文件

MFC选择文件夹

MFC获取文件名

MFC修改字体

判断string是否全为数字

错误:class std::vector


MFC Cstring转string

//使用 Unicode 字符集

//方法1
CString filePath= L"D:\\111\\123.txt";

USES_CONVERSION;
string str(W2A(filePath)); //CStrig -> string

//方法2 

CString theCStr = L"Lena.png";

std::string STDStr(CW2A(theCStr.GetString()));

//使用非Unicode 字符集
CString theCStr = "Lena.png";
std::string STDStr = theCStr.GetBuffer();

MFC获取系统时间

CTime time = CTime::GetCurrentTime(); ///构造baiCTime对象

CString m_strTime ;
m_strTime = time.Format("%Y_%m_%d_%H_%M_%S");

MFC创建文件夹

if (!PathIsDirectory(filepath))

		{

			CreateDirectory(filepath, 0);//不存在则创建

		}

MFC创建子对话框

找到资源视图->Dialog

MFC记录_第1张图片

新建一个Dialog

MFC记录_第2张图片

可以看到多了一个对话框

MFC记录_第3张图片

找到新建的窗口,鼠标右键打开

MFC记录_第4张图片

可以看到新建的界面

MFC记录_第5张图片

鼠标右键红色区域 -> 添加类

MFC记录_第6张图片

MFC记录_第7张图片

输入类名,点击完成

MFC记录_第8张图片

可以看到以下两个文件

MFC记录_第9张图片

还是右键红色框,选择类向导->虚函数->添加OnInitDialog->确定

在OnInitDialog中添加如下代码(便于调试)

MessageBox(_T("hello child"));

MFC记录_第10张图片

在createChildDemoDlg.h中加入子窗口头文件

MFC记录_第11张图片

同时在主对话框的类中添加子对话框的对象

MFC记录_第12张图片

双击主窗口确定按钮,进入函数

MFC记录_第13张图片

添加如下代码

m_CchildDlg.Create(IDD_DIALOG1, this);
m_CchildDlg.ShowWindow(SW_SHOW);

MFC记录_第14张图片

运行代码

点击主窗口确定按钮,即可看到效果。

总结

1.在资源视图对话框中新建一个Dialog

2.进入Dialog视图界面,右键单击添加类

3.添加子对话框的初始化函数 界面上右击->添加虚函数OnInitDialog,把需要初始化的东西放在里面

4、在主对话框中使用子对话框

①在主对话框的类中建立一个子对话框的对象

Cchild m_CchildDlg;

②在需要使用的地方中添加创建窗口语句

m_CchildDlg.Create(Dialog名字, this);

m_CchildDlg.ShowWindow(SW_SHOW);

 

MFC utf-8转ANSI

std::string uToAnsi(std::string strUTF8)
{
	UINT nLen = MultiByteToWideChar(CP_UTF8, NULL, strUTF8.c_str(), -1, NULL, NULL);
	WCHAR *wszBuffer = new WCHAR[nLen + 1];
	nLen = MultiByteToWideChar(CP_UTF8, NULL, strUTF8.c_str(), -1, wszBuffer, nLen);
	wszBuffer[nLen] = 0;
	nLen = WideCharToMultiByte(936, NULL, wszBuffer, -1, NULL, NULL, NULL, NULL);
	CHAR *szBuffer = new CHAR[nLen + 1];
	nLen = WideCharToMultiByte(936, NULL, wszBuffer, -1, szBuffer, nLen, NULL, NULL);
	szBuffer[nLen] = 0;
	strUTF8 = szBuffer;
	delete[]szBuffer;
	delete[]wszBuffer;
	return strUTF8;
}

 

MFC选择文件

TCHAR szFilter[] = _T("所有文件(*.*)|*.*||");
CFileDialog fileDlg(TRUE, _T("avi"), NULL, 0, szFilter, this);
if (IDOK == fileDlg.DoModal())
{
    //获取文件名
	CString filePath = fileDlg.GetPathName();
    USES_CONVERSION;
	string str(W2A(filePath)); //CStrig -> string

	CString suffix;
	int Which = filePath.ReverseFind('.');
	suffix = filePath.Right(filePath.GetLength() - Which - 1);
	if (suffix == "mp4" || suffix == "avi" || suffix == "flv" || suffix == "rmvb")
      {
            //添加执行代码
      }
   else
			MessageBox(_T("请打开正确格式的文件!"), 0);
}

MFC选择文件夹

TCHAR szPath[MAX_PATH];     //存放选择的目录路径 
ZeroMemory(szPath, sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szPath;
bi.lpszTitle = _T("请选择需要查看的目录:");
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
bi.pidlRoot = ILCreateFromPath(_T("E:\\vs_code\\MFC界面框架\\dShow界面扩展项目\\AI\\Directshow_Mfc\\saveImg\\"));
	//弹出选择目录对话框
LPITEMIDLIST lp = SHBrowseForFolder(&bi);

if (lp && SHGetPathFromIDList(lp, szPath))
{
		/*selectFile.Format(_T("选择的目录为 %s"), szPath);*/
		selectFile.Format(_T("%s"), szPath);
		MessageBox(selectFile);
		
}
else
	MessageBox(_T("无效的目录,请重新选择"));

 

MFC获取文件名

int pos1 = string.rfind("\\");
string image_name1 = string.substr(pos1 + 1);

 

MFC修改字体

//CFont m_oFont;
//CEdit m_edit;
m_oFont.CreatePointFont(180, _T("隶书"));
m_edit.SetFont(&m_oFont);

判断string是否全为数字

bool AllisNum(string str)
{
	for (int i = 0; i < str.size(); i++)
	{
		int tmp = (int)str[i];
		if (tmp >= 48 && tmp <= 57)
		{
			continue;
		}
		else
		{
			return false;
		}
	}
	return true;
}

错误:class std::vector

在link commandline加上一行 /FORCE:MULTIPLE 点击OK 就解决了;简单说就是VS的STL从import变成static了

MFC记录_第15张图片

 

 

你可能感兴趣的:(C++,MFC)