VS2017 常用函数与数据类型-笔记

一、MFC入门常用函数和数据类型笔记

CString:MFC控件从面板上得到数据一般是CString
GetDlgItem(控件ID)->GetwindowText(CString字符串):获取ID号为xxx的CString字符串
_ttol(CString字符串):将CString转换为int,double,float等数据类型
CString字符串.Format(_T(“%d”),类型为int、double、float的数据):将这样的数据转换为CString
SetDlgItemText(控件ID,CString字符串):在ID为xxx的控件上显示转换为CString字符串的数据

二、快捷键

说明:组合键是同时按,非组合键是按住Ctrl依次按后面的键
1.格式化
格式化全部代码 Ctrl+A+K+F
格式化选中的代码 Ctrl+K+F

2.注释代码
注释代码 Ctrl+K+C(comment)
反注释代码 Ctrl+K+U

3.代码录入智能提示
组合键 Ctrl+J
组合键 Alt+→

4.移动调整代码

1)调整一行:按住Alt键同时,按方向键上或下可以调整代码的顺序

2)同时移动多行:

a)先按住Shift+Alt 然后按上或下选中多行,有条竖线产生;

b)然后只松开Shift键,按上下方向键移动多行。

5.快速隐藏或显示当前代码段
组合键:Ctrl+M,M 按两次M

6.全屏显示/退出全屏显示
组合键 SHIFT + ALT + ENTER

7.剪切复制粘贴删除
删除,复制,剪切一行代码不需要选中,只需要光标在这一行就是了
复制 Ctrl+C
剪切 Ctrl+X
粘贴 Ctrl+V
删除 Ctrl+L

8.在光标所在行的上面或下面插入一行
配合5使用,效果更佳
在当前行的上面插入一个空行 组合键:Ctrl+Enter
在当前行的下面插入一个空行 组合键:Ctrl+Shift+Enter

9.查找和替换
查找 组合键:Ctrl+F
替换 组合键:Ctrl+H

10.大小写转换
转小写 组合键:Ctrl+ U
转大写 组合键:CTRL + SHIFT + U

11.快速切换窗口
组合键:Ctrl+Tab

12.跳转到指定的某一行
组合键:Ctrl+G

13.矩形区域选择

组合键:Shift+Alt+鼠标拖动 (很适合区域代码块选择)

三、文本框自动换行

MFC如何让编辑框自动换行,垂直滚动条自动下移到底端

1.新建一个编辑框控件(Edit Control),将其多行(Multiline)前面打勾(属性设置为True),Auto HScroll前面的勾去掉(属性设置False),这样就可以实现每一行填满后自动换行了。

2.再将垂直滚动条(Vetrical Scroll)前面打勾(属性设置为True),当输入或显示超过编辑框的大小后就会出现垂直滚动条。

3.如果是输入,滚动条会自动移动跟随到当前输入行,但是如果是设置将很多内容一次性让编辑框显示,滚动条就会一直处于最上方,需要手动拉到最下面才能看见最后一行的内容,在很多时候这是我们不需要的,而是想要滚动条处于最下方,如下的代码将实现这一功能:

this->SetDlgItemText(IDC_EDIT_RECV,str);//将字符串str中内容显示到ID为IDC_EDIT_RECV的编辑框
m_recvshw.LineScroll(m_recvshw.GetLineCount());//m_recvshw为该编辑框的成员变量(也就是control类型的变量)
//使用控件变量的一些成员函数设置滚动条的位置

四、bin文件读取打开,和打印输出

参考代码:


