SetLimitText 不适用于 MFC 应用程序中的多行

Posted

技术标签:

【中文标题】SetLimitText 不适用于 MFC 应用程序中的多行【英文标题】:SetLimitText not working for multiline in MFC application 【发布时间】:2015-12-27 16:37:51 【问题描述】:

我有一个编辑文本控件,它在 .rc 中表示如下:

EDITTEXT IDC_EDIT1, 26, 23, 60, 14, ES_RIGHT | ES_MULTILINE | ES_AUTOHSCROLL

我尝试使用:m_editCtrl.SetLimitText(0); 取消限制 lext 但它不工作。如果我从 rc 文件 中删除 'ES_RIGHT',它运行良好。

有什么办法可以解除ES_RIGHT的文字限制?

提前致谢。

【问题讨论】:

【参考方案1】:
if(m_pEdit != NULL)

    CString strVal;
    //Get text value from the dit control
    m_pEdit->GetWindowText(strVal);

    //Get parent control
    CWnd* pParentHwnd = m_pEdit->GetParent();

    CRect ctrlRect;
    m_pEdit->GetWindowRect(&ctrlRect);
    pParentHwnd->ScreenToClient(&ctrlRect);

    DWORD dwStyle = m_pEdit->GetStyle();
    DWORD dwExstyle = m_pEdit->GetExStyle();
    CFont* pFont = m_pEdit->GetFont();
    int nCtrlID = m_pEdit->GetDlgCtrlID();
    DWORD dwSelection = m_pEdit->GetSel();
    CWnd* pWndPreviousCtrl = m_pEdit->GetNextWindow(GW_HWNDPREV);
    m_pEdit->DestroyWindow();

    if (dwStyle & ES_MULTILINE)
    
        dwStyle &= ~ES_MULTILINE;
    

    //Create edit control
    BOOL bIsCreated = m_pEdit->CreateEx(dwExstyle, _T("EDIT"), strVal, dwStyle, ctrlRect, pParentHwnd, nCtrlID);
    if (bIsCreated)
    
        //Set window position to maintain z-order for tab navigation
        m_pEdit->SetWindowPos(pWndPreviousCtrl, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_SHOWWINDOW);
        //Restore font
        m_pEdit->SetFont(pFont);
        //Restore last selection
        m_pEdit->SetSel(dwSelection);

        if (bHasFocus)
        
            m_pEdit->SetFocus();
        
    

【讨论】:

【参考方案2】:

看来ES_RIGHT 风格与ES_AUTOHSCROLL 不搭调。

如果您创建没有ES_RIGHT 样式的编辑控件,然后像这样修改它,看起来您可以使它工作:

GetDlgItem(IDC_EDIT1)->ModifyStyle(0, ES_RIGHT);

【讨论】:

【参考方案3】:

对于 ES_MULTILINE,该问题是可重现的。从rc中去掉multiline,就可以解决问题了。

【讨论】:

以上是关于SetLimitText 不适用于 MFC 应用程序中的多行的主要内容,如果未能解决你的问题,请参考以下文章

MFC 是不是仅适用于 Visual Studio,不适用于 Visual C++ Express?

用于非 MFC 应用程序的 Visual Studio 2012 资源编辑器

VS2015 MFC 修改应用程窗口大小 标题

推送通知不适用于 testflight 和 xcode 8 beta

一个 MFC/Win32 控件似乎让我的整个桌面重绘

如何禁用 Windows C++ MFC 应用程序状态栏中的 CAP NUM SCRL 指示器?