1.MFC
1.1 多选框和单选框都属于CButton类,其中有一个GetCheck函数可以返回当前是否被选中
1.2 MFC中获得EditBox所输入的文本的函数:
GetDlgItemTextW(IDC_EDIT_INPUT,strInput);
两个参数:
IDC_EDIT_INPUT,这个参数不一定叫这名字,是我们自己定的,可以右键EditBox,选择属性中最下一栏的ID进行更改,更改过后,这个ID就和你这个编辑框绑定在一起了。
strInput:这是一个变量,类型为CString,用于接收在输入框中的文本。注意:这个函数有三个版本:GetDlgItemText,GetDlgItemTextA以及GetDlgItemTextW,但是记住,用带W版本的!!
有Get函数,那么Set函数一般也是有的:SetDlgItemTextW(ID,str),Set函数用于设置某个控件上的文本
两个参数:ID以及文本,ID是找到某个控件,比如我们还是用上面的IDC_EDIT_INPUT,那么第二个参数:文本就会作用于这个编辑框
用法示例:SetDlgItemTextW(IDC_EDIT_INPUT,L“”)
作用:将编辑框中的内容设置为空,用于清空输入框
L所代表的是宽字符
1.3 获取当前控件对象的两种方式
1.以属性的方式
添加一个成员变量
2.使用GetDlgItem函数
使用GetDlgItem函数获取对象指针
注意:获得对象指针之后要进行一个转换,才能调用控件对象的一些方法:(CButton*)GetDlgItem(IDC_RADIO_RECT)
1.4 List控件和Combox控件
1.右键,添加成员变量,给控件起个名字,绑定在一起,便于操作,比如:m_listDemo
2.通过m_listDemo可以调用几个比较重要的方法AddString(index) 添加一个string
DeleteString(index) 删除一个string
GetCurSel() 获取当前选中的一个string,返回index
SetCurSel(index) 设置某个string为选中项
GetCount() 获得当前存入数量
1.5 在MFC中绘图需要刷新图像时
刷新图像:双击进入函数,加上Invalidate() 即可
场景:点击某个按钮之后,MFC中的图像需要作出相应改变的时候
各控件属性更改
1.Edit
1.可接受多行输入
Multiline: true
2.自动换行
Want Return: true
常与Multiline配合使用
3.竖直滚动条
vertical Scroll: true
也有水平滚动条,但是,如果选了多行输入,那么水平滚动条可不选
4.ID
ID一定要改,因为对EDIT的操作很多要依赖于ID,一个好的ID可以在写代码的时候提供极大的便利
2.Button
1.Caption
改写之后会呈现在界面上
2.ID
3.Static Text:静态文本
1.常用于提示,很少会改变
用于提示时,是唯一一个不用改ID的控件
2.用于显示数据
此时需要改ID
4.Check Box:多选框
设置变量名:右键:添加类:变量名:m_前缀
5.Radio:单选框
1.如果提示ID无效,那么只需要进行一下保存,写入资源图即可
6.Combox Control:下拉列表
1.type:可以改为下拉模式(Dropdown,此时框中可编辑),常用另一种模式:下拉列表
2.Data:可修改为1;2;3;直接在其中加入数据,但是一般不这么用,因为不用直接添加,直接置空即可
Sort:false:不使用默认调序,按照添加顺序排7.List Box :列表
1.Sort:false:不使用默认调序,按照添加顺序排
2.CString、std::string、CHAR、TCHAR的区别
CString(可能是char可能是wchar_t) std::string(一定是char) CHAR(一定是char) TCHAR(可能是char可能是wchar_t)
STL
vector
vector每次动态增长内存的大小
VS中每次增长现有容量的50%,及now_space+now_space/2,以下为VS中的源码:
size_type _Grow_to(size_type _Count) const
{ // grow by 50% or at least to _Count
size_type _Capacity = capacity();
_Capacity = max_size() - _Capacity / 2 < _Capacity
? 0 : _Capacity + _Capacity / 2; // try to grow by 50%
if (_Capacity < _Count)
_Capacity = _Count;
return (_Capacity);
}SGI中的vector每次动态增长内存为原内存的两倍,即now_space *=2,源码如下:
template <class Tp, class Alloc> void vector<Tp, Alloc>:: M_insert_aux(iterator position) { if (M_finish != M_end_of_storage) { construct(M_finish, *(M_finish - 1)); ++_M_finish; copy_backward(position, M_finish - 2, M_finish - 1); *position = Tp(); } else { const size_type old_size = size(); const size_type len = old_size != 0 ? 2 * old_size : 1;//下一句为分配len长度,len的长度为原来的2倍 iterator new_start = M_allocate(len); iterator new_finish = new_start; __STL_TRY { new_finish = uninitialized_copy(M_start, position, new_start); construct(new_finish); ++new_finish; new_finish = uninitialized_copy(position, M_finish, new_finish); } //如果在__STL_TRY中的操作出现异常则释放空间 __STL_UNWIND((destroy(new_start, new_finish),_M_deallocate(new_start, len))); destroy(begin(), end()); //M_start M_deallocate(M_start, M_end_of_storage - M_start); M_start = new_start; M_finish = new_finish; M_end_of_storage = new_start + len; } }
非const版本函数调用const版本函数的方法
代码示例:
const版本:
const char *begin() const
{
return str_;
}非const版本:
char *begin()
{
return const_cast<char*>(static_cast<const MyString&>(*this).begin());
}先将const版begin的返回值转为类对象引用,在胸const_cast去const化。
char*是本函数最终返回类型,MyString是类名
C++中的&和&&
&&就是右值引用, &是普通的左值引用, 左值是可以放在赋值号=左边的值, 右值是只能放在=右边的值
引用百度解释:https://zhidao.baidu.com/question/426629663273398972.html
我的理解:其实用&和&&都能够达到效果,但是用&&的效率会比&高点
CString转char*
示例:
CString test = L"ceshi";
USES_CONVERSION;
char * ceshi = T2A(test.GetBuffer());
test.ReleaseBuffer();