c++ - 需要调用两次 setter 以强制在 MFC 中刷新 GUI

标签 c++ combobox mfc

我正在使用 MFC ComboBox 控件来更改一些参数,这些参数在可用的 IP 范围内有选区(例如,只有/没有广播 IP)。

我需要调用范围修改函数两次以强制刷新显示值:为什么?

行为:

enter image description here

                         One call to range modification

 two call to range modification

                         Two calls to range modification

源代码:

void CIPAddressBugDlg::OnChangeCombo()
{

    UpdateData(TRUE);
    ChangeIPRange();
    //ChangeIPRange();

}


void CIPAddressBugDlg::ChangeIPRange()
{
    BYTE nField0, nField1, nField2, nField3;

    if ( Combo.GetCurSel() )
    {
        IpAddress.GetAddress(nField0, nField1, nField2, nField3);
        if ( nField0  < (BYTE) 224 )
            nField0 = 224;
        IpAddress.SetAddress(nField0, nField1, nField2, nField3);
        IpAddress.SetFieldRange(0, 224 , 232 );
    }
    else
    {
        IpAddress.GetAddress(nField0, nField1, nField2, nField3);
        if ( nField0  >= (BYTE) 224 )
            nField0 = 223;
        IpAddress.SetAddress(nField0, nField1, nField2, nField3);
        IpAddress.SetFieldRange(0, 0 , 223 );
    }
}

Combo 是一个 ComboBox 控件,IpAddress 是一个 CIPAddressCtrl。我正在运行 Windows XP 的 VS C++ 6.0(是的,我知道 -_- )上编译。

(如果需要我也可以上传整个玩具项目)

最佳答案

尝试将 SetFieldRange 移动到 SetAddress 之前,否则 Windows 将忽略 SetAddress,因为它超出了范围。

关于c++ - 需要调用两次 setter 以强制在 MFC 中刷新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21483123/

相关文章:

mfc - 哪种技术(MFC/Win32)更适合directx应用?

visual-c++ - mfc,任何人都可以帮忙设计一种喷枪算法吗,我只是不明白该怎么做

c++ - 文本字段如何响应 <Enter>

c# - 如何防止用户在 ComboBox 中写入内容?

c++ - 对于 C++ MacOSX 应用程序,要使用什么线程库?

C++ 为 T 的派生类覆盖 hash<T>

c++ - 如何将现有类重构为多态的?

c# - WinForms ComboBox - 单击文本输入时的事件

c# - ComboBox.SelectedValue 在 Form 的构造函数中为 null

c++ - 错误 : ‘IOV_MAX’ undeclared (first use in this function)