基础控件的使用
- 创建和初始化
- 消息的响应
- 控制函数
按钮
- 使用
CButton
来绑定按钮控件. 一般不需要初始化 - 消息的响应 : 只有按钮被单击的消息.
- 控制函数 : SetWindowText来设置按钮的标题.
单选框
- 使用
CButton
绑定单选框控件 . - 初始化
- 单选框一般都是分组. 同一组的单选框的选中状态是互斥的.
- 需要将一组单选框中的第一个按钮的分组属性设置为True
分组属性只能给第一个控件设置 - 单选框也是按钮中的一种, 也有被点击的消息,响应方式和按钮一样.
- 操作函数:
- 单选框控件绑定了CButton类的变量的话, 可以使用GetCheck和SetCheck来获取和设置单选框的选中状态.
- 单选框控件绑定了CButton类的变量的话, 可以使用GetCheck和SetCheck来获取和设置单选框的选中状态.
- 单选框控件绑定了int类型的变量的话, int变量的值是一个分组中的单选框的序号. 使用UpdateData的时候,int类型的值是几,分组中的第几个单选框就被选中.
- 只需将分组中的第1个单选框添加int类型的变量即可.
- 修改了int类型变量的值在UpdateData的时候, MFC会自动操作同一分组内的其它单选框.
多选框
- 初始化
- 消息 : 和按钮一样.
- 操作函数:
- 绑定了CButton类型的变量, 可以GetCheck和SetCheck
- 帮定了以值类型的, 可以使用UpdateData来获取和修改选中状态.
编辑框
- 初始化 : 在资源编辑视图中的属性栏设置.
- 消息 : 编辑框文本被修改: EN_CHANGE
- 操作函数:
- 绑定了CEdit类型变量: ```c // 设置编辑框的最大文本个数 m_edit.SetLimitText(1000); // 设置是否是只读 m_edit.SetReadOnly(0); // 密码风格的时候,显示的字符,默认是’*’ m_edit.SetPasswordChar(‘@’); // 获取文本 CString buff; m_edit.GetWindowText(buff);
// 获取一共有几行 DWORD dwLineCount= m_edit.GetLineCount(); // 滚到到指定行. m_edit.LineScroll(dwLineCount);
<a name="212779d4"></a>
## 列表框
1. 初始化
2. 消息:
1. SEL_CHANGE : 当前选中项被修改
3. 操作函数
1. 控件类型绑定(CListBox):
1. AddString - 将一行字符串添加到列表框.
2. ResetContent - 清空所有项
3. GetCurSel - 获取当前选中项的下标
4. GetText - 获取指定下标的文本
5. 更多函数可以F1 CListBox类查看帮助文档.
<a name="d5ddc4f3"></a>
## 下拉框(组合框)
下拉框也称为组合框, 它是编辑框和列表框的组合
1. 初始化 : 有一个列表是否排序的属性
2. 消息 : ON_CBN_SELENDCANCEL - 当前选中项改变了
3. 操作函数
1. AddString - 向列表框添加文本
2. GetCurSel - 获取列表框的当前选中项
3. GetLBText - 获取列表框的指定行的文本
4. ResetContent - 清空列表框的所有节点
5. SetCurSel - 设置列表框的当前选中项
6. SetEditSel - 设置编辑框的文本
<a name="1af29b1f"></a>
## 静态文本
<a name="14d34236"></a>
### 标签
一般不需要绑定变量, 不需要响应消息. 标签只是一个文本提示而已.
如果想要动态修改标签的文本, 可以先得到标签控件的窗口句柄, 使用SetWindowText来修改即可.
<a name="0d19ffac"></a>
### 图片控件
1. 初始化
1. 修改资源ID(类向导不会自动静态文本类的控件的资源ID)
2. 将type属性修改成bitmap
3. 将center image改为true , 图片控件不能缩放要显示的图片, 如果图片比控件大, 控件会自动将大小修改成和图片一样大. 该属性设置为true之后, 控件大小就不会自动跟随图片大小, 而是使用固定大小, 并只只显示图片的部分内容.
2. 消息 : 不需要处理
3. 操作函数:
1. 绑定了控件类型(CStatic)
4. 给图片控件设置图片
1. 使用资源
1. 先将一张位图添加到资源中
2. 在图片控件的Image属性中填写位图的资源ID
<br />![1571966795130.png](https://cdn.nlark.com/yuque/0/2019/png/599030/1574943876985-2461666a-afc7-4471-bac1-684d5010e14e.png#align=left&display=inline&height=71&name=1571966795130.png&originHeight=71&originWidth=541&size=3483&status=done&width=541)
3. 调用CStatic.SetBitmap函数, 将位图的资源句柄设置进去.
```c
// 加载位图,得到资源句柄
HBITMAP hBitmap =
LoadBitmap(AfxGetInstanceHandle(),
(TCHAR*)IDB_BITMAP1);
m_pic.SetBitmap(hBitmap);
2.使用磁盘中的图片文件
CImage img;
img.Load(L"位图2.bmp");
pic.SetBitmap(img);
3. 加载GIF动图
1. 默认的CStatic类不支持这个功能
2. 需要自定义CStatic类(网上有CPictureEx类)
3. 添加图片控件, 添加变量的时候, 变量的类型使用CPictureEx类
4. 在项目中导入CPictureEx类的源码
5. 在对话框初始化函数中. 使用CPictureEx.Load函数加载GIF图片
6. 使用CPictureEx.Draw函数来开始绘制GIF图片
滑块
- 初始化
- 设置水平或垂直的风格
- 设置滑块的取值范围
- SetRange();
- 设置水平或垂直的风格
- 消息 :
- 如果滑块是水平风格, 向父窗口发送WM_HSCROLL消息
- 如果滑块是垂直风格, 向父窗口发送WM_VSCROLL消息
- 操作函数
- 控件类型绑定(CSliderCtrl)
- 初始化范围的函数:SetRange
- 获取当前位置:GetPos
- 设置当前位置:SetPos
- 控件类型绑定(CSliderCtrl)
进度条
- 进度条实际就是一个在界面上修改位置的滑块,但是通过SetPos来修改进度条的进度.
- 进度条和滑块外观是不一样的, 但也有水平和垂直
- 操作函数和滑块一模一样
- 通过SetRange 设置范围
- 通过SetPos来设置位置
- 通过GetPos来获取当前的位置
栏
菜单栏
- 添加一个菜单资源
- 使用CMenu来加载菜单
- 在OnInitDialog函数中使用SetMenu函数来设置程序的菜单栏
// 加载菜单
m_menu.LoadMenu(IDR_MENU1);
// 设置菜单栏
SetMenu(&m_menu);// m_menu类型是CMenu ;
菜单栏的消息响应:
弹出菜单
- 不能弹出根菜单
状态栏
// 2. 设置指示器的ID
UINT ids[] = { 1000,1001 };
m_statusBar.SetIndicators(ids, 2);
// 3. 设置面板的宽度
m_statusBar.SetPaneInfo(0, 0, 0, 120);
m_statusBar.SetPaneInfo(1, 1, 0, 80);
// 4. 设置面板的文本
m_statusBar.SetPaneText(0, L"程序启动完毕");
m_statusBar.SetPaneText(1, L"哈哈哈");
还需要在WM_SIZE的消息中调用函数来自动修改状态栏的位置
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,
AFX_IDW_CONTROLBAR_LAST, 0);
工具栏
加载:
m_toolBar.Create(this);
m_toolBar.LoadToolBar(IDR_TOOLBAR1);
响应点击消息
- 先得到工具栏按钮的ID:
- 响应WM_COMMAND消息
- 在wParam保存就是按钮ID`
- 先得到工具栏按钮的ID: