gpt4 book ai didi

mfc - CComboBox DDX_CBString 行为令人困惑

转载 作者:行者123 更新时间:2023-12-05 01:32:41 25 4
gpt4 key购买 nike

我在 Dialog 中使用 ComboBox 控件来为用户提供一些有用的值(例如:10;20;100;400;800)但让用户在需要时插入确切的值。

很长一段时间后我发现了什么:
如果我输入值 40 在组合框中,组合框总是在 UpdataData() 之后返回 400 . :((
其他值 39 41 , 没有问题。

这不是我和用户所期望的行为。
当我输入一个值时,ComboBox 应该取这个值,如果从下拉菜单中选择,取这个。

我现在看到这种行为是由 DDX_CBString 给出的。

我必须编写自己的 DDX_CBString 还是有另一种方法?

代码:

void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_IFBANDWIDTH, m_cIFBandWidth);
DDX_CBString(pDX, IDC_IFBANDWIDTH, m_sIFBandWidth); // Bahavior confusing
}

BOOL CTestDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();

m_cIFBandWidth.ResetContent();

m_cIFBandWidth.AddString(_T("10"));
m_cIFBandWidth.AddString(_T("20"));
m_cIFBandWidth.AddString(_T("100"));
m_cIFBandWidth.AddString(_T("400"));
m_cIFBandWidth.AddString(_T("800"));


return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

void CTestDialog::OnBnClickedApply()
{
UpdateData(TRUE); // m_sIFBandWidth now 4 ok!
UpdateData(FALSE); // m_sIFBandWidth still 4, but control show 400, so the next OnOk() or Apply() take this value. Wrong!
}

最佳答案

我通过修改 DDX_CBtring 解决了这个问题。

void DDX_CBString_Normal(CDataExchange* pDX, int nIDC, CString& value)
{
..
if (pDX->m_bSaveAndValidate)
{
..
}
else
{
// Behaviour as we expect: Type a value and keep it
// Select it form dropwon, or take the value the user type it
AfxSetWindowText(hWndCtrl, value);
return;

/* Disable original MS behavior
// set current selection based on model string
if (::SendMessage(hWndCtrl, CB_SELECTSTRING, (WPARAM)-1,
(LPARAM)(LPCTSTR)value) == CB_ERR)
{
// just set the edit text (will be ignored if DROPDOWNLIST)
AfxSetWindowText(hWndCtrl, value);
}
*/
}
}

如果有人有另一种方法,请告诉我。

关于mfc - CComboBox DDX_CBString 行为令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36016759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com