⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlg.cpp

📁 设置空间字体
💻 CPP
字号:
#include <afxwin.h>
#include "Resource.h"
#include "dlg.h"

CDlg::CDlg(CWnd* pParent) : CDialog(IDD_DIALOG, pParent)
{
}

BOOL CDlg::OnInitDialog()
{
	//调用父类初始化方法
	CDialog::OnInitDialog();
	//设置组合框的最大字符数为系统最大值
	m_combo.LimitText(0);
	//上次输入字符长度初始化为0
	iTextLen = 0;
	return true;
}

void CDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//将组合框控件与数据成员m_combo绑定
	DDX_Control(pDX, IDC_COMBO, m_combo);
}

void CDlg::OnClear()
{
	//清除组合框中的所有数据
	m_combo.ResetContent();
}

//组合框输入发生变化
void CDlg::OnCbnEditChange()
{
	CString StrComboData, StrListData;
	int index;

	//取出组合框内容给StrComboData
	m_combo.GetWindowText(StrComboData);
	//如果输入值不为空或者上次输入字符长度小于输入值的长度
	//则表示有新字符被输入
	if ((StrComboData != "") && (iTextLen < StrComboData.GetLength()))
	{
		//在组合框的下拉列表中有匹配的数据
		if ((index = m_combo.FindString(-1, StrComboData)) != CB_ERR)
		{
			//得到匹配数据的字符串
			m_combo.GetLBText(index, StrListData);
			//显示下拉列表框
			m_combo.ShowDropDown(true);
			//移动下拉列表框,第一行显示为匹配的数据
			m_combo.SetTopIndex(index);
			//显示下拉列表框后系统会自动更新组合框内容
			//设置组合框内容为下拉列表框的数据
			m_combo.SetWindowText(StrListData);
		}
		//没有找到相匹配的数据
		else
		{
			//隐藏下拉列表框
			m_combo.ShowDropDown(false);
			//隐藏下拉列表框后系统会自动更新组合框内容
			//设置组合框内容为当前的输入值
			m_combo.SetWindowText(StrComboData);
		}
	}
	//没有新的字符被输入
	else
	{
		//隐藏下拉列表框
		m_combo.ShowDropDown(false);
		//隐藏下拉列表框后系统会自动更新组合框内容
		//设置组合框内容为当前的输入值
		m_combo.SetWindowText(StrComboData);
	}
	//上次输入字符长度为输入值的长度
	iTextLen = StrComboData.GetLength();
	//展开下拉列表框会改变组合框内容
	//将组合框内容输入值的长度后的文本选择上
	m_combo.SetEditSel(iTextLen, -1);
}

//CDialog类中按回车键会自动运行OnOK事件
//该问题如何解决,请自己查,这里不做讲述
void CDlg::OnOK()
{
	CString StrComboData;
	CWnd *pWnd = GetFocus();

	if(pWnd != NULL)
	{
		//CComboBox控件包含有编辑框和列表框两个子控件
		//pWnd->GetParent()才是CComboBox控件
		if(pWnd->GetParent() == GetDlgItem(IDC_COMBO))
		{
			//取出组合框内容给StrComboData
			m_combo.GetWindowText(StrComboData);
			if (StrComboData != "")
			{
				//组合框的下拉列表框中没有组合框内容的数据
				if (m_combo.FindStringExact(-1, StrComboData) == CB_ERR)
				{
					//添加输入值至组合框列表中
					m_combo.AddString(StrComboData);
					//将组合框内容清空
					m_combo.SetWindowText("");
				}
			}
		}
	}
}

BEGIN_MESSAGE_MAP(CDlg, CDialog)
	//点击清空按钮事件
	ON_BN_CLICKED(IDC_CLEAR, OnClear)
	//组合框内容改变事件
	ON_CBN_EDITCHANGE(IDC_COMBO, OnCbnEditChange)
END_MESSAGE_MAP()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -