知识点随记

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::
            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(static_cast(*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();

如有错误,请指正!

你可能感兴趣的:(知识点随记,随记)