MFC:关于常用控件的一些处理函数[持续更新中]

记录一下项目当中用到的部分控件的常用函数,以及一些自写的处理函数

1. 控件值更新

  • UpdateData(FALSE);//将程序中的变量中的值更新到空间中去
  • UpdateData(TRUE);//将控件中输入的值更新到程序中的变量中

2. MFC的CcomboBox无法显示下拉内容

神一样的问题,下拉框无法显示,解决方法:在拖这个控件的时候,把框框上下一定要拉大!每次找好久才能找到上下拉的光标。字符集才会有这个问题,在Unicode工程下 是不需要这样操作的。
在这里插入图片描述

3.MFC数据有效机制DDV——提示方法

MFC提供了类CDataExchage 来实现对话框类与控件交换(DDX),该类还提供了数据有效机制(DDV),可以查看MFC对该机制的定义
在此,以DDV_MinMaxInt;函数为例,讨论一下提示的问题:

DDX_Text(pDX, IDC_EDIT1, m_test);
DDV_MinMaxInt(pDX, m_test, 1, 100000);

上述函数可以设置变量m_test的最大值和最小值,如果对应的控件输入超过这个范围,会弹出MFC的提示。如果想要修改这个默认的提示,让提示框输出自己想要的内容,需要在DDV_MinMaxInt函数的基础上重写:
自写对话框类h文件里函数的声明

class CModBus485MasterDlg : public CDialog
{
	...
	void AFXAPI DDV_MyMinMaxInt(CDataExchange *pDX, const int &value, const int &minVal, const int &maxVal, const CString &ctrlName);
	...
}

对话款类cpp文件里重写

void AFXAPI CModBus485MasterDlg::DDV_MyMinMaxInt(CDataExchange *pDX, const int &value, const int &minVal, const int &maxVal, const CString &ctrlName)
{
    ASSERT(minVal <= maxVal);
    if (pDX->m_bSaveAndValidate) {
        if (value < minVal || value > maxVal) {
            CString mssg;
            mssg.Format(_T("请在%s中输入一个介于 %d 和 %d 之间的值!"), ctrlName, minVal, maxVal);
            ::AfxMessageBox(mssg);
            pDX->Fail();
        }
    }
}

然后在cpp文件中的DoDataExchange函数里调用

void CModBus485MasterDlg::DoDataExchange(CDataExchange *pDX)
{
    CDialog::DoDataExchange(pDX);
    CString str = "卡件通道数";
    DDV_MyMinMaxInt(pDX, m_nFunCode16, 0, 120, str);//可以直接将字符串输入,DDV_MyMinMaxInt(pDX, m_nFunCode16, 0, 120,"卡件通道数");
}

然后可以实现如下效果
MFC:关于常用控件的一些处理函数[持续更新中]_第1张图片
最后提示一下,永远永远不要显示调用DDX_Text和DDV_MinMaxInt函数,一定要放在DoDataExchange()函数里调用。而DoDataExchange()函数在每次UpdateData()函数里自动调用的。

你可能感兴趣的:(MFC,MFC)