【问题标题】:Need to call twice a setter to force GUI refresh in MFC需要调用两次 setter 来强制在 MFC 中刷新 GUI
【发布时间】:2014-01-31 15:01:17
【问题描述】:

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

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

行为:

                         One 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(是的,我知道 -_- )上编译。

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

【问题讨论】:

    标签: c++ combobox mfc


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这就是它最初不起作用的原因!
    【解决方案2】:

    在第二次调用 UpdateData 之前,您不会更新编辑字段中的值。我不确定您为什么要依赖 OnChangeCombo 中的 UpdateData,但这就是导致该字段更新的原因。尝试删除对 UpdateData 的调用,并添加对 SetWindowText 的调用,或在 ChangeIPRange () 中等效的对话框命令来更新 IP 数据字段。

    【讨论】:

    • UpdateData 在这里没用(只是想看看它是否有帮助)。无论如何,作为一个非阻塞怪癖,我将保持双重调用不变,但最好能解释一下它为什么会这样。
    【解决方案3】:

    大概就这么简单:

    void CIPAddressBugDlg::OnChangeCombo()
    {
    
        UpdateData(TRUE);
        ChangeIPRange();
        UpdateData(FALSE);
    }
    

    ChangeIPRange 中所做的更改只有在您调用 UpdateData(FALSE) 时才会更新到控件。

    【讨论】:

    猜你喜欢
    • 2011-12-25
    • 2011-09-10
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多