C++ MFC 对话框类 CSelBandsDlg 初始化和消息处理函数详解

本代码展示了 MFC 对话框类 CSelBandsDlg 的初始化函数 OnInitDialog 和两个控件的消息处理函数 OnSelchangeList1OnOK 的实现。

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_sarrBandsm_listm_static_rm_static_gm_static_b 等变量需要在类中声明,具体实现方法需要根据实际情况进行调整。

C++ MFC 对话框类 CSelBandsDlg 初始化和消息处理函数详解

原文地址: https://www.cveoy.top/t/topic/jnwh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录