void CMFCApplication2Dlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	CString FilePathName,FileName,stringInput,binstr;
	CStdioFile file;

	int file_length;
	int i = 0;
	

	CFileDialog dlg(TRUE,
		NULL,
		NULL,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		(LPCTSTR)_TEXT("Bin Files (*.bin)|*.BIN|*.Bin|All File (*.*)|*.*||"),
		NULL);
	if (dlg.DoModal() == IDOK)
	{
		FilePathName = dlg.GetPathName();
		FileName = dlg.GetFileName();
		SetDlgItemText(IDC_EDIT4, FilePathName);
		SetDlgItemText(IDC_STATIC_File,FileName);

		file.Open(FilePathName,CFile::modeRead | CFile::typeBinary);

		//file_length = GetFileSize(file,NULL);
		file_length = file.GetLength();

		UCHAR  *file_buffer = new UCHAR[file_length+10];

		file.Read(file_buffer, file_length);

		stringInput.Format(_T("%d byte \r\n"), file_length);

		binstr += stringInput;
		//SetDlgItemText(IDC_EDIT3,stringInput);
		file.Close();


		for (i = 0; i < file_length; i++)
		{
			stringInput.Format(_T("%02X "), file_buffer[i]);
			binstr += stringInput;

			if ((i+1) % 16 == 0)
			{
				binstr += _T("\r\n");
			}

			//binstr += stringInput;
		}
		

		SetDlgItemText(IDC_EDIT3, binstr);
	}
	else
	{
		return;
	}
}

在这里插入图片描述

五、new和delete运算符是用于动态分配和撤销内存的运算符。

一、new用法

1.开辟单变量地址空间

使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,如果申请不成功,则返回零值。

new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有标识符名。

一般使用格式:
格式1:指针变量名=new 类型标识符;
格式2:指针变量名=new 类型标识符(初始值);
格式3:指针变量名=new 类型标识符 [内存单元个数];

说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。例如:

1)new int;  //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址。int *a = new int 即为将一个int类型的地址赋值给整型指针a

2)int *a = new int(5) 作用同上,但是同时将整数空间赋值为5

2.开辟数组空间

对于数组进行动态分配的格式为:

   指针变量名=new 类型名[下标表达式];
   delete [ ] 指向该数组的指针变量名;

两式中的方括号是非常重要的,两者必须配对使用,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。

delete []的方括号中不需要填数组元素数,系统自知。即使写了,编译器也忽略。

请注意“下标表达式”不必是常量表达式,即它的值不必在编译时确定,可以在运行时确定。

一维: int *a = new int[100];    //开辟一个大小为100的整型数组空间

二维: int **a = new int[5][6]

三维及其以上:依此类推.

一般用法: new 类型 (初值)

二、delete用法

  1. 删除单变量地址空间

    int *a = new int;
    
    delete a;   //释放单个int的空间
    
  2. 删除数组空间

    int *a = new int[5];
    
    delete []a;    //释放int数组空间
    

三、使用注意事项

  1. new 和delete都是内建的操作符,语言本身所固定了,无法重新定制,想要定制new和delete的行为,徒劳无功的行为。

  2. 动态分配失败,则返回一个空指针(NULL),表示发生了异常,堆资源不足,分配失败。

  3. 指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针。

  4. 内存泄漏(memory leak)和重复释放。new与delete 是配对使用的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。

  5. 动态分配的变量或对象的生命期。我们也称堆空间为自由空间(free store),但必须记住释放该对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放,往往会出错。

  6. 要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。

    用new和delete可以动态开辟和撤销地址空间。在编程序时,若用完一个变量(一般是暂时存储的数据),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它。

六、获取Edit Control 内容转数字

	CString strEDIT1, strEDIT2, strEDIT3;
	GetDlgItem(IDC_EDIT1)->GetWindowTextW(strEDIT1);		//获取字符串
	GetDlgItem(IDC_EDIT2)->GetWindowTextW(strEDIT2);

	int a, b, c;
	
	a = _ttol(strEDIT1);	//字符串转数字
	b = _ttol(strEDIT2);
	c = a + b;

	strEDIT3.Format(_T("%d"), c);
	SetDlgItemText(OUT_PUT1, strEDIT3);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码网上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值