C++ MFC 对话框类 CSelBandsDlg 初始化和消息处理函数详解
C++ MFC 对话框类 CSelBandsDlg 初始化和消息处理函数详解
本代码展示了 MFC 对话框类 CSelBandsDlg 的初始化函数 OnInitDialog 和两个控件的消息处理函数 OnSelchangeList1 和 OnOK 的实现。
1. OnInitDialog 函数
BOOL CSelBandsDlg::OnInitDialog()
{
CDialog::OnInitDialog(); //调用父类的OnInitDialog函数
// TODO: Add extra initialization here
CheckRadioButton(IDC_GREY,IDC_RGB,IDC_RGB); //设置默认选中RGB模式
CheckRadioButton(IDC_R,IDC_B,IDC_R); //设置默认选中R通道
//将m_sarrBands中的字符串添加到列表框中
for(int i = 0; i < m_sarrBands.GetSize(); i++)
{
m_list.AddString(m_sarrBands[i]);
}
UpdateData(FALSE); //将数据更新到控件上
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
该函数在对话框创建时被调用,用于初始化对话框中的控件。具体操作如下:
- 调用父类 OnInitDialog 函数: 使用
CDialog::OnInitDialog()调用父类的初始化函数,完成对话框的默认初始化操作。 - 设置默认选中模式: 使用
CheckRadioButton函数分别设置默认选中 RGB 模式和 R 通道。 - 添加列表项: 循环遍历
m_sarrBands数组,将每个字符串添加到列表框m_list中。 - 更新数据: 使用
UpdateData(FALSE)将数据从变量更新到控件上。
2. OnSelchangeList1 函数
void CSelBandsDlg::OnSelchangeList1()
{
// TODO: Add your control notification handler code here
UpdateData(); //将控件上的数据更新到变量中
int nIndex=m_list.GetCurSel(); //获取当前选中项的索引
int result=GetCheckedRadioButton(IDC_R,IDC_B); //获取选中的通道
CString str;
if(result==IDC_R) //如果选中了R通道
{
CheckRadioButton(IDC_R,IDC_B,IDC_G); //将选中的按钮设置为G通道
m_list.GetText(nIndex,str); //获取选中的项的文本
str.TrimLeft(); //去除左侧空格
m_static_r=str; //将选中的项的文本设置为R通道的文本
}
if(result==IDC_G) //如果选中了G通道
{
CheckRadioButton(IDC_R,IDC_B,IDC_B); //将选中的按钮设置为B通道
m_list.GetText(nIndex,str); //获取选中的项的文本
str.TrimLeft(); //去除左侧空格
m_static_g=str; //将选中的项的文本设置为G通道的文本
}
if(result==IDC_B) //如果选中了B通道
{
CheckRadioButton(IDC_R,IDC_B,IDC_R); //将选中的按钮设置为R通道
m_list.GetText(nIndex,str); //获取选中的项的文本
str.TrimLeft(); //去除左侧空格
m_static_b=str; //将选中的项的文本设置为B通道的文本
}
UpdateData(FALSE); //将变量中的数据更新到控件上
}
该函数在列表框中的选中项发生改变时被调用,用于更新所选通道的文本。具体操作如下:
- 更新数据: 使用
UpdateData()将控件上的数据更新到变量中。 - 获取选中项索引和通道: 使用
GetCurSel()获取当前选中项的索引,使用GetCheckedRadioButton获取选中的通道。 - 根据通道设置文本: 根据选中的通道,设置对应通道的文本。例如,如果选中了 R 通道,则将列表框中选中项的文本设置为 R 通道的文本。
- 更新数据: 使用
UpdateData(FALSE)将变量中的数据更新到控件上。
3. OnOK 函数
void CSelBandsDlg::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK(); //关闭对话框
}
该函数在用户点击确定按钮时被调用,用于关闭对话框。具体操作如下:
- 调用父类 OnOK 函数: 使用
CDialog::OnOK()关闭对话框。
代码总结
上述代码实现了一个简单的选择波段对话框。该对话框允许用户选择 RGB 模式和三个通道 (R, G, B) 中的一个,并将列表框中的选中项的文本设置为所选通道的文本。
需要注意的是,代码中的 m_sarrBands、m_list、m_static_r、m_static_g、m_static_b 等变量需要在类中声明,具体实现方法需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/jnwh 著作权归作者所有。请勿转载和采集!