📄 dlg.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 + -