之前在做ADC波形显示器时,需要实现点击按钮开始/关闭采样,同时也需要在文本框输出日志和当前采样状态信息等,点击按钮后按钮的形态也可能需要变化。这些功能的实现都需要对MFC的空间进行动态更新。在解决此问题时,我也查找总结了两种较为常见的控件更新方法,可用于不同需求。
方法1:UpdateData方法
此方法为最简单的控件数据更新方法,只需要修改控件绑定的变量参数,然后使用UpdateData(False);函数将变量数据与控件同步即可。不要忘记在同步完成后将UpdateData恢复为True。
该函数具体功能如下:
将控件中的值更新到变量 UpdateData(TRUE); 将变量中的值更新到变量 UpdateData(False);
使用范例:
DDX_Text(pDX, IDC_SHOWER, ScanSign); ScanSign(_T("采样已停止")) UpdateData(TRUE); ScanSign = _T("采样进行中"); UpdateData(FALSE); //ScanSign的显示值在此处已更新
但要注意的是,UpdateData函数只能控制控件全局的数据更新,开启或关闭UpdateData会直接控制当前界面所有控件的同步状态,在控件过多或者只想操纵某一指定控件时较不适用。
方法2:使用GetDlgItem()函数
GetDlgItem()函数可以控制指定控件的数值更新,具体用法如下:
CString TempSign; GetDlgItem(IDC_SHOWER)->SetWindowText(_T("采样进行中[") + TempSign + _T("s]")); //在badge显示运行时长
向GetDlgItem()函数内填写对应控件ID,然后->右侧使用SetWindowText()更新数据即可。该方式更加灵活,适用于单个控件的更新,且相比UpdateData效率更高,但如果需要全局控件更新,则该方法过于繁琐。
参考:http://www.cnblogs.com/skywatcher/p/3750059.html