VC6.0中动态数据交换DDX
如下代码
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_strEdit1);
DDX_Text(pDX, IDC_EDIT2, m_strEdit2);
DDV_MaxChars(pDX, m_strEdit1, 5);
DDV_MaxChars(pDX, m_strEdit2, 5);对Edit1的最多字符限制不起作用!! DDV_MaxChars(pDX, m_strEdit2, 5);
DDX_Text(pDX, IDC_EDIT1, m_strEdit1);
DDX_Text(pDX, IDC_EDIT2, m_strEdit2);
DDV_MaxChars(pDX, m_strEdit1, 5);
这中情况下仍然对Edit1不起作用经过测试发现在最新版的VC.net2003中仍然存在相同的Bug!!!
微软的垃圾!!!!

解决方案 »

  1.   

    经过仔细研究发现你是垃圾,如果你要对编辑控件(Edit)进行字符限制,1.对其绑定CString成员
    2.调用窗口的((CEdit*)GetDlgItem(ID_EDIT))->SetLimitText(nMax);你认为的VC存在Bug,那是因为你没有吃透DDX,DDV的机制
      

  2.   

    我要是这样做的话还用你说吗?
    我n年以前已经知道了
    看来,你跟本不知道MFC有动态数据交换这个问题?
    难怪你满嘴的垃圾!
      

  3.   

    不要轻谈VC Bug,先考录一下自己的程序的BUG
      

  4.   

    严重同意 cadinfo(无语清风)。
      

  5.   

    楼主的测试结果是正确的,但这不是vc的bug.MSDN: MFC Library Reference,TN026: DDX and DDV Routines
    其中有这么一段:The DDV_ routine should immediately follow the DDX_ routine for that field.
    是楼主没有按照文档说明的去做.
    如果我是楼主,碰到问题首先会察看vc的源代码,而不是上来说垃圾和被说垃圾:DDV_MaxChars(...)
    {
    ......
        HWND hWndLastControl;
        pDX->m_pDlgWnd->GetDlgItem(pDX->m_idLastControl, &hWndLastControl);
        ::SendMessage(hWndLastControl, EM_LIMITTEXT, nChars, 0);
    ......
    }显然这里是对pDX->m_idLastControl控件设置最大字符个数,那m_idLastControl是哪里设置的呢?void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, CString& value)
    {
    ......
        HWND hWndCtrl = pDX->PrepareEditCtrl(nIDC);//调用pDX->PrepareCtrl
    ......
    }HWND CDataExchange::PrepareCtrl(int nIDC)
    {
    ......
        m_idLastControl = nIDC;
    ......
    }无语......
    原来楼主真的是垃圾......