参考:
MFC学习笔记-4-选项控件Combox的使用(https://dandelioncloud.cn/article/details/1517727978783109122)
文章目录
- 控件与变量关联
- 各控件的使用
- Combo Box
- 添加
- 设置默认选项
- 插入 index从0开始
- 删除
- 获取1号索引的具体内容
- 添加事件
- 获取当前index
- 清空
- Button
- 设置是否可用是否显示
- Check Box
- 获取和设置选中状态
- Spin Control
- 结合edit微调int值
- 结合edit微调double值
- EditControl
- 获取设置内容(包括double和CString的相互转换)
控件与变量关联
MFC通过dialog创建完布局后想要在代码里进行修改还需要通过右键控件的Class Wizard…创建关联变量,以combox为例,还可以直接Add Variable…就不举例了,不同方式同样的效果。
双击IDC_COMBO1
双击后弹出该窗口添加variable nale点击finish
再点击上一个窗口的OK,该变量就在对应头文件中创建并关联完成了,后面就可以根据这个变量修改该控件的所有属性值了。
各控件的使用
目前就是使用到啥写啥,肯定不全面后面可能不断补充有其他需求的可自行百度哈。
Combo Box
添加
添加内容有两种方式
- 从属性的data里直接添加用分隔符分开
- 代码添加利用AddString函数
可以强转传入char
可能会出现乱码的情况,此时需要右键该项目属性,修改里面的编码格式为Use Multi-Byte Character Set,就可以显示正常了。
设置默认选项
插入 index从0开始
删除
获取1号索引的具体内容
char name[256] = { "哈哈哈" };
m_combox.AddString(TEXT("one"));
m_combox.AddString(TEXT("two"));
m_combox.AddString(TEXT("three"));
m_combox.AddString((LPCTSTR)name);
// 设置默认选项
m_combox.SetCurSel(0);
// 插入 index从0开始
m_combox.InsertString(2, TEXT("four"));
// 删除
m_combox.DeleteString(0);
// 获取1号索引的具体内容
CString std;
m_combox.GetLBText(1, std);
MessageBox(std);
添加事件
如下图,添加完名字回车后就会生成对应处理函数,也可以双击控件添加事件。
所有控件都如此,后面不再介绍。
获取当前index
// 获取当前index
int index = m_combox.GetCurSel();
清空
m_combox.ResetContent();
Button
设置是否可用是否显示
// 按钮不可用(变灰)
m_button.EnableWindow(0);
// 按钮可用
m_button.EnableWindow(1);
// 按钮不显示 (消失)
m_button.ShowWindow(0);
// 按钮显示 出现
m_button.ShowWindow(1);
Check Box
获取和设置选中状态
// 获取
int state = m_check.GetCheack();
// 设置check box状态
m_check.SetCheck(0); // 非选中
m_check.SetCheck(1); // 选中
Spin Control
结合edit微调int值
前提设置edit和spin属性值,在默认的基础上设置edit Number属性值为true
spin的set buddy integer属性值设置为true
然后在初始化处添加代码
//数值调节控件初始化
//设置范围
m_spin.SetRange32(0, INT_MAX);
//设置数据的进制
//m_spin.SetBase(10);
//设置伙伴控件
m_spin.SetBuddy(GetDlgItem(IDC_EDIT1)); // edit的ID
//or 同上作用
//m_spin.SetBuddy(&spinEdit);
//设置默认显示
m_spin.SetPos(0);
结合edit微调double值
头文件定义double变量,双击spin控件添加OnDeltaposSpin1事件,利用UDN_DELTAPOS属性。
变量定义:
OnDeltaposSpin1函数的实现代码如下。
void CMFCLearnDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: Add your control notification handler code here
if (!UpdateData(TRUE))
{
m_dNum = 0;
UpdateData(FALSE);
return;
}
if (pNMUpDown->iDelta == -1) // 如果此值为-1 , 说明点击了Spin的往上箭头
{
m_dNum = m_dNum + 0.1;
}
else if (pNMUpDown->iDelta == 1) // 如果此值为, 说明点击了Spin的往下箭头
{
m_dNum = m_dNum - 0.1;
}
if (m_dNum > INT_MAX || m_dNum < 0)
{
UpdateData(TRUE);
}
UpdateData(FALSE);
*pResult = 0;
}
EditControl
获取设置内容(包括double和CString的相互转换)
// 获取值
CString width_value;
widthEdit.GetWindowTextA(width_value);
unsigned long long value = atof(width_value);
// 设置值 value为double值 widthEdit为对应edit控件
CString widthValue;
widthValue.Format(_T("%d"), value);
widthEdit.SetWindowTextA(widthValue);