MFC里边制作简单的窗口输入并获取参数

阅读次数: 538

  • A+
所属分类:C语言 语言学习

天啊!真的不容易

之前一直没接触过MFC和QT,最近刚学习了下C已经学到了第六章的中间。

老样子,先说需求

需求:环境 windows电脑上,想做一个批量上传图片和视频的软件(不想再PHP,因为普通用户是不会搭建apache环境的,集成的方法也不想用,直接做成一个EXE程序多好)

思路:

1.图片类的只需传递一个路径即可开始上传

2.视频类的先查询MD5,调用数据库接口判断是否以前有上传过,如果没有传过则开始切片

3.配置文件(如果电脑好的可以同时切多个视频)

4.切好的视频则开始上传

5.上传完成后请求接口增加数据库视频数据

6.提前布局好视频搜索引擎功能(统一视频的所有信息,一条视频即为一个对象,在全球是唯一的,用作以后云端公用,一旦所有人都按照这个标准走那么将会给整个互联网节省很多资源)

功能部分开始

图片一键批量改名功能

MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数

在此处添加代码

// 将“关于...”菜单项添加到系统菜单中。
	CMenu menu;
	menu.LoadMenuW(IDR_MENU1);
	SetMenu(&menu);
	// IDM_ABOUTBOX 必须在系统命令范围内。
MFC里边制作简单的窗口输入并获取参数

再添加一个窗体dialog

MFC里边制作简单的窗口输入并获取参数

给这个窗体添加一个类(如上图)

MFC里边制作简单的窗口输入并获取参数

再选择刚才添加的菜单,然后在上边添加一个事件(就是点击时 让窗体出现)

MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数

事件添加完成后,来稍微做下窗体里的简单布局,如上图 分别选择 button,edit control ,static text这三个小插件

MFC里边制作简单的窗口输入并获取参数

给 edit control 添加一个变量,变量名称定好

最后,双击 button 进入 这个按钮的事件编辑代码里 写上如下代码

// TODO:  在此添加控件通知处理程序代码
	//file_name.SetWindowTextW(_T("勒布朗詹姆斯和科比")); // 赋值

	CString str;
	file_name.GetWindowTextW(str);//取值

	MessageBox(str, _T("输入框内容"), MB_OK);
	TRACE(str);
	str.Replace(_T("\\"), _T("\\\\"));//windows路径替换

	/* 文件路径里有中文时 start */
	char buf[500];
	wchar_t *ptr;
	ptr = str.GetBuffer(str.GetLength()*sizeof(wchar_t));
	WideCharToMultiByte(CP_ACP, 0, (LPCTSTR)ptr, -1, buf, sizeof(buf), NULL, NULL);
	str.ReleaseBuffer();
	/* 文件路径里有中文时 end */


	/* 在路径没有中文时 可以用这个方法 start */
	//char *buf;

	//buf = GetAnsiString(str);
	/* 在路径没有中文时 可以用这个方法 end */


	//strcat(buf, "\\*.*");        // 在要遍历的目录后加上通配符
	/* 由于 buf[500] 数组类型的含有中文的不能用 strcat 可以优化  start */
	int buf_size = sizeof(buf);
	int i = 0;
	while (buf[i] != '\0')
	{
		i++;
	}
	char *s = buf;
	//strcat(s, "\\*.*");
	buf[i] = '\\';
	buf[i + 1] = '\\';
	buf[i + 2] = '*';
	buf[i + 3] = '\.';
	buf[i + 4] = '*';
	buf[i + 5] = '\0';
	/* 由于 buf[500] 数组类型的含有中文的不能用 strcat 可以优化  end */

	listFiles(buf);

测试

MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数
MFC里边制作简单的窗口输入并获取参数

此功能小结

本以为这个小功能将会非常简单,但是在做的过程中简直要炸裂了。

学C时觉得好简单,但是突然出现的 CString 根本不会用,不知道 unicode 如何转 ANSI,不知道 char 和Tchar 的不同,好多方法所需要用的参数 都是 char * 类型的。

解决了 CString 转换 成 char* 后,又发现中文的问题

总结方法 CString 直接转换成宽字符类型的,在转的过程中同时也生成一个char [N] 类型的字符数组来存储。

char buf[500];
	wchar_t *ptr;
	ptr = str.GetBuffer(str.GetLength()*sizeof(wchar_t));
	WideCharToMultiByte(CP_ACP, 0, (LPCTSTR)ptr, -1, buf, sizeof(buf), NULL, NULL);
	str.ReleaseBuffer();

以上是最重要的地方,百度查了很多很多 转换的方法


扩展知识链接

CString、TCHAR*、char*转换

CString用法-转


接下来就是视频处理了-下次整理

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: