类似资源管理器的树型菜单中,当点中一个节点修改它的值时,输入数据,随着输入数据的多少,则编程框的长度自动增长,这是怎么实现的?

解决方案 »

  1.   

    响应重载CEdit::OnChar(), 判断输入的字符个数,然后SetWidowPos()即可
      

  2.   

    在Edit内容变化时,做如下处理:
    得到CEdit的DC,假设是CDC *pDC,用pDC->GetTextExtent()得到Edit中字符的长度,再加上一点固定的附加值作为长度,用SetWindowPos()或MoveWindow()来重新设置Edit的大小即可
      

  3.   

    CEdit m_EditBox;
    这是我自定义的一个编辑框。应该在哪个事件里写呢?我有一个
    BOOL CMyTreeCtrl::PreTranslateMessage(MSG* pMsg) 在这里写行吗?
      

  4.   

    // Resize edit control if needed    // Get text extent
        CString Text;    GetWindowText (Text);
        CWindowDC DC (this);
        CFont *pFont = GetParent()->GetFont();
        CFont *pFontDC = DC.SelectObject (pFont);
        CSize Size = DC.GetTextExtent (Text);
        Size.cx += 5;     // add some extra buffer    // Get client rect
        CRect Rect, ParentRect;
        GetClientRect (&Rect);
        GetParent()->GetClientRect (&ParentRect);    // Transform rect to parent coordinates
        ClientToScreen (&Rect);
        GetParent()->ScreenToClient (&Rect);    // Check whether control needs to be resized and whether there is space to grow
        if (Size.cx > Rect.Width())
        {
    if (Size.cx + Rect.left < ParentRect.right )
    Rect.right = Rect.left + Size.cx;
    else
    Rect.right = ParentRect.right;
    MoveWindow (&Rect);
        }