c语言子窗口参数,MFC里边制作简单的窗口输入并获取参数 | 时刻需

天啊!真的不容易

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

老样子,先说需求

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

思路:

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

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

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

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

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

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

功能部分开始

图片一键批量改名功能

1-1024x709.png

2.png

3-1024x451.png

4.png

5.png

6.png

7.png

在此处添加代码

// 将“关于...”菜单项添加到系统菜单中。

CMenu menu;

menu.LoadMenuW(IDR_MENU1);

SetMenu(&menu);

// IDM_ABOUTBOX 必须在系统命令范围内。

8.png

再添加一个窗体dialog

9.png

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

10.png

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

11.png

12-1024x404.png

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

13.png

给 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);

测试

14.png

15.png

16.png

此功能小结

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

学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();

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

扩展知识链接

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值