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 资源编辑器