天啊!真的不容易
之前一直没接触过MFC和QT,最近刚学习了下C已经学到了第六章的中间。
老样子,先说需求
需求:环境 windows电脑上,想做一个批量上传图片和视频的软件(不想再PHP,因为普通用户是不会搭建apache环境的,集成的方法也不想用,直接做成一个EXE程序多好)
思路:
1.图片类的只需传递一个路径即可开始上传
2.视频类的先查询MD5,调用数据库接口判断是否以前有上传过,如果没有传过则开始切片
3.配置文件(如果电脑好的可以同时切多个视频)
4.切好的视频则开始上传
5.上传完成后请求接口增加数据库视频数据
6.提前布局好视频搜索引擎功能(统一视频的所有信息,一条视频即为一个对象,在全球是唯一的,用作以后云端公用,一旦所有人都按照这个标准走那么将会给整个互联网节省很多资源)
功能部分开始
图片一键批量改名功能
在此处添加代码
// 将“关于...”菜单项添加到系统菜单中。
CMenu menu;
menu.LoadMenuW(IDR_MENU1);
SetMenu(&menu);
// IDM_ABOUTBOX 必须在系统命令范围内。
再添加一个窗体dialog
给这个窗体添加一个类(如上图)
再选择刚才添加的菜单,然后在上边添加一个事件(就是点击时 让窗体出现)
事件添加完成后,来稍微做下窗体里的简单布局,如上图 分别选择 button,edit control ,static text这三个小插件
给 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);
测试
此功能小结
本以为这个小功能将会非常简单,但是在做的过程中简直要炸裂了。
学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();
以上是最重要的地方,百度查了很多很多 转换的方法
扩展知识链接
接下来就是视频处理了-下次整